1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2025-03-14 11:29:15 +01:00

Merge pull request #1 from emj365/feature/translation

Feature/translation
This commit is contained in:
Lucio 2016-01-17 16:58:38 +00:00
commit 909a5ab886
49 changed files with 363 additions and 365 deletions

View File

@ -204,11 +204,11 @@ Application.Controllers.controller "newEventController", ["$scope", "$state", 'E
## Possible types of recurrences for an event
$scope.recurrenceTypes = [
{label: 'Aucune', value: 'none'},
{label: 'Tous les jours', value: 'day'},
{label: 'Chaque semaine', value: 'week'},
{label: 'Chaque mois', value: 'month'},
{label: 'Chaque année', value: 'year'}
{label: 'None', value: 'none'},
{label: 'Everyday', value: 'day'},
{label: 'Every week', value: 'week'},
{label: 'Each month', value: 'month'},
{label: 'Every year', value: 'year'}
]
## Using the EventsController

View File

@ -136,7 +136,7 @@ Application.Controllers.controller 'ApplicationController', ["$rootScope", "$sco
type: 'danger'
]
.result['finally'](null).then (user) ->
growl.addInfoMessage('Votre mot de passe a bien été modifié.')
growl.addInfoMessage('Your password has been changed.')
Auth.login().then (user) ->
$scope.setCurrentUser(user)
, (error) ->
@ -272,7 +272,7 @@ Application.Controllers.controller 'ApplicationController', ["$rootScope", "$sco
# Authentication failed...
$scope.alerts = []
$scope.alerts.push
msg: 'E-mail ou mot de passe incorrect.'
msg: 'Incorrect Email or password.'
type: 'danger'
# handle modal behaviors. The provided reason will be used to define the following actions
@ -314,12 +314,12 @@ Application.Controllers.controller 'ApplicationController', ["$rootScope", "$sco
$modalInstance.close()
.error ->
$scope.alerts.push
msg: "Votre adresse email n'existe pas."
msg: "Your email address does not exist."
type: 'danger'
]
.result['finally'](null).then ->
growl.addInfoMessage('Vous allez recevoir sous quelques minutes un e-mail vous indiquant comment réinitialiser votre mot de passe.')
growl.addInfoMessage('You will receive an email within a few minutes telling you how to reset your password.')
# otherwise the user just closed the modal

View File

@ -9,23 +9,23 @@ Application.Controllers.controller "mainNavController", ["$scope", "$location",
$scope.navLinks = [
{
state: 'app.public.home'
linkText: 'Accueil'
linkText: 'Home'
linkIcon: 'home'
}
{
state: 'app.public.machines_list'
linkText: 'Liste des machines'
linkText: 'Our Machines'
linkIcon: 'gears'
}
{
state: 'app.public.events_list'
linkText: 'Liste des stages et ateliers'
linkText: 'List of events and workshops'
linkIcon: 'tags'
}
{
state: 'app.public.projects_list'
linkText: 'Galerie de projets'
linkText: 'Project Gallery'
linkIcon: 'th'
}
]
@ -34,22 +34,22 @@ Application.Controllers.controller "mainNavController", ["$scope", "$location",
$scope.adminNavLinks = [
{
state: 'app.admin.members'
linkText: 'Suivi utilisateurs'
linkText: 'Review users'
linkIcon: 'users'
}
{
state: 'app.admin.events'
linkText: 'Suivi stages et ateliers'
linkText: 'Review courses and workshops'
linkIcon: 'tags'
}
{
state: 'app.public.machines_list'
linkText: 'Gérer les machines'
linkText: 'Manage machinery'
linkIcon: 'cogs'
}
{
state: 'app.admin.project_elements'
linkText: 'Gérer les éléments Projets'
linkText: 'Manage Projects'
linkIcon: 'tasks'
}
]

View File

@ -104,9 +104,9 @@ class ProjectsController
##
# This will remove the given file from the project's CAO attachements list. If the file was previously uploaded
# This will remove the given file from the project's CAD attachements list. If the file was previously uploaded
# to the server, it will be marked for deletion on the server. Otherwise, it will be simply truncated from
# the CAO attachements array.
# the CAD attachements array.
# @param file {Object} the file to delete
##
$scope.deleteFile = (file) ->
@ -247,7 +247,7 @@ Application.Controllers.controller "newProjectController", ["$scope", "$state",
$scope.method = 'post'
## Button litteral text value
$scope.submitName = 'Enregistrer comme brouillon'
$scope.submitName = 'Save as a draft'
## Default project parameters
$scope.project =
@ -281,7 +281,7 @@ Application.Controllers.controller "editProjectController", ["$scope", "$state",
$scope.method = 'put'
## Button litteral text value
$scope.submitName = 'Enregistrer'
$scope.submitName = 'Save'
## Retrieve the project's details, if an error occured, redirect the user to the projects list page
$scope.project = Project.get {id: $stateParams.id}

View File

@ -7,8 +7,8 @@ Application.Services.factory 'dialogs', ["$modal", ($modal) ->
size: 'sm'
resolve:
object: ->
title: 'Titre de confirmation'
msg: 'Message de confiramtion'
title: 'As confirmation'
msg: 'Confirmation message'
controller: ['$scope', '$modalInstance', '$state', 'object', ($scope, $modalInstance, $state, object) ->
$scope.object = object
$scope.ok = ->

View File

@ -7,13 +7,13 @@
</div>
<div class="col-xs-10 col-sm-10 col-md-8 b-l b-r-md">
<section class="heading-title">
<h1>Les Stages et ateliers du Fab Lab</h1>
<h1>Fablab XinFab courses and workshops</h1>
</section>
</div>
<div class="col-xs-12 col-sm-12 col-md-3 b-t hide-b-md" ng-if="isAuthorized(['admin'])">
<section class="heading-actions wrapper">
<a class="btn btn-lg btn-warning bg-white b-2x rounded m-t-sm upper text-sm" ui-sref="app.admin.events_new" role="button">Ajouter un évènement</a>
<a class="btn btn-lg btn-warning bg-white b-2x rounded m-t-sm upper text-sm" ui-sref="app.admin.events_new" role="button">Add an event</a>
</section>
</div>
</div>
@ -24,16 +24,16 @@
<div class="col-md-6 m-b">
<select ng-model="selectedTimezone" class="form-control">
<option value="">Tous les évènements</option>
<option value="passed">Les évènements déjà passés</option>
<option value="future">Les évènements à venir</option>
<option value="">All events</option>
<option value="passed">The events already passed</option>
<option value="future">Upcoming events</option>
</select>
</div>
<table class="table">
<thead>
<tr>
<th style="width:30%">Titre</th>
<th style="width:30%">Title</th>
<th style="width:30%">Dates</th>
<th style="width:40%"></th>
</tr>
@ -44,19 +44,19 @@
<a ui-sref="app.public.events_show({id: event.id})">{{ event.title }} </a>
</td>
<td>
<span>Du {{event.start_date | amDateFormat:'DD/MM/YYYY'}}<span class="text-sm font-thin"> au </span>{{event.end_date | amDateFormat:'DD/MM/YYYY'}}</span>
<span>From {{event.start_date | amDateFormat:'DD/MM/YYYY'}}<span class="text-sm font-thin"> to </span>{{event.end_date | amDateFormat:'DD/MM/YYYY'}}</span>
<br/>
<span ng-if="event.all_day == 'true'">Toute la journée</span>
<span ng-if="event.all_day == 'true'">All day long</span>
<span ng-if="event.all_day == 'false'">
De {{event.start_date | date:'HH:mm'}}
<span class="text-sm font-thin"> à </span>
From {{event.start_date | date:'HH:mm'}}
<span class="text-sm font-thin"> to </span>
{{event.end_date | date:'HH:mm'}}
</span>
</td>
<td>
<div class="buttons">
<button class="btn btn-default" ui-sref="app.admin.events_edit({id: event.id})">
<i class="fa fa-edit"></i> Éditer
<i class="fa fa-edit"></i> Edit
</button>
<%#<button class="btn" ng-click="removeEvent(event)">
<i class="fa fa-trash-o"></i>
@ -71,7 +71,7 @@
<div class="row">
<div class="col-lg-12 text-center">
<a class="btn btn-warning" ng-click="loadMoreEvents()" ng-if="paginateActive">Charger les stages et ateliers suivants ...</a>
<a class="btn btn-warning" ng-click="loadMoreEvents()" ng-if="paginateActive">Load the following courses and workshops ...</a>
</div>
</div>
</section>

View File

@ -1,9 +1,9 @@
<div class="form-group" ng-class="{'has-error': userForm['user[group_id]'].$dirty && userForm['user[group_id]'].$invalid}">
<label for="user_group_id" class="col-sm-3 control-label">Type d'utilisateur</label>
<label for="user_group_id" class="col-sm-3 control-label">User Type</label>
<div class="col-sm-9">
<select ng-model="user.group_id" class="form-control" name="user[group_id]" id="user_group_id" ng-options="g.id as g.name for g in groups" required>
</select>
<input type="hidden" name="user[group_id]" ng-value="user.group_id" />
<span class="help-block" ng-show="userForm['user[group_id]'].$dirty && userForm['user[group_id]'].$error.required">Le type d'utilisateur est obligatoire</span>
<span class="help-block" ng-show="userForm['user[group_id]'].$dirty && userForm['user[group_id]'].$error.required">The user type is mandatory</span>
</div>
</div>

View File

@ -9,7 +9,7 @@
</div>
<div class="col-md-8 b-l b-r">
<section class="heading-title">
<h1>Utilisateur : {{ user.name }}</h1>
<h1>User : {{ user.name }}</h1>
</section>
</div>
@ -17,7 +17,7 @@
<div class="col-md-3">
<section class="heading-actions wrapper">
<div class="btn btn-lg btn-block btn-default m-t-xs" ng-click="cancel()">
Annuler
Cancel
</div>
</section>
@ -43,7 +43,7 @@
<div class="panel-footer no-padder">
<input type="submit" value="Valider les modifications" class="r-b btn-valid btn btn-warning btn-block p-lg btn-lg text-u-c" ng-disabled="userForm.$invalid"/>
<input type="submit" value="Confirm changes" class="r-b btn-valid btn btn-warning btn-block p-lg btn-lg text-u-c" ng-disabled="userForm.$invalid"/>
</div>
</section>
</form>

View File

@ -7,7 +7,7 @@
</div>
<div class="col-xs-10 col-sm-10 col-md-8 b-l">
<section class="heading-title">
<h1>Liste des membres</h1>
<h1>Members list</h1>
</section>
</div>
@ -20,15 +20,15 @@
<div class="form-group">
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-filter"></i></span>
<input type="text" ng-model="searchMember" class="form-control" placeholder="Recherchez un utilisateur">
<input type="text" ng-model="searchMember" class="form-control" placeholder="Seach members">
</div>
</div>
</div>
<div class="col-md-12">
<button type="button" class="btn btn-warning m-t m-b" ui-sref="app.admin.members_new">Ajouter un nouveau membre</button>
<button type="button" class="btn btn-warning m-t m-b" ui-sref="app.admin.members_new">Add a new member</button>
<div class="pull-right">
<a class="btn btn-default" ng-href="api/members/export_members.xls" target="_blank">
<i class="fa fa-file-excel-o"></i> Membres
<i class="fa fa-file-excel-o"></i> Members
</a>
</div>
@ -36,15 +36,15 @@
<table class="table">
<thead>
<tr>
<th style="width:15%"><a href="" ng-click="setOrderMember('last_name')">Nom <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-alpha-asc': orderMember=='last_name', 'fa fa-sort-alpha-desc': orderMember=='-last_name', 'fa fa-arrows-v': orderMember }"></i></a></th>
<th style="width:15%"><a href="" ng-click="setOrderMember('last_name')">Last name <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-alpha-asc': orderMember=='last_name', 'fa fa-sort-alpha-desc': orderMember=='-last_name', 'fa fa-arrows-v': orderMember }"></i></a></th>
<th style="width:15%"><a href="" ng-click="setOrderMember('first_name')">Prénom <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-alpha-asc': orderMember=='first_name', 'fa fa-sort-alpha-desc': orderMember=='-first_name', 'fa fa-arrows-v': orderMember }"></i></a></th>
<th style="width:15%"><a href="" ng-click="setOrderMember('first_name')">First name <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-alpha-asc': orderMember=='first_name', 'fa fa-sort-alpha-desc': orderMember=='-first_name', 'fa fa-arrows-v': orderMember }"></i></a></th>
<th style="width:15%"><a href="" ng-click="setOrderMember('email')">Email <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-alpha-asc': orderMember=='email', 'fa fa-sort-alpha-desc': orderMember=='-email', 'fa fa-arrows-v': orderMember }"></i></a></th>
<th style="width:10%"><a href="" ng-click="setOrderMember('profile.phone')">Tel. <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-numeric-asc': orderMember=='profile.phone', 'fa fa-sort-numeric-desc': orderMember=='-profile.phone', 'fa fa-arrows-v': orderMember }"></i></a></th>
<th style="width:10%"><a href="" ng-click="setOrderMember('profile.phone')">Phone <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-numeric-asc': orderMember=='profile.phone', 'fa fa-sort-numeric-desc': orderMember=='-profile.phone', 'fa fa-arrows-v': orderMember }"></i></a></th>
<th style="width:20%"><a href="" ng-click="setOrderMember('group.name')">Type utilisateur <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-alpha-asc': orderMember=='group.name', 'fa fa-sort-alpha-desc': orderMember=='-group.name', 'fa fa-arrows-v': orderMember }"></i></a></th>
<th style="width:20%"><a href="" ng-click="setOrderMember('group.name')">User type <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-alpha-asc': orderMember=='group.name', 'fa fa-sort-alpha-desc': orderMember=='-group.name', 'fa fa-arrows-v': orderMember }"></i></a></th>
<th style="width:10%"></th>
</tr>
@ -59,7 +59,7 @@
<td>
<div class="buttons">
<button class="btn btn-default" ui-sref="app.admin.members_edit({id: member.id})">
<i class="fa fa-edit"></i> Éditer
<i class="fa fa-edit"></i> Edit
</button>
</div>
</td>

View File

@ -9,7 +9,7 @@
</div>
<div class="col-md-8 b-l b-r">
<section class="heading-title">
<h1>Ajouter un membre</h1>
<h1>Add Member</h1>
</section>
</div>
@ -17,7 +17,7 @@
<div class="col-md-3">
<section class="heading-actions wrapper">
<div class="btn btn-lg btn-block btn-default m-t-xs" ng-click="cancel()">
Annuler
Cancel
</div>
</section>
@ -42,7 +42,7 @@
<div class="panel-footer no-padder">
<input type="submit" value="Enregistrer" class="r-b btn-valid btn btn-warning btn-block p-lg btn-lg text-u-c" ng-disabled="userForm.$invalid"/>
<input type="submit" value="Save" class="r-b btn-valid btn btn-warning btn-block p-lg btn-lg text-u-c" ng-disabled="userForm.$invalid"/>
</div>
</section>
</form>

View File

@ -7,7 +7,7 @@
</div>
<div class="col-xs-10 col-sm-10 col-md-8 b-l">
<section class="heading-title">
<h1>Gestion des éléments projets</h1>
<h1>Project elements management </h1>
</section>
</div>
@ -21,12 +21,12 @@
<div class="col-md-12">
<tabset justified="true">
<tab heading="Matériaux">
<button type="button" class="btn btn-warning m-b m-t" ng-click="addComponent()">Ajouter un matériau</button>
<button type="button" class="btn btn-warning m-b m-t" ng-click="addComponent()">Add a material</button>
<table class="table">
<thead>
<tr>
<th style="width:80%">Nom</th>
<th style="width:80%">Title</th>
<th style="width:20%"></th>
</tr>
</thead>
@ -49,7 +49,7 @@
</form>
<div class="buttons" ng-show="!rowform.$visible">
<button class="btn btn-default" ng-click="rowform.$show()">
<i class="fa fa-edit"></i> <span class="hidden-xs hidden-sm">Éditer</span>
<i class="fa fa-edit"></i> <span class="hidden-xs hidden-sm">Edit</span>
</button>
<button class="btn btn-danger" ng-click="removeComponent($index)">
<i class="fa fa-trash-o"></i>
@ -60,13 +60,13 @@
</tbody>
</table>
</tab>
<tab heading="Thématiques">
<button type="button" class="btn btn-warning m-t m-b" ng-click="addTheme()">Ajouter une nouvelle thématique</button>
<tab heading="Themes">
<button type="button" class="btn btn-warning m-t m-b" ng-click="addTheme()">Add a new themes</button>
<table class="table">
<thead>
<tr>
<th style="width:80%">Nom</th>
<th style="width:80%">Title</th>
<th style="width:20%"></th>
</tr>
</thead>
@ -89,7 +89,7 @@
</form>
<div class="buttons" ng-show="!rowform.$visible">
<button class="btn btn-default" ng-click="rowform.$show()">
<i class="fa fa-edit"></i> <span class="hidden-xs hidden-sm">Éditer</span>
<i class="fa fa-edit"></i> <span class="hidden-xs hidden-sm">Edit</span>
</button>
<button class="btn btn-danger" ng-click="removeTheme($index)">
<i class="fa fa-trash-o"></i>
@ -101,12 +101,12 @@
</table>
</tab>
<tab heading="Licences">
<button type="button" class="btn btn-warning m-t m-b" ng-click="addLicence()">Ajouter une nouvelle licence</button>
<button type="button" class="btn btn-warning m-t m-b" ng-click="addLicence()">Add a new license</button>
<table class="table">
<thead>
<tr>
<th style="width:30%">Nom</th>
<th style="width:30%">Title</th>
<th style="width:50%" class="hidden-xs">Description</th>
<th style="width:20%"></th>
</tr>
@ -135,7 +135,7 @@
</form>
<div class="buttons" ng-show="!rowform.$visible">
<button class="btn btn-default" ng-click="rowform.$show()">
<i class="fa fa-edit"></i> <span class="hidden-xs hidden-sm">Éditer</span>
<i class="fa fa-edit"></i> <span class="hidden-xs hidden-sm">Edit</span>
</button>
<button class="btn btn-danger" ng-click="removeLicence($index)">
<i class="fa fa-trash-o"></i>

View File

@ -8,10 +8,10 @@
</div>
<div class="col-xs-10 col-sm-10 col-md-10 b-l">
<section class="heading-title m-l">
<h4 class="m-l text-sm">Tableau de bord</h4>
<h4 class="m-l text-sm">Dashboard</h4>
<ul class="nav-page nav nav-pills text-u-c text-sm">
<li ui-sref-active="active"><a class="text-black" href="#" ui-sref="app.logged.dashboard_profile">Mon profil</a></li>
<li ui-sref-active="active"><a class="text-black" href="#" ui-sref="app.logged.dashboard_projects">Mes projets</a></li>
<li ui-sref-active="active"><a class="text-black" href="#" ui-sref="app.logged.dashboard_profile">My Profile</a></li>
<li ui-sref-active="active"><a class="text-black" href="#" ui-sref="app.logged.dashboard_projects">My projects</a></li>
</ul>
</section>
</div>

View File

@ -13,18 +13,18 @@
</span>
<div class="font-sbold m-t-sm">{{user.name}}</div>
<div>{{user.email}}</div>
<div class="text-xs" ng-if="user.last_sign_in_at"><i>Dernière activité le {{user.last_sign_in_at | amDateFormat: 'Do MMMM '}}</i></div>
<div class="text-xs" ng-if="user.last_sign_in_at"><i>Last Active {{user.last_sign_in_at | amDateFormat: 'Do MMMM '}}</i></div>
</div>
<div class="widget-content no-bg auto wrapper">
<div class="m-t">
<h3 class="text-u-c">Projets</h3>
<h3 class="text-u-c">Projects</h3>
<ul class="list-unstyled" ng-if="user.all_projects.length > 0">
<li ng-repeat="p in user.all_projects">
{{p.name}}
</li>
</ul>
<div ng-if="user.all_projects.length == 0">Aucun projet</div>
<div ng-if="user.all_projects.length == 0">No projects</div>
</div>
</div>
</div>
@ -34,7 +34,7 @@
<div class="col-sm-12 col-md-12 col-lg-9">
<div class="widget panel b-a m m-t-lg">
<div class="panel-heading b-b">
<h1 class="red text-u-c">Éditer votre profil</h1>
<h1 class="red text-u-c">Edit your profile</h1>
</div>
<form role="form" name="userForm" class="form-horizontal" novalidate action="{{ actionUrl }}" ng-upload="submited(content)" upload-options-enable-rails-csrf="true">
<div class="widget-content no-bg auto">
@ -45,7 +45,7 @@
</section>
</div>
<div class="panel-footer no-padder">
<input type="submit" value="Valider les modifications" class="r-b btn-valid btn btn-warning btn-block p-lg btn-lg text-u-c" ng-disabled="userForm.$invalid"/>
<input type="submit" value="Confirm changes" class="r-b btn-valid btn btn-warning btn-block p-lg btn-lg text-u-c" ng-disabled="userForm.$invalid"/>
</div>
</form>
</div>

View File

@ -9,12 +9,12 @@
<div class="row no-gutter">
<div class="wrapper" ng-if="user.all_projects.length == 0">Vous n'avez aucun projet.</div>
<div class="wrapper" ng-if="user.all_projects.length == 0">You have no projects.</div>
<div class="widget panel b-a m m-t-lg" ng-repeat="project in user.all_projects">
<div class="panel-heading b-b clearfix">
<h4 class="text-u-c font-sbold pull-left">{{project.name}}</h4> <span class="m-l-sm label label-success text-white">{{project.author_id == currentUser.id ? 'Auteur' : 'Collaborateur'}}</span>
<h4 class="text-u-c font-sbold pull-left">{{project.name}}</h4> <span class="m-l-sm label label-success text-white">{{project.author_id == currentUser.id ? 'Author' : 'Contributor'}}</span>
<div class="pull-right">
<a class="btn btn-warning bg-white b-2x rounded upper text-sm text-black" ui-sref="app.public.projects_show({id:project.slug})" role="button">Consulter</a>
<a class="btn btn-warning bg-white b-2x rounded upper text-sm text-black" ui-sref="app.public.projects_show({id:project.slug})" role="button">Consult</a>
</div>
</div>
<div class="widget-content bg-light clearfix">
@ -36,14 +36,14 @@
<div class="col-sm-12 col-md-4 col-lg-4">
<div class="widget panel b-a r-n m-t-md">
<div class="panel-heading b-b small">
<h3>Machines et matériaux</h3>
<h3>Machines and materials</h3>
</div>
<div class="widget-content no-bg wrapper">
<h3 class="text-black-light font-sbold"><i class="fa fa-rocket red"></i> Machines :</h3>
<ul class="list-unstyled m-l-md text-black-light">
<li ng-repeat="m in project.machines">{{m.name}}</li>
</ul>
<h3 class="text-black-light font-sbold"><i class="fa fa-cog red"></i> Matériaux :</h3>
<h3 class="text-black-light font-sbold"><i class="fa fa-cog red"></i> Materials :</h3>
<ul class="list-unstyled m-l-md text-black-light">
<li ng-repeat="c in project.components">{{c.name}}</li>
</ul>
@ -54,7 +54,7 @@
<div class="col-sm-12 col-md-4 col-lg-4">
<div class="widget panel b-a r-n m-t-md">
<div class="panel-heading b-b small">
<h3>Les collaborateurs</h3>
<h3>The collaborators</h3>
</div>
<div class="widget-content list-group-lg no-bg auto wrapper">
<li class="list-group-item no-b clearfix" ng-repeat="collaborator in project.project_users">

View File

@ -10,16 +10,16 @@
<input name="_method" type="hidden" ng-value="method">
<div class="form-group" ng-class="{'has-error': eventForm['event[title]'].$dirty && eventForm['event[title]'].$invalid}">
<label for="event_title" class="col-sm-3 control-label">Titre *</label>
<label for="event_title" class="col-sm-3 control-label">Title *</label>
<div class="col-sm-9">
<input ng-model="event.title" type="text" name="event[title]" class="form-control" id="event_title" placeholder="" required>
<span class="help-block" ng-show="eventForm['event[title]'].$dirty && eventForm['event[title]'].$error.required">Titre est obligatoire</span>
<span class="help-block" ng-show="eventForm['event[title]'].$dirty && eventForm['event[title]'].$error.required">Title is mandatory</span>
</div>
</div>
<div class="form-group">
<label for="event_image" class="col-sm-3 control-label">Visuel associé</label>
<label for="event_image" class="col-sm-3 control-label">Associate image</label>
<div class="col-sm-9">
<div class="fileinput" data-provides="fileinput" ng-class="fileinputClass(event.event_image)">
<div class="fileinput-new thumbnail" style="width: 334px; height: 250px;">
@ -29,7 +29,7 @@
<img ng-src="{{ event.event_image }}" alt="" />
</div>
<div>
<span class="btn btn-default btn-file"><span class="fileinput-new">Choisir une image <i class="fa fa-upload fa-fw"></i></span><span class="fileinput-exists">Modifier</span>
<span class="btn btn-default btn-file"><span class="fileinput-new">Choose Image <i class="fa fa-upload fa-fw"></i></span><span class="fileinput-exists">Edit</span>
<input type="file" name="event[event_image_attributes][attachment]"></span>
<a class="btn btn-danger fileinput-exists" data-dismiss="fileinput"><i class="fa fa-trash-o"></i></a>
</div>
@ -41,12 +41,12 @@
<label for="description" class="col-sm-3 control-label">Description *</label>
<div class="col-sm-9">
<textarea ng-model="event.description" rows="16" class="form-control" id="event_description" placeholder="" name="event[description]" required></textarea>
<span class="help-block" ng-show="eventForm['event[description]'].$dirty && eventForm['event[description]'].$error.required">Description est obligatoire</span>
<span class="help-block" ng-show="eventForm['event[description]'].$dirty && eventForm['event[description]'].$error.required">Description is mandatory</span>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Pièces jointes</label>
<label class="col-sm-3 control-label">Attached files</label>
<div class="col-sm-9">
<div ng-repeat="file in event.event_files_attributes" ng-show="!file._destroy">
<input type="hidden" name="event[event_files_attributes][][id]" ng-value="file.id" />
@ -56,13 +56,13 @@
<div class="form-control" data-trigger="fileinput">
<i class="glyphicon glyphicon-file fileinput-exists"></i> <span class="fileinput-filename">{{file.attachment}}</span>
</div>
<span class="input-group-addon btn btn-default btn-file"><span class="fileinput-new">Parcourir</span>
<span class="fileinput-exists">Modifier</span><input type="file" name="event[event_files_attributes][][attachment]"></span>
<span class="input-group-addon btn btn-default btn-file"><span class="fileinput-new">Browse</span>
<span class="fileinput-exists">Edit</span><input type="file" name="event[event_files_attributes][][attachment]"></span>
<a class="input-group-addon btn btn-danger fileinput-exists" data-dismiss="fileinput" ng-click="deleteFile(file)"><i class="fa fa-trash-o"></i></a>
</div>
</div>
<a class="btn btn-default" ng-click="addFile()" role="button">Ajouter un nouveau fichier <i class="fa fa-file-o fa-fw"></i></a>
<a class="btn btn-default" ng-click="addFile()" role="button">Add a new file <i class="fa fa-file-o fa-fw"></i></a>
</div>
</div>
@ -80,7 +80,7 @@
<div class="widget panel b-a m m-t-lg">
<div class="panel-heading b-b small">
<h3>Type d'évènement</h3>
<h3>Event type</h3>
</div>
<div class="widget-content no-bg wrapper">
<input type="hidden" name="event[category_ids][]" value="" />
@ -92,23 +92,23 @@
<div class="widget panel b-a m m-t-lg">
<div class="panel-heading b-b small">
<h3>Dates et horaires</h3>
<h3>Dates and times</h3>
</div>
<div class="widget-content no-bg wrapper">
<div class="m-b">
<label class="v-bottom">Toute la journée</label>
<label class="v-bottom">All day</label>
<div class="inline v-top">
<label class="checkbox-inline">
<input type="radio" name="event[all_day]" ng-model="event.all_day" value="true" required/> Oui
<input type="radio" name="event[all_day]" ng-model="event.all_day" value="true" required/> Yes
</label>
<label class="checkbox-inline">
<input type="radio" name="event[all_day]" ng-model="event.all_day" value="false"/> Non
<input type="radio" name="event[all_day]" ng-model="event.all_day" value="false"/> No
</label>
</div>
</div>
<input type="hidden" name="event[availability_id]" ng-value="event.availability_id" ng-if="event.availability_id">
<div class="m-b">
<label>Date de début</label>
<label>Start date</label>
<div class="input-group">
<input type="hidden" name="event[start_date]" ng-value="event.start_date">
<input type="text"
@ -125,7 +125,7 @@
</div>
</div>
<div class="m-b">
<label>Date de fin</label>
<label>End date</label>
<div class="input-group">
<input type="hidden" name="event[end_date]" ng-value="event.end_date">
<input type="text"
@ -143,14 +143,14 @@
</div>
<div class="m-b row" ng-if="event.all_day =='false'">
<div class="col-xs-6">
<label>Heure de début</label>
<label>Start time</label>
<div>
<input type="hidden" name="event[start_time]" ng-value="event.start_time">
<timepicker ng-model="event.start_time" hour-step="1" minute-step="1" show-meridian="ismeridian"></timepicker>
</div>
</div>
<div class="col-xs-6">
<label>Heure de fin</label>
<label>End Time</label>
<div>
<input type="hidden" name="event[end_time]" ng-value="event.end_time">
<timepicker ng-model="event.end_time" hour-step="1" minute-step="1" show-meridian="ismeridian"></timepicker>
@ -159,12 +159,12 @@
</div>
<div ng-if="method == 'post'" class="m-b">
<label>Récurrence</label>
<label>Recurrence</label>
<select ng-model="event.recurrence" class="form-control" name="event[recurrence]">
<option value="{{t.value}}" ng-repeat="t in recurrenceTypes">{{t.label}}</option>
</select>
<div ng-if="event.recurrence != 'none'">
et se terminera le
and ends
<div class="input-group">
<input type="hidden" name="event[recurrence_end_at]" ng-value="event.recurrence_end_at">
<input type="text" class="form-control" datepicker-popup="dd/MM/yyyy" ng-model="event.recurrence_end_at" is-open="datePicker.recurrenceEndOpened" ng-required="true"/>
@ -179,21 +179,21 @@
<div class="widget panel b-a m m-t-lg">
<div class="panel-heading b-b small">
<h3>Tarifs et disponibilités</h3>
<h3>Prices and availability</h3>
</div>
<div class="widget-content no-bg wrapper">
<div class="form-group">
<label for="event_amount" class="col-sm-5 control-label">Tarif standard</label>
<label for="event_amount" class="col-sm-5 control-label">Standard Rate</label>
<div class="col-sm-5">
<div class="input-group">
<input ng-model="event.amount" type="number" name="event[amount]" class="form-control" id="event_amount" required>
<div class="input-group-addon">€</div>
</div>
<span class="help-block">0 = gratuit</span>
<span class="help-block">0 = free</span>
</div>
</div>
<div class="form-group">
<label for="event_reduced_amount" class="col-sm-5 control-label">Tarif réduit</label>
<label for="event_reduced_amount" class="col-sm-5 control-label">Reduced price</label>
<div class="col-sm-5">
<div class="input-group">
<input ng-model="event.reduced_amount" type="number" name="event[reduced_amount]" class="form-control" id="event_reduced_amount">
@ -202,7 +202,7 @@
</div>
</div>
<div class="form-group">
<label for="event_nb_total_places" class="col-sm-5 control-label">Places disponibles</label>
<label for="event_nb_total_places" class="col-sm-5 control-label">Available seats</label>
<div class="col-sm-6">
<div class="input-group">
<input ng-model="event.nb_total_places" type="number" name="event[nb_total_places]" class="form-control" id="event_nb_total_places">

View File

@ -9,7 +9,7 @@
</div>
<div class="col-xs-10 col-sm-10 col-md-8 b-l ">
<section class="heading-title">
<h1>Editer l'évènement</h1>
<h1>Edit event</h1>
</section>
</div>
</div>

View File

@ -7,13 +7,13 @@
</div>
<div class="col-xs-10 col-sm-10 col-md-8 b-l b-r-md">
<section class="heading-title">
<h1>Les Stages et ateliers du Fab Lab</h1>
<h1>Fablab XinFab courses and workshops</h1>
</section>
</div>
<div class="col-xs-12 col-sm-12 col-md-3 b-t hide-b-md" ng-if="isAuthorized(['admin'])">
<section class="heading-actions wrapper">
<a class="btn btn-lg btn-warning bg-white b-2x rounded m-t-sm upper text-sm" ui-sref="app.admin.events_new" role="button">Ajouter un évènement</a>
<a class="btn btn-lg btn-warning bg-white b-2x rounded m-t-sm upper text-sm" ui-sref="app.admin.events_new" role="button">Add an event</a>
</section>
</div>
</div>
@ -34,7 +34,7 @@
<h4 class="m-n text-sm clear l-n">{{event.title}}</h4>
<h3 class="m-n">{{event.start_date | amDateFormat:'DD/MM'}}<span class="text-sm font-thin"> au </span>{{event.end_date | amDateFormat:'DD/MM'}}</h3>
<h6 class="m-n" ng-if="event.amount">Plein tarif: {{event.amount}}€ <span ng-if="event.reduced_amount > 0">/ Tarif réduit: {{event.reduced_amount}}€</span></h6>
<h6 class="m-n" ng-if="event.amount">Full price: {{event.amount}}€ <span ng-if="event.reduced_amount > 0">/ Tarif réduit: {{event.reduced_amount}}€</span></h6>
</div>
<!-- Event Image -->
<div class="pull-right crop-130">
@ -51,7 +51,7 @@
<div class="row">
<div class="col-lg-12 text-center m-t-md">
<a class="btn btn-warning" ng-click="loadMoreEvents()" ng-if="paginateActive">Charger les stages et ateliers suivants ...</a>
<a class="btn btn-warning" ng-click="loadMoreEvents()" ng-if="paginateActive">Load the following courses and workshops ...</a>
</div>
</div>

View File

@ -9,7 +9,7 @@
</div>
<div class="col-xs-10 col-sm-10 col-md-8 b-l ">
<section class="heading-title">
<h1>Ajouter un évènement</h1>
<h1>Add an event</h1>
</section>
</div>
</div>

View File

@ -17,7 +17,7 @@
<div class="col-xs-12 col-sm-12 col-md-3 b-t hide-b-md" ng-if="isAuthorized('admin')">
<section class="heading-actions wrapper">
<a ui-sref="app.admin.events_edit({id: event.id})" ng-if="isAuthorized('admin')" class="btn btn-lg btn-warning bg-white b-2x rounded m-t-xs text-u-c text-sm"><i class="fa fa-edit"></i> éditer</a>
<a ui-sref="app.admin.events_edit({id: event.id})" ng-if="isAuthorized('admin')" class="btn btn-lg btn-warning bg-white b-2x rounded m-t-xs text-u-c text-sm"><i class="fa fa-edit"></i> edit</a>
<a ng-click="deleteEvent(event)" ng-if="isAuthorized('admin')" class="btn btn-lg btn-danger b-2x rounded no-b m-t-xs"><i class="fa fa-trash-o"></i></a>
</section>
@ -35,7 +35,7 @@
<img ng-src="{{event.event_image}}" alt="{{event.title}}" class="img-responsive">
</div>
<h3>Description de l'évènement</h3>
<h3>Event description</h3>
<p ng-bind-html="event.description | breakFilter"></p>
</div>
@ -46,7 +46,7 @@
<section class="widget panel b-a m" ng-if="event.event_files_attributes">
<div class="panel-heading b-b">
<span class="badge bg-warning pull-right">{{event.event_files_attributes.length}}</span>
<h3>Documents à télécharger</h3>
<h3>Download documents</h3>
</div>
<ul class="widget-content list-group list-group-lg no-bg auto">
@ -58,7 +58,7 @@
<section class="widget panel b-a m m-t-lg">
<div class="panel-heading b-b small">
<h3>Informations</h3>
<h3>Information</h3>
</div>
<div class="panel-content wrapper">
@ -66,22 +66,22 @@
<h5>{{event.categories[0].name}}</h5>
<dl class="text-sm">
<dt><i class="fa fa-calendar"></i> Dates :</dt>
<dd>Début: <span class="text-u-l">{{event.start_date | amDateFormat:'DD/MM/YYYY'}}</span><br>Fin: <span class="text-u-l">{{event.end_date | amDateFormat:'DD/MM/YYYY'}}</span></dd>
<dt><i class="fa fa-clock-o"></i> Horaires :</dt>
<dd>Start: <span class="text-u-l">{{event.start_date | amDateFormat:'DD/MM/YYYY'}}</span><br>Ends: <span class="text-u-l">{{event.end_date | amDateFormat:'DD/MM/YYYY'}}</span></dd>
<dt><i class="fa fa-clock-o"></i> Hours :</dt>
<dd ng-if="event.all_day == 'true'"><span>Toute la journée</span></dd>
<dd ng-if="event.all_day == 'false'">De <span class="text-u-l">{{event.start_date | amDateFormat:'HH:mm'}}</span> à <span class="text-u-l">{{event.end_date | amDateFormat:'HH:mm'}}</span></dd>
<dd ng-if="event.all_day == 'false'">From <span class="text-u-l">{{event.start_date | amDateFormat:'HH:mm'}}</span> to <span class="text-u-l">{{event.end_date | amDateFormat:'HH:mm'}}</span></dd>
</dl>
<div class="text-sm" ng-if="event.amount">
<div>Plein tarif : <span>{{ event.amount }} €</span></div>
<div ng-if="event.reduced_amount > 0">Tarif réduit* : {{ event.reduced_amount }} €</div>
<div>Full price : <span>{{ event.amount }} €</span></div>
<div ng-if="event.reduced_amount > 0">Reduced price* : {{ event.reduced_amount }} €</div>
</div>
<div class="text-sm m-b" ng-if="event.nb_total_places">
<div>Places disponibles: <span class="font-sbold">{{event.nb_total_places}}</span></div>
<div>Available seats: <span class="font-sbold">{{event.nb_total_places}}</span></div>
</div>
<div class="text-sm m-b" ng-if="!event.nb_total_places">
<div><span class="badge font-sbold">Entrée libre</span></div>
<div><span class="badge font-sbold">Free admission</span></div>
</div>
</div>
@ -89,7 +89,7 @@
</section>
<div ng-if="event.reduced_amount" class="alert alert-warning text-sm m" role="alert">
* Tarif réduit si vous avez moins de 25 ans, que vous êtes étudiant ou demandeur d'emploi.
* Reduced price if you are under 25, a student or unemployed.
</div>
</div>

View File

@ -2,7 +2,7 @@
<div class="row wrapper">
<div class="col-lg-8">
<h4 class="text-sm m-t-sm">Les derniers projets documentés</h4>
<h4 class="text-sm m-t-sm">The last documented projects</h4>
<carousel interval="5000" disable-animation="true">
<slide class="h480 cover r" ng-repeat="p in last_projects" active="p.active" style="background-image:url({{p.project_image}});">
@ -19,14 +19,14 @@
<section class="widget panel b-a m-t-sm" ng-if="last_tweets">
<div class="panel-heading b-b small">
<div class="pull-right text-xs align">
<a href="https://twitter.com/<%= ENV['TWITTER_NAME'] %>" target="_blank">Suivez-nous
<a href="https://twitter.com/<%= ENV['TWITTER_NAME'] %>" target="_blank">Follow us
<span class="fa-stack fa-lg">
<i class="fa fa-circle fa-stack-2x text-yellow"></i>
<i class="fa fa-twitter fa-stack-1x fa-inverse text-white"></i>
</span>
</a>
</div>
<h2>Les derniers tweets</h2>
<h2>The last tweets</h2>
</div>
<ul class="widget-content list-group list-group-lg no-bg auto">
@ -38,7 +38,8 @@
<section class="widget panel b-a" >
<div class="panel-heading small b-b">
<h2>Derniers membres inscrits</h2>
<h2>Latest Members
</h2>
</div>
<div class="row m-n">
@ -55,11 +56,11 @@
</div>
<div class="m-t-sm m-b-sm text-center" ng-if="!isAuthenticated()">
<button href="#" ng-click="signup($event)" class="btn btn-warning-full width-70 font-sbold rounded text-sm">Créer un compte</button>
<button href="#" ng-click="signup($event)" class="btn btn-warning-full width-70 font-sbold rounded text-sm">Create an account</button>
</div>
<div class="m-t-sm m-b-sm text-center" ng-if="isAuthenticated()">
<button href="#" ui-sref="app.logged.members" class="btn btn-warning-full width-70 font-sbold rounded text-sm">Découvrir les membres</button>
<button href="#" ui-sref="app.logged.members" class="btn btn-warning-full width-70 font-sbold rounded text-sm">Discover members</button>
</div>
</section>
@ -67,7 +68,7 @@
</div>
<section class="col-lg-12 wrapper">
<h4 class="text-sm m-t-sm">Les prochains ateliers et stages du fablab <a ui-sref="app.public.events_list" class="pull-right"><i class="fa fa-tags"></i> Tous les événements</a></h4>
<h4 class="text-sm m-t-sm">The next fablab workshops and courses <a ui-sref="app.public.events_list" class="pull-right"><i class="fa fa-tags"></i> All events</a></h4>
<div class="row" ng-repeat="event in (upcoming_events.length/3 | array)">
@ -93,25 +94,25 @@
<div class="row">
<div class="col-sm-6 row m-b-sm">
<i class="fa fa-calendar red col-xs-3 padder-icon"></i>
<h6 class="m-n col-xs-9 ">Du {{event.start_date | amDateFormat:'DD/MM'}}<span class="text-sm font-thin"> au </span>{{event.end_date | amDateFormat:'DD/MM'}}</h6>
<h6 class="m-n col-xs-9 ">From {{event.start_date | amDateFormat:'DD/MM'}}<span class="text-sm font-thin"> to </span>{{event.end_date | amDateFormat:'DD/MM'}}</h6>
</div>
<div class="col-sm-6 row m-b-sm">
<i class="fa fa-clock-o red col-xs-3 padder-icon"></i>
<h6 class="m-n col-xs-9"><span ng-if="event.all_day == 'true'">Toute la journée</span><span ng-if="event.all_day == 'false'">De {{event.start_date | date:'HH:mm'}}<span class="text-sm font-thin"> à </span>{{event.end_date | date:'HH:mm'}}</span></h6>
<h6 class="m-n col-xs-9"><span ng-if="event.all_day == 'true'">All day long</span><span ng-if="event.all_day == 'false'">De {{event.start_date | date:'HH:mm'}}<span class="text-sm font-thin"> à </span>{{event.end_date | date:'HH:mm'}}</span></h6>
</div>
<div class="col-sm-12 row m-b">
<i class="fa fa-bookmark red col-xs-1 padder-icon"></i>
<h6 class="m-n col-xs-10">
<span ng-if="!event.nb_total_places">Entrée Libre</span>
<span ng-if="event.nb_total_places && event.amount == 0">Entrée Gratuite</span><span ng-if="event.amount > 0">{{event.amount}} € Plein tarif</span><span ng-if="event.reduced_amount > 0"><br/>{{event.reduced_amount}} € Tarif réduit</span>
<div ng-if="event.nb_free_places == 0"><span class="badge font-sbold bg-red">Événement complet.</span></div>
<span ng-if="!event.nb_total_places">Free entry</span>
<span ng-if="event.nb_total_places && event.amount == 0">Free admission</span><span ng-if="event.amount > 0">{{event.amount}} ¥ Full price</span><span ng-if="event.reduced_amount > 0"><br/>{{event.reduced_amount}} ¥ Reduced price</span>
<div ng-if="event.nb_free_places == 0"><span class="badge font-sbold bg-red">Event full.</span></div>
</h6>
</div>
</div>
<div class="text-center clearfix ">
<div class="btn btn-lg btn-warning bg-white b-2x rounded m-t-sm m-b-sm upper text-sm width-70" ui-sref="app.public.events_show({id: event.id})" ><span>Consulter</span></div>
<div class="btn btn-lg btn-warning bg-white b-2x rounded m-t-sm m-b-sm upper text-sm width-70" ui-sref="app.public.events_show({id: event.id})" ><span>Check</span></div>
</div>
</div>
</div>

View File

@ -8,15 +8,15 @@
<alert ng-repeat="alert in alerts" type="{{alert.type}}" close="closeAlert($index)">{{alert.msg}}</alert>
<div class="form-group m-b-lg" ng-class="{'has-error': machineForm['machine[name]'].$dirty && machineForm['machine[name]'].$invalid}">
<label for="name" class="col-sm-2 control-label">Nom *</label>
<label for="name" class="col-sm-2 control-label">Name *</label>
<div class="col-sm-4">
<input ng-model="machine.name" type="text" name="machine[name]" class="form-control" id="machine_name" placeholder="Nom :" required>
<span class="help-block" ng-show="machineForm['machine[name]'].$dirty && machineForm['machine[name]'].$error.required">Le Nom est obligatoire.</span>
<input ng-model="machine.name" type="text" name="machine[name]" class="form-control" id="machine_name" placeholder="Name :" required>
<span class="help-block" ng-show="machineForm['machine[name]'].$dirty && machineForm['machine[name]'].$error.required">The name is mandatory.</span>
</div>
</div>
<div class="form-group m-b-lg">
<label for="machine_image" class="col-sm-2 control-label">Visuel *</label>
<label for="machine_image" class="col-sm-2 control-label">Image *</label>
<div class="col-sm-10">
<div class="fileinput" data-provides="fileinput" ng-class="fileinputClass(machine.machine_image)">
<div class="fileinput-new thumbnail" style="width: 334px; height: 250px;">
@ -26,9 +26,9 @@
<img ng-src="{{ machine.machine_image }}" alt="" />
</div>
<div>
<span class="btn btn-default btn-file"><span class="fileinput-new">Ajouter un visuel <i class="fa fa-upload fa-fw"></i></span><span class="fileinput-exists">Modifier</span>
<span class="btn btn-default btn-file"><span class="fileinput-new">Add image <i class="fa fa-upload fa-fw"></i></span><span class="fileinput-exists">Edit</span>
<input type="file" name="machine[machine_image_attributes][attachment]" ng-model="machine.machine_image" required bs-jasny-fileinput></span>
<a class="btn btn-danger fileinput-exists" data-dismiss="fileinput">Supprimer</a>
<a class="btn btn-danger fileinput-exists" data-dismiss="fileinput">Remove</a>
</div>
</div>
</div>
@ -39,20 +39,20 @@
<label for="description" class="col-sm-2 control-label">Description *</label>
<div class="col-sm-10">
<textarea ng-model="machine.description" class="form-control" rows="12" id="machine_description" placeholder="" name="machine[description]" required></textarea>
<span class="help-block" ng-show="machineForm['machine[description]'].$dirty && machineForm['machine[description]'].$error.required">La Description est obligatoire.</span>
<span class="help-block" ng-show="machineForm['machine[description]'].$dirty && machineForm['machine[description]'].$error.required">The description is mandatory.</span>
</div>
</div>
<div class="form-group m-b-xl" ng-class="{'has-error': machineForm['machine[spec]'].$dirty && machineForm['machine[spec]'].$invalid}">
<label for="spec" class="col-sm-2 control-label">Caractéristiques techniques *</label>
<label for="spec" class="col-sm-2 control-label">Technical Specifications *</label>
<div class="col-sm-10">
<textarea ng-model="machine.spec" class="form-control" rows="12" id="machine_spec" placeholder="" name="machine[spec]" required></textarea>
<span class="help-block" ng-show="machineForm['machine[spec]'].$dirty && machineForm['machine[spec]'].$error.required">Les Caractéristiques techniques sont obligatoires.</span>
<span class="help-block" ng-show="machineForm['machine[spec]'].$dirty && machineForm['machine[spec]'].$error.required">Les Technical specifications are mandatory.</span>
</div>
</div>
<div class="form-group m-b-xl">
<label class="col-sm-2 control-label">Pièces jointes</label>
<label class="col-sm-2 control-label">Attached files</label>
<div class="col-sm-10">
<div ng-repeat="file in machine.machine_files_attributes" ng-show="!file._destroy">
<input type="hidden" ng-model="file.id" name="machine[machine_files_attributes][][id]" ng-value="file.id" />
@ -62,13 +62,13 @@
<div class="form-control" data-trigger="fileinput">
<i class="glyphicon glyphicon-file fileinput-exists"></i> <span class="fileinput-filename">{{file.attachment}}</span>
</div>
<span class="input-group-addon btn btn-default btn-file"><span class="fileinput-new">Joindre un fichier</span>
<span class="fileinput-exists">Modifier</span><input type="file" name="machine[machine_files_attributes][][attachment]"></span>
<span class="input-group-addon btn btn-default btn-file"><span class="fileinput-new">Attach a file</span>
<span class="fileinput-exists">Modify</span><input type="file" name="machine[machine_files_attributes][][attachment]"></span>
<a class="input-group-addon btn btn-danger fileinput-exists" data-dismiss="fileinput" ng-click="deleteFile(file)"><i class="fa fa-trash-o"></i></a>
</div>
</div>
<a class="btn btn-default" ng-click="addFile()" role="button">Ajouter une pièce jointe <i class="fa fa-file-o fa-fw"></i></a>
<a class="btn btn-default" ng-click="addFile()" role="button">Add attachment <i class="fa fa-file-o fa-fw"></i></a>
</div>
</div>

View File

@ -7,13 +7,13 @@
</div>
<div class="col-xs-10 col-sm-10 col-md-8 b-l b-r-md">
<section class="heading-title">
<h1>Les machines du FabLab</h1>
<h1>FabLab XinFab's Machines</h1>
</section>
</div>
<div class="col-xs-12 col-sm-12 col-md-3 b-t hide-b-md" ng-if="isAuthorized('admin')">
<section class="heading-actions wrapper">
<a class="btn btn-lg btn-warning bg-white b-2x rounded m-t-xs" ui-sref="app.admin.machines_new" role="button">Ajouter une machine</a>
<a class="btn btn-lg btn-warning bg-white b-2x rounded m-t-xs" ui-sref="app.admin.machines_new" role="button">Add a machine</a>
</section>
</div>
</div>
@ -42,7 +42,7 @@
<div class="text-center clearfix">
<div class="col-sm-12 no-padder">
<div class="btn btn-default btn-block padder-v no-b red" ng-click="showMachine(machine)">
<i class="fa fa-eye"></i> Consulter
<i class="fa fa-eye"></i> Check
</div>
</div>
</div>

View File

@ -16,7 +16,7 @@
<div class="col-xs-12 col-sm-12 col-md-4 b-t hide-b-md">
<section class="heading-actions wrapper">
<a ui-sref="app.admin.machines_edit({id: machine.id})" ng-if="isAuthorized('admin')" class="btn btn-lg btn-warning bg-white b-2x rounded m-t-xs"><i class="fa fa-edit"></i> Éditer</a>
<a ui-sref="app.admin.machines_edit({id: machine.id})" ng-if="isAuthorized('admin')" class="btn btn-lg btn-warning bg-white b-2x rounded m-t-xs"><i class="fa fa-edit"></i> Edit</a>
<a ng-click="delete(machine)" ng-if="isAuthorized('admin')" class="btn btn-lg btn-danger b-2x rounded no-b m-t-xs"><i class="fa fa-trash-o"></i></a>
</section>
@ -44,7 +44,7 @@
<div class="widget panel b-a m m-t-lg">
<div class="panel-heading b-b small">
<h3>Caractéristiques techniques</h3>
<h3>Technical specifications</h3>
</div>
<div class="widget-content no-bg wrapper">
<h3></h3>
@ -55,7 +55,7 @@
<section class="widget panel b-a m" ng-if="machine.machine_files_attributes">
<div class="panel-heading b-b">
<span class="badge bg-warning pull-right">{{machine.machine_files_attributes.length}}</span>
<h3>Fichiers à télécharger</h3>
<h3>Download Files</h3>
</div>
<ul class="widget-content list-group list-group-lg no-bg auto">
@ -67,7 +67,7 @@
<section class="widget panel b-a m" ng-if="machine.machine_projects">
<div class="panel-heading b-b">
<h3>Projets utilisant la machine</h3>
<h3>Projects using the machine</h3>
</div>
<ul class="widget-content list-group list-group-lg no-bg auto">

View File

@ -7,7 +7,7 @@
</div>
<div class="col-xs-10 col-sm-10 col-md-8 b-l">
<section class="heading-title">
<h1>Les membres du Fab Lab</h1>
<h1>Members of Fablab XinFab</h1>
</section>
</div>
@ -17,14 +17,14 @@
<section class="m-lg">
<div class="row">
<div class="col-md-12">
<!-- <button type="button" class="btn btn-warning m-t m-b" ui-sref="app.admin.members_new">Ajouter un nouveau membre</button> -->
<!-- <button type="button" class="btn btn-warning m-t m-b" ui-sref="app.admin.members_new">Add a new member</button> -->
<table class="table">
<thead>
<tr>
<th style="width:15%">Avatar</th>
<th style="width:15%">Utilisateur</th>
<th style="width:15%">Pseudo</th>
<th style="width:15%">User</th>
<th style="width:15%">Nickname</th>
<th style="width:15%">Email</th>
<th style="width:10%"></th>
</tr>
@ -42,7 +42,7 @@
<td>
<div class="buttons">
<button class="btn btn-default" ui-sref="app.logged.members_show({id: member.slug})">
<i class="fa fa-eye"></i> Consulter
<i class="fa fa-eye"></i> View
</button>
</div>
</td>

View File

@ -15,7 +15,7 @@
<div class="col-xs-12 col-sm-12 col-md-3 b-t hide-b-md">
<section class="heading-actions wrapper">
<a ui-sref="app.logged.members" class="btn btn-lg btn-warning bg-white b-2x rounded m-t-xs">Liste des membres</a>
<a ui-sref="app.logged.members" class="btn btn-lg btn-warning bg-white b-2x rounded m-t-xs">Member List</a>
</section>
</div>
@ -47,7 +47,7 @@
<div class="wrapper m-t-xl m-b">
<div class="row m-b">
<div class="col-xs-6 text-right">
<small>Dernière activité</small>
<small>Last Active</small>
<div class="text-lt font-bold" ng-if="user.last_sign_in_at">le {{user.last_sign_in_at | amDateFormat: 'Do MMMM '}}</div>
</div>
<div class="col-xs-6">
@ -57,11 +57,11 @@
</div>
<div class="row">
<div class="col-xs-6 text-right">
<small>Logiciels de conception maîtrisés</small>
<small>Skills</small>
<div class="text-lt font-bold">{{user.profile.software_mastered}}</div>
</div>
<div class="col-xs-6">
<small>Centres d'intérêts</small>
<small>Interests</small>
<div class="text-lt font-bold">{{user.profile.interest}}</div>
</div>
</div>
@ -76,14 +76,14 @@
<div class="widget panel b-a m ">
<div class="panel-heading b-b">
<h1 class="red text-u-c">Projets</h1>
<h1 class="red text-u-c">Projects</h1>
<ul class="list-unstyled" ng-if="user.all_projects.length > 0">
<li ng-repeat="p in user.all_projects" class="m-t-sm">
<a class="text-u-c" ui-sref="app.public.projects_show({id:p.slug})" role="button">{{p.name}} <span class="m-l-sm label label-success text-white">{{p.author_id == currentUser.id ? 'Auteur' : 'Collaborateur'}}</span></a>
<a class="text-u-c" ui-sref="app.public.projects_show({id:p.slug})" role="button">{{p.name}} <span class="m-l-sm label label-success text-white">{{p.author_id == currentUser.id ? 'Author' : 'Contributor'}}</span></a>
</li>
</ul>
<div ng-if="user.all_projects.length == 0">Aucun projet</div>
<div ng-if="user.all_projects.length == 0">No project</div>
</div>
</div>

View File

@ -7,7 +7,7 @@
</div>
<div class="col-xs-10 col-sm-10 col-md-8 b-l">
<section class="heading-title">
<h1>Centre de notifications</h1>
<h1>Alert Center</h1>
</section>
</div>
@ -19,14 +19,14 @@
<div class="row">
<div class="col-md-12">
<button type="button" class="btn btn-warning m-t-sm m-b" ng-click="markAllAsRead()" ng-disabled="notifications.length == 0">Tout marquer comme lu ({{notifications.length}})</button>
<button type="button" class="btn btn-warning m-t-sm m-b" ng-click="markAllAsRead()" ng-disabled="notifications.length == 0">Mark all as read ({{notifications.length}})</button>
<table class="table">
<thead>
<tr>
<th style="width:10%"></th>
<th style="width:20%">Date</th>
<th style="width:70%">Intitulée</th>
<th style="width:70%">Entitled</th>
</tr>
</thead>
@ -42,7 +42,7 @@
</tr>
<tr ng-if="notifications.length == 0">
<td colspan="3">Aucune nouvelle notification.</td>
<td colspan="3">No new notification.</td>
</tr>
</tbody>
</table>
@ -72,14 +72,14 @@
<tr ng-if="notificationsRead.length == 0">
<td colspan="3">Aucune notification archivée.</td>
<td colspan="3">No archived notification.</td>
</tr>
</tbody>
</table>
<a class="btn btn-default" ng-click="addMoreNotificationsReaded()" ng-if="paginateActive">Charger les notifications suivantes...</a>
<a class="btn btn-default" ng-click="addMoreNotificationsReaded()" ng-if="paginateActive">Load the following notifications...</a>
</div>

View File

@ -10,16 +10,16 @@
<input name="_method" type="hidden" ng-value="method">
<div class="form-group" ng-class="{'has-error': projectForm['project[name]'].$dirty && projectForm['project[name]'].$invalid}">
<label for="name" class="col-sm-2 control-label">Nom *</label>
<label for="name" class="col-sm-2 control-label">Title *</label>
<div class="col-sm-8">
<input ng-model="project.name" type="text" name="project[name]" class="form-control" id="project_name" placeholder="" required>
<span class="help-block" ng-show="projectForm['project[name]'].$dirty && projectForm['project[name]'].$error.required">Nom est obligatoire</span>
<span class="help-block" ng-show="projectForm['project[name]'].$dirty && projectForm['project[name]'].$error.required">Title is mandatory</span>
</div>
</div>
<div class="form-group">
<label for="project_image" class="col-sm-2 control-label">Illustration</label>
<label for="project_image" class="col-sm-2 control-label">Image</label>
<div class="col-sm-10">
<div class="fileinput" data-provides="fileinput" ng-class="fileinputClass(project.project_image)">
<div class="fileinput-new thumbnail" style="width: 334px; height: 250px;">
@ -29,9 +29,9 @@
<img ng-src="{{ project.project_image }}" alt="" />
</div>
<div>
<span class="btn btn-default btn-file"><span class="fileinput-new">Ajouter un visuel <i class="fa fa-upload fa-fw"></i></span><span class="fileinput-exists">Modifier</span>
<span class="btn btn-default btn-file"><span class="fileinput-new">Add image <i class="fa fa-upload fa-fw"></i></span><span class="fileinput-exists">Edit</span>
<input type="file" name="project[project_image_attributes][attachment]"></span>
<a class="btn btn-danger fileinput-exists" data-dismiss="fileinput">Supprimer</a>
<a class="btn btn-danger fileinput-exists" data-dismiss="fileinput">Remove</a>
</div>
</div>
</div>
@ -39,7 +39,7 @@
<div class="form-group">
<label class="col-sm-2 control-label">Fichier CAO</label>
<label class="col-sm-2 control-label">CAD file</label>
<div class="col-sm-10">
<div ng-repeat="file in project.project_caos_attributes" ng-show="!file._destroy">
<input type="hidden" name="project[project_caos_attributes][][id]" ng-value="file.id" />
@ -49,13 +49,13 @@
<div class="form-control" data-trigger="fileinput">
<i class="glyphicon glyphicon-file fileinput-exists"></i> <span class="fileinput-filename">{{file.attachment}}</span>
</div>
<span class="input-group-addon btn btn-default btn-file"><span class="fileinput-new">Parcourir</span>
<span class="fileinput-exists">Modifier</span><input type="file" name="project[project_caos_attributes][][attachment]"></span>
<span class="input-group-addon btn btn-default btn-file"><span class="fileinput-new">Browse</span>
<span class="fileinput-exists">Edit</span><input type="file" name="project[project_caos_attributes][][attachment]"></span>
<a class="input-group-addon btn btn-danger fileinput-exists" data-dismiss="fileinput" ng-click="deleteFile(file)"><i class="fa fa-trash-o"></i></a>
</div>
</div>
<a class="btn btn-default" ng-click="addFile()" role="button">Ajouter un nouveau fichier <i class="fa fa-file-o fa-fw"></i></a>
<a class="btn btn-default" ng-click="addFile()" role="button">Add a new file <i class="fa fa-file-o fa-fw"></i></a>
</div>
</div>
@ -64,38 +64,38 @@
<div class="col-sm-10">
<input type="hidden" name="project[description]" ng-value="project.description" />
<summernote ng-model="project.description" id="project_description" placeholder="" config="summernoteOpts" name="project[description]" required></summernote>
<span class="help-block" ng-show="projectForm['project[description]'].$dirty && projectForm['project[description]'].$error.required">Description est obligatoire</span>
<span class="help-block" ng-show="projectForm['project[description]'].$dirty && projectForm['project[description]'].$error.required">Description is mandatory</span>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Étapes</label>
<label class="col-sm-2 control-label">Steps</label>
<div class="col-sm-10">
<div ng-repeat="step in project.project_steps_attributes" ng-show="!step._destroy">
<div class="m-t-xs m-b-lg">
<span class="label label-warning m-t m-b">Étape {{ $index+1 }}/{{project.project_steps_attributes.length}}</span>
<span class="label label-warning m-t m-b">Step {{ $index+1 }}/{{project.project_steps_attributes.length}}</span>
<input type="hidden" name="project[project_steps_attributes][][id]" ng-value="step.id" />
<input type="hidden" name="project[project_steps_attributes][][_destroy]" ng-value="step._destroy" />
<input ng-model="step.title" type="text" name="project[project_steps_attributes][][title]" class="form-control m-b-sm m-t-xs" placeholder="Titre de l'étape" required>
<input ng-model="step.title" type="text" name="project[project_steps_attributes][][title]" class="form-control m-b-sm m-t-xs" placeholder="Step title" required>
<input type="hidden" name="project[project_steps_attributes][][description]" ng-value="step.description" />
<summernote ng-model="step.description" placeholder="" config="summernoteOpts" name=project[project_steps_attributes][][description] required></summernote>
<div class="fileinput" data-provides="fileinput" ng-class="fileinputClass(step.project_step_image)">
<span class="btn btn-default btn-file"><span class="fileinput-new">Ajouter une image</span><span class="fileinput-exists">Modifier l'image</span>
<span class="btn btn-default btn-file"><span class="fileinput-new">Add an image</span><span class="fileinput-exists">Edit Image</span>
<input type="file" name="project[project_steps_attributes][][project_step_image_attributes][attachment]"></span>
<span class="fileinput-filename">{{step.project_step_image}}</span>
<a class="close fileinput-exists" data-dismiss="fileinput" style="float: none"><i class="fa fa-trash-o"></i></a>
</div>
<div>
<a class="btn btn-sm btn-danger" ng-click="deleteStep(step)" role="button"><i class="fa fa-trash-o"></i> Supprimer l'étape</a>
<a class="btn btn-sm btn-danger" ng-click="deleteStep(step)" role="button"><i class="fa fa-trash-o"></i> Delete step</a>
</div>
</div>
</div>
<a class="btn btn-default m-b" ng-click="addStep()" role="button">Ajouter une nouvelle étape</a>
<a class="btn btn-default m-b" ng-click="addStep()" role="button">Add a new step</a>
</div>
</div>
@ -105,7 +105,7 @@
<div class="panel-footer no-padder">
<div ng-show="project.state != 'published'">
<div class="btn btn-lg btn-block btn-valid btn-success text-u-c r-n" publish-project ng-disabled="projectForm.$invalid">
Publier votre projet
Publish your project
</div>
<div class="text-center font-bold text-u-c">ou</div>
</div>
@ -120,7 +120,7 @@
<div class="widget panel b-a m m-t-lg">
<div class="panel-heading b-b small">
<h3>Matériaux utilisés</h3>
<h3>Used materials</h3>
</div>
<div class="widget-content no-bg wrapper">
<input type="hidden" name="project[component_ids][]" value="" />
@ -132,7 +132,7 @@
<div class="widget panel b-a m m-t-lg">
<div class="panel-heading b-b small">
<h3>Machines utilisées</h3>
<h3>Utilised machinery</h3>
</div>
<div class="widget-content no-bg wrapper">
<input type="hidden" name="project[machine_ids][]" value="" />
@ -144,7 +144,7 @@
<div class="widget panel b-a m m-t-lg">
<div class="panel-heading b-b small">
<h3>Collaborateurs</h3>
<h3>Contributors</h3>
</div>
<div class="widget-content no-bg wrapper">
<input type="hidden" name="project[user_ids][]" value="" />
@ -168,7 +168,7 @@
<div class="widget panel b-a m m-t-lg">
<div class="panel-heading b-b small">
<h3>Thématiques</h3>
<h3>Themes</h3>
</div>
<div class="widget-content no-bg wrapper">
<input type="hidden" name="project[theme_ids][]" value="" />

View File

@ -12,18 +12,18 @@
</div>
<div class="col-xs-10 col-sm-10 col-md-7 b-l b-r-md">
<section class="heading-title">
<h1>Editer le projet <span class="badge" ng-if="project.state == 'draft'">Brouillon</span></h1>
<h1>Edit Project <span class="badge" ng-if="project.state == 'draft'">Draft copy</span></h1>
</section>
</div>
<div class="col-xs-12 col-sm-12 col-md-4 b-t hide-b-md">
<section class="heading-actions wrapper">
<!-- <div class="btn btn-lg btn-block btn-default m-t-xs" ng-click="cancel()" ng-if="project.state == 'published'">
Annuler
Cancel
</div> -->
<input type="submit" ng-value="submitName" class="btn btn-lg btn-warning m-t-xs text-u-c" ng-disabled="projectForm.$invalid"/>
<div class="btn btn-lg btn-valid btn-success m-t-xs text-u-c" publish-project ng-if="project.state == 'draft'" ng-disabled="projectForm.$invalid">
Publier
Publish
</div>
</section>

View File

@ -7,18 +7,18 @@
</div>
<div class="col-xs-10 col-sm-10 col-md-8 b-l b-r-md">
<section class="heading-title">
<h1>Les projets du FabLab</h1>
<h1>XinFab's PROJECTS</h1>
</section>
</div>
<div class="col-xs-12 col-sm-12 col-md-3 b-t hide-b-md" ng-if="isAuthorized(['admin','member'])">
<section class="heading-actions wrapper">
<a class="btn btn-lg btn-warning bg-white b-2x rounded m-t-sm upper text-sm" ui-sref="app.logged.projects_new" role="button">Ajouter un projet</a>
<a class="btn btn-lg btn-warning bg-white b-2x rounded m-t-sm upper text-sm" ui-sref="app.logged.projects_new" role="button">Add Project</a>
</section>
</div>
<div class="col-xs-12 col-sm-12 col-md-3 b-t hide-b-md" ng-if="!isAuthenticated()">
<section class="heading-actions wrapper">
<a class="btn btn-lg btn-warning bg-white b-2x rounded m-t-sm upper text-sm" ui-sref="app.logged.projects_new" role="button">Proposer un projet</a>
<a class="btn btn-lg btn-warning bg-white b-2x rounded m-t-sm upper text-sm" ui-sref="app.logged.projects_new" role="button">Propose a Project</a>
</section>
</div>
</div>
@ -29,31 +29,31 @@
<div class="row m-b-md">
<div class="col-md-12"><h3 class="m-t-xs">Filtrer les projets</h3></div>
<div class="col-md-12"><h3 class="m-t-xs">Filter projects</h3></div>
<div class="col-md-3 m-b" ng-show="isAuthenticated()">
<select ng-model="selectedMember" class="form-control">
<option value="">Tous les projets</option>
<option value="0">Mes projets</option>
<option value="1">Les projets auxquels je collabore</option>
<option value="">All projects</option>
<option value="0">My projects</option>
<option value="1">The projects I colaborated</option>
</select>
</div>
<div class="col-md-3 m-b">
<select ng-model="selectedMachine" class="form-control" ng-options="m.id as m.name for m in machines">
<option value="">Toutes les machines</option>
<option value="">All Machines</option>
</select>
</div>
<div class="col-md-3 m-b">
<select ng-model="selectedTheme" class="form-control" ng-options="t.id as t.name for t in themes">
<option value="">Toutes les thématiques</option>
<option value="">All themes</option>
</select>
</div>
<div class="col-md-3 m-b">
<select ng-model="selectedComponent" class="form-control" ng-options="t.id as t.name for t in components">
<option value="">Tous les matériaux</option>
<option value="">All materials</option>
</select>
</div>
</div>

View File

@ -9,7 +9,7 @@
</div>
<div class="col-xs-10 col-sm-10 col-md-8 b-l ">
<section class="heading-title">
<h1>Ajouter un nouveau projet</h1>
<h1>Add a new project</h1>
</section>
</div>

View File

@ -9,15 +9,15 @@
</div>
<div class="col-xs-10 col-sm-10 col-md-8 b-l b-r-md">
<section class="heading-title">
<h1>{{ project.name }} <span class="badge" ng-if="project.state == 'draft'">Brouillon</span></h1>
<h1>{{ project.name }} <span class="badge" ng-if="project.state == 'draft'">Draft</span></h1>
</section>
</div>
<div class="col-xs-12 col-sm-12 col-md-3 b-t hide-b-md">
<section class="heading-actions wrapper">
<a ui-sref="app.logged.projects_edit({id: project.id})" ng-if="projectEditableBy(currentUser) || isAuthorized('admin')" class="btn btn-lg btn-warning bg-white b-2x rounded m-t-xs text-u-c text-sm"><i class="fa fa-edit"></i> éditer</a>
<a ng-if="!isAuthenticated()" class="btn btn-lg btn-warning bg-white b-2x rounded m-t-sm upper text-sm" ui-sref="app.logged.projects_new" role="button">Proposer un projet</a>
<a ui-sref="app.logged.projects_edit({id: project.id})" ng-if="projectEditableBy(currentUser) || isAuthorized('admin')" class="btn btn-lg btn-warning bg-white b-2x rounded m-t-xs text-u-c text-sm"><i class="fa fa-edit"></i> edit</a>
<a ng-if="!isAuthenticated()" class="btn btn-lg btn-warning bg-white b-2x rounded m-t-sm upper text-sm" ui-sref="app.logged.projects_new" role="button">Propose a Project</a>
</section>
</div>
</div>
@ -33,13 +33,13 @@
<a href="{{project.project_image}}" target="_blank"><img ng-src="{{project.project_image}}" alt="{{project.name}}" class="img-responsive"></a>
</div>
<h3>Description du projet</h3>
<h3>Project description</h3>
<p ng-bind-html="project.description | toTrusted"></p>
<div class="article-steps">
<div class="row article-step m-b-lg" ng-repeat="step in project.project_steps_attributes">
<div class="col-md-12 m-b-xs">
<h3 class="well well-simple step-title">Étape {{$index+1}} : {{step.title}}</h3>
<h3 class="well well-simple step-title">Step {{$index+1}} : {{step.title}}</h3>
</div>
<div class="col-md-4" ng-if="step.project_step_image">
<a href="{{step.project_step_image_url}}" target="_blank"><img class="img-responsive m-b" ng-src="{{step.project_step_image_url}}" alt="{{step.title}}" ></a>
@ -73,7 +73,7 @@
<fab-user-avatar ng-model="project.author.user_avatar" avatar-class="thumb-50"></fab-user-avatar>
</div>
<div><a class="text-sm font-sbold" ui-sref="app.logged.members_show({id: project.author.slug})"><i>Par {{project.author.first_name}}</i></a></div>
<small class="text-xs m-b"><i>posté le {{project.created_at | amDateFormat: 'Do MMMM YYYY'}}</i></small>
<small class="text-xs m-b"><i>posted on {{project.created_at | amDateFormat: 'Do MMMM YYYY'}}</i></small>
</div>
@ -81,7 +81,7 @@
<section class="widget panel b-a m" ng-if="project.project_caos_attributes">
<div class="panel-heading b-b">
<span class="badge bg-warning pull-right">{{project.project_caos_attributes.length}}</span>
<h3>Fichier CAO à télécharger</h3>
<h3>CAD file to download</h3>
</div>
<ul class="widget-content list-group list-group-lg no-bg auto">
@ -94,7 +94,7 @@
<section class="widget panel b-a m" ng-if="project.machines">
<div class="panel-heading b-b">
<span class="badge bg-warning pull-right">{{project.machines.length}}</span>
<h3>Machines et matériaux</h3>
<h3>Machines and materials</h3>
</div>
<ul class="widget-content list-group list-group-lg no-bg auto">

View File

@ -16,7 +16,7 @@
<div class="m-t-sm">
<input type="hidden" name="user[profile_attributes][user_avatar_attributes][id]" ng-value="user.profile.user_avatar.id">
<input type="hidden" name="user[profile_attributes][user_avatar_attributes][_destroy]" ng-value="true" ng-if="user.profile.user_avatar._destory">
<span class="btn btn-default btn-file" ng-click="user.profile.user_avatar._destory = false"><span class="fileinput-new">Ajouter un avatar</span><span class="fileinput-exists">Modifier</span>
<span class="btn btn-default btn-file" ng-click="user.profile.user_avatar._destory = false"><span class="fileinput-new">Add an avatar</span><span class="fileinput-exists">Modify</span>
<input type="file" name="user[profile_attributes][user_avatar_attributes][attachment]"></span>
<button class="btn btn-danger fileinput-exists" data-dismiss="fileinput" ng-click="user.profile.user_avatar._destory = true"><i class="fa fa-trash-o"></i> </button>
</div>
@ -28,21 +28,21 @@
<div class="form-group" ng-class="{'has-error': userForm['user[profile_attributes][gender]'].$dirty && userForm['user[profile_attributes][gender]'].$invalid}">
<label class="checkbox-inline btn btn-default">
<input type="radio" name="user[profile_attributes][gender]" ng-model="user.profile.gender" value="true" required/><i class="fa fa-male m-l-sm"></i> Homme
<input type="radio" name="user[profile_attributes][gender]" ng-model="user.profile.gender" value="true" required/><i class="fa fa-male m-l-sm"></i> Male
</label>
<label class="checkbox-inline btn btn-default">
<input type="radio" name="user[profile_attributes][gender]" ng-model="user.profile.gender" value="false"/> <i class="fa fa-female m-l-sm"></i> Femme
<input type="radio" name="user[profile_attributes][gender]" ng-model="user.profile.gender" value="false"/> <i class="fa fa-female m-l-sm"></i> Female
</label>
<span class="help-block" ng-show="userForm['user[profile_attributes][gender]'].$dirty && userForm['user[profile_attributes][gender]'].$error.required">Le genre est obligatoire</span>
<span class="help-block" ng-show="userForm['user[profile_attributes][gender]'].$dirty && userForm['user[profile_attributes][gender]'].$error.required">Gender is mandatory</span>
</div>
<div class="form-group" ng-class="{'has-error': userForm['user[username]'].$dirty && userForm['user[username]'].$invalid}">
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-user"></i></span>
<input ng-model="user.username" type="text" name="user[username]" class="form-control" id="user_username" placeholder="Pseudo" required>
<input ng-model="user.username" type="text" name="user[username]" class="form-control" id="user_username" placeholder="Username" required>
</div>
<span class="help-block" ng-show="userForm['user[username]'].$dirty && userForm['user[username]'].$error.required">Le pseudo est obligatoire</span>
<span class="help-block" ng-show="userForm['user[username]'].$dirty && userForm['user[username]'].$error.required">The username is mandatory</span>
</div>
@ -50,48 +50,48 @@
<div class="form-group" ng-class="{'has-error': userForm['user[profile_attributes][last_name]'].$dirty && userForm['user[profile_attributes][last_name]'].$invalid}">
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-user"></i></span>
<input ng-model="user.profile.last_name" type="text" name="user[profile_attributes][last_name]" class="form-control" id="user_last_name" placeholder="Nom" required>
<input ng-model="user.profile.last_name" type="text" name="user[profile_attributes][last_name]" class="form-control" id="user_last_name" placeholder="Last Name" required>
</div>
<span class="help-block" ng-show="userForm['user[profile_attributes][last_name]'].$dirty && userForm['user[profile_attributes][last_name]'].$error.required">Le nom est obligatoire</span>
<span class="help-block" ng-show="userForm['user[profile_attributes][last_name]'].$dirty && userForm['user[profile_attributes][last_name]'].$error.required">The last name is mandatory</span>
</div>
<div class="form-group" ng-class="{'has-error': userForm['user[profile_attributes][first_name]'].$dirty && userForm['user[profile_attributes][first_name]'].$invalid}">
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-user"></i></span>
<input ng-model="user.profile.first_name" type="text" name="user[profile_attributes][first_name]" class="form-control" id="user_first_name" placeholder="Prénom" required>
<input ng-model="user.profile.first_name" type="text" name="user[profile_attributes][first_name]" class="form-control" id="user_first_name" placeholder="First Name" required>
</div>
<span class="help-block" ng-show="userForm['user[profile_attributes][first_name]'].$dirty && userForm['user[profile_attributes][first_name]'].$error.required">Le prénom est obligatoire</span>
<span class="help-block" ng-show="userForm['user[profile_attributes][first_name]'].$dirty && userForm['user[profile_attributes][first_name]'].$error.required">The name is mandatory</span>
</div>
<div class="form-group" ng-class="{'has-error': userForm['user[email]'].$dirty && userForm['user[email]'].$invalid}">
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-envelope"></i> </span>
<input ng-model="user.email" type="email" name="user[email]" class="form-control" id="user_email" placeholder="Adresse email" required>
<input ng-model="user.email" type="email" name="user[email]" class="form-control" id="user_email" placeholder="Email address" required>
</div>
<span class="help-block" ng-show="userForm['user[email]'].$dirty && userForm['user[email]'].$error.required">L'email est obligatoire</span>
<span class="help-block" ng-show="userForm['user[email]'].$dirty && userForm['user[email]'].$error.required">The e-mail is mandatory</span>
</div>
<div class="form-group">
<button class="btn btn-warning btn-block" ng-click="change_password = !change_password; $event.stopPropagation(); $event.preventDefault()">Changer de mot de passe</button>
<button class="btn btn-warning btn-block" ng-click="change_password = !change_password; $event.stopPropagation(); $event.preventDefault()">Change password</button>
</div>
<div class="form-group" ng-class="{'has-error': userForm['user[password]'].$dirty && userForm['user[password]'].$invalid}" ng-if="change_password">
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-key"></i> </span>
<input ng-model="user.password" type="password" name="user[password]" class="form-control" id="user_password" placeholder="Nouveau mot de passe" required ng-minlength="8">
<input ng-model="user.password" type="password" name="user[password]" class="form-control" id="user_password" placeholder="New password" required ng-minlength="8">
</div>
<span class="help-block" ng-show="userForm['user[password]'].$dirty && userForm['user[password]'].$error.required">Le mot de passe est obligatoire</span>
<span class="help-block" ng-show="userForm['user[password]'].$dirty && userForm['user[password]'].$error.minlength">Le mot de passe est trop court (au moins 8 caractères)</span>
<span class="help-block" ng-show="userForm['user[password]'].$dirty && userForm['user[password]'].$error.required">The password is mandatory</span>
<span class="help-block" ng-show="userForm['user[password]'].$dirty && userForm['user[password]'].$error.minlength">The password is too short (at least 8 characters)</span>
</div>
<div class="form-group" ng-class="{'has-error': userForm['user[password_confirmation]'].$dirty && userForm['user[password_confirmation]'].$invalid}" ng-if="change_password">
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-key"></i> </span>
<input ng-model="user.password_confirmation" type="password" name="user[password_confirmation]" class="form-control" id="user_password_confirmation" placeholder="Confirmation du nouveau mot de passe" required ng-minlength="8">
<input ng-model="user.password_confirmation" type="password" name="user[password_confirmation]" class="form-control" id="user_password_confirmation" placeholder="New password confirmation" required ng-minlength="8">
</div>
<span class="help-block" ng-show="userForm['user[password_confirmation]'].$dirty && userForm['user[password_confirmation]'].$error.required">Le mot de passe de confirmation est obligatoire</span>
<span class="help-block" ng-show="userForm['user[password_confirmation]'].$dirty && userForm['user[password_confirmation]'].$error.minlength">Le mot de passe de confirmation est trop court (au moins 8 caractères)</span>
<span class="help-block" ng-show="userForm['user[password_confirmation]'].$dirty && userForm['user[password_confirmation]'].$error.required">The password confirmation is mandatory</span>
<span class="help-block" ng-show="userForm['user[password_confirmation]'].$dirty && userForm['user[password_confirmation]'].$error.minlength">The confirmation password is too short (at least 8 characters)</span>
</div>
<div class="form-group" ng-class="{'has-error': userForm['user[profile_attributes][birthday]'].$dirty && userForm['user[profile_attributes][birthday]'].$invalid}">
@ -105,36 +105,36 @@
datepicker-popup="dd/MM/yyyy"
datepicker-options="datePicker.options"
is-open="datePicker.opened"
placeholder="Date de naissance"
placeholder="Birth date"
ng-click="openDatePicker($event)"
required/>
</div>
<span class="help-block" ng-show="userForm['user[profile_attributes][birthday]'].$dirty && userForm['user[profile_attributes][birthday]'].$error.required">La date de naissance est obligatoire</span>
<span class="help-block" ng-show="userForm['user[profile_attributes][birthday]'].$dirty && userForm['user[profile_attributes][birthday]'].$error.required">The date of birth is mandatory</span>
</div>
<div class="form-group">
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-map-marker"></i> </span>
<input type="hidden" name="user[profile_attributes][address_attributes][id]" ng-value="user.profile.address.id" />
<input ng-model="user.profile.address.address" type="text" name="user[profile_attributes][address_attributes][address]" class="form-control" id="user_address" placeholder="Adresse">
<input ng-model="user.profile.address.address" type="text" name="user[profile_attributes][address_attributes][address]" class="form-control" id="user_address" placeholder="Address">
</div>
</div>
<div class="form-group" ng-class="{'has-error': userForm['user[profile_attributes][phone]'].$dirty && userForm['user[profile_attributes][phone]'].$invalid}">
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-phone"></i> </span>
<input ng-model="user.profile.phone" type="text" name="user[profile_attributes][phone]" class="form-control" id="user_phone" placeholder="Numéro de téléphone" required>
<input ng-model="user.profile.phone" type="text" name="user[profile_attributes][phone]" class="form-control" id="user_phone" placeholder="Phone number" required>
</div>
<span class="help-block" ng-show="userForm['user[profile_attributes][phone]'].$dirty && userForm['user[profile_attributes][phone]'].$error.required">Le numéro de téléphone est obligatoire.</span>
<span class="help-block" ng-show="userForm['user[profile_attributes][phone]'].$dirty && userForm['user[profile_attributes][phone]'].$error.required">The telephone number is mandatory.</span>
</div>
<div class="form-group">
<label for="user_interest">Centres d'intérêts</label>
<label for="user_interest">Interests</label>
<textarea ng-model="user.profile.interest" rows="5" name="user[profile_attributes][interest]" class="form-control" id="user_interest" placeholder=""></textarea>
</div>
<div class="form-group">
<label for="user_software_mastered">Logiciels de conception maîtrisés</label>
<label for="user_software_mastered">Skills</label>
<textarea ng-model="user.profile.software_mastered" rows="5" name="user[profile_attributes][software_mastered]" class="form-control" id="user_software_mastered" placeholder=""></textarea>
</div>

View File

@ -2,30 +2,27 @@
<div class="row padder">
<header class="about-picture">
<div class="col-sm-offset-2 col-md-offset-3 col-sm-10 col-md-8">
<h1 class="about-title text-u-c">Imaginer, Fabriquer, <br>Partager au Fab Lab</h1>
<h1 class="about-title text-u-c">Imagine, Make, <br>Share at Fablab XinFab</h1>
</div>
</header>
</div>
<div class="row padder">
<div class="col-sm-offset-1 col-md-offset-3 col-sm-7 col-md-5 col-lg-4 m-b-lg">
<p>Le Fab Lab est un atelier de fabrication numérique où lon peut utiliser des machines de découpe, des imprimantes 3D,… permettant de travailler sur des matériaux variés : plastique, bois, carton, vinyle, … afin de créer toute sorte dobjet grâce à la conception assistée par ordinateur ou à lélectronique. Mais le Fab Lab est aussi un lieu déchange de compétences technique. </p>
<p>Fab Lab is the educational outreach component of MITs Center for Bits and Atoms (CBA), an extension of its research into digital fabrication and computation. A Fab Lab is a technical prototyping platform for innovation and invention, providing stimulus for local entrepreneurship. A Fab Lab is also a platform for learning and innovation: a place to play, to create, to learn, to mentor, to invent.</p>
<p>
Le Fab Lab est un espace permanent : ouvert à tous, il offre la possibilité de réaliser des objets soi-même, de partager ses compétences et dapprendre au contact des médiateurs du Fab Lab et des autres usagers. </p>
<p>
La formation au Fab Lab sappuie sur des projets et le partage de connaissances : vous devez prendre part à la capitalisation des connaissances et à linstruction des autres utilisateurs.
</p>
Fablabs are a part of maker culture where ordinary people are empowered to design, build, innovate, and invent on their own or with other makers. Fablabs offer makers the space and tools to digitally manufacture objects, from furniture to jewelry, robots to food.</p>
</div>
<div class="col-sm-offset-0 col-md-offset-0 col-lg-offset-1 col-sm-4 col-md-4">
<h2 class="about-title-aside text-u-c">Vos contacts au Fab Lab</h2>
<h2 class="about-title-aside text-u-c">Fab Lab XinFab contacts</h2>
<dl>
<dt>Manager Fab Lab :</dt>
<dd>@email</dd>
<dt>Responsable médiation :</dt>
<dd>@email</dd>
<dt>Animateur scientifique :</dt>
<dd>@email</dd>
<dt>Fab Lab Manager:</dt>
<dd>spacemanager@xinfab.com</dd>
<dt>Staff:</dt>
<dd>info@xinfab.com</dd>
<dt>Information:</dt>
<dd>info@xinfab.com</dd>
</dl>
</div>
</div>

View File

@ -1,7 +1,7 @@
<div class="" id="loginModal">
<div class="modal-header">
<%= image_tag("fablab-w.png", class: 'modal-logo') %>
<h1>Connexion</h1>
<h1>Login</h1>
</div>
<div class="modal-body">
<alert ng-repeat="alert in alerts" type="{{alert.type}}" close="closeAlert($index)">{{alert.msg}}</alert>
@ -15,7 +15,7 @@
<span class="input-group-addon"><i class="fa fa-envelope"></i></span>
<input type="email" name="email" class="form-control"
ng-model="user.email" required="required" ng-blur="emailError = !!loginForm.email.$error.email"
ng-focus="emailError = false" placeholder="Votre adresse email" />
ng-focus="emailError = false" placeholder="Your email address" />
</div>
</div>
</div>
@ -24,9 +24,9 @@
<div class="col-sm-12">
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-key"></i></span>
<input type="password" name="password" class="form-control" ng-model="user.password" required="required" placeholder="Votre mot de passe" ng-minlength="8"/>
<input type="password" name="password" class="form-control" ng-model="user.password" required="required" placeholder="Your password" ng-minlength="8"/>
</div>
<a href="#" ng-click="openResetPassword($event)" class="text-xs">Mot de passe oublié ?</a>
<a href="#" ng-click="openResetPassword($event)" class="text-xs">Forgotten password ?</a>
</div>
</div>
@ -34,12 +34,12 @@
</div>
<div class="panel-footer no-padder">
<button class="btn btn-valid btn-warning btn-block p-l btn-lg text-u-c r-b" ng-click="login()" ng-disabled="loginForm.$invalid">Valider</button>
<button class="btn btn-valid btn-warning btn-block p-l btn-lg text-u-c r-b" ng-click="login()" ng-disabled="loginForm.$invalid">Confirm</button>
</div>
</div>
<p class="text-center font-sbold">
Vous n'êtes pas inscrit au FAB LAB ? <br>
<a href="#" ng-click="openSignup($event)" class="text-u-l">Créer un compte</a></br>
Aren't you registerd in Fablab XinFab?<br>
<a href="#" ng-click="openSignup($event)" class="text-u-l">Create an account</a></br>
</p>
</div>

View File

@ -8,10 +8,10 @@
<ul class="nav navbar-nav hidden-xs">
<li>
<a href class="about-link font-sbold text-sm" ng-click="goabout = !goabout" ui-sref="app.public.about" ng-show="!goabout">
<span class="label label-danger rounded text-lg text-white m-r-sm font-ebold">?</span>A propos du Fab Lab
<span class="label label-danger rounded text-lg text-white m-r-sm font-ebold">?</span>About Fablab XinFab
</a>
<a href class="about-link font-sbold text-sm" ng-click="goabout = !goabout" ui-sref="app.public.home" ng-show="goabout">
<span class="label label-danger label-icon rounded text-lg text-white m-r-sm font-ebold"><i class="fa fa-caret-up" ng-show="goabout"></i></span>Retour
<span class="label label-danger label-icon rounded text-lg text-white m-r-sm font-ebold"><i class="fa fa-caret-up" ng-show="goabout"></i></span>Back
</div>
</a>
</li>
@ -30,15 +30,15 @@
</span>
</a>
<ul class="dropdown-menu animated fadeInRight">
<li><a href="#" ui-sref="app.logged.dashboard_profile">Mon profil</a></li>
<li><a href="#" ui-sref="app.logged.dashboard_projects">Mes projets</a></li>
<li><a href="#" ui-sref="app.logged.dashboard_profile">My profile</a></li>
<li><a href="#" ui-sref="app.logged.dashboard_projects">My Projects</a></li>
<li class="divider"></li>
<li><a href="#" class="text-black" ng-click="logout($event)"><i class="fa fa-power-off"></i> Se déconnecter</a></li>
<li><a href="#" class="text-black" ng-click="logout($event)"><i class="fa fa-power-off"></i> Sign out</a></li>
</ul>
</li>
<li ng-if="!isAuthenticated()"><a href="#" class="font-sbold label text-md" ng-click="signup($event)"><i class="fa fa-rocket"></i> S'inscrire</a></li>
<li ng-if="!isAuthenticated()"><a href="#" class="font-sbold label text-md" ng-click="signup($event)"><i class="fa fa-rocket"></i> Register</a></li>
<li ng-if="!isAuthenticated()">
<a href="#" class="font-sbold label text-md" ng-click="login($event)"><i class="fa fa-sign-in"></i> Se connecter</a>
<a href="#" class="font-sbold label text-md" ng-click="login($event)"><i class="fa fa-sign-in"></i> Login</a>
</li>
</ul>

View File

@ -6,9 +6,9 @@
<!-- nav -->
<nav class="nav-primary hidden-xs">
<ul class="nav nav-main m-t-xs" data-ride="collapse" >
<li class="hidden-sm hidden-md hidden-lg" ng-if="!isAuthenticated()"><a href="#" class="auto" ng-click="signup($event)"><i class="fa fa-rocket"></i> <span>S'inscrire</span></a></li>
<li class="hidden-sm hidden-md hidden-lg" ng-if="!isAuthenticated()"><a href="#" class="auto" ng-click="signup($event)"><i class="fa fa-rocket"></i> <span>Register</span></a></li>
<li class="hidden-sm hidden-md hidden-lg" ng-if="!isAuthenticated()">
<a href="#" class="auto" ng-click="login($event)"><i class="fa fa-sign-in"></i> <span>Se connecter</span></a>
<a href="#" class="auto" ng-click="login($event)"><i class="fa fa-sign-in"></i> <span>Login</span></a>
</li>
<li class="" ng-repeat="navLink in navLinks" >
@ -37,7 +37,7 @@
<footer class="footer hidden-xs no-padder text-center-nav-xs">
<a data-link="#nav" data-toggle="class:nav-xs" class="btn btn-danger btn-block no-b btn-icon icon-muted btn-inactive no-radius wrapper" ng-click="toggleNavSize($event)">
<i class="fa fa-long-arrow-left text"></i> <span class="text text-sm">Réduire le volet</span>
<i class="fa fa-long-arrow-left text"></i> <span class="text text-sm">Reduce frame</span>
<i class="fa fa-long-arrow-right text-active"></i>
</a>
</footer>

View File

@ -1,7 +1,7 @@
<div>
<div class="modal-header">
<%= image_tag("fablab-w.png", class: 'modal-logo') %>
<h1>Modifier votre mot de passe</h1>
<h1>Modify the password</h1>
</div>
<div class="modal-body">
<alert ng-repeat="alert in alerts" type="{{alert.type}}" close="closeAlert($index)">{{alert.msg}}</alert>
@ -12,10 +12,10 @@
<div class="col-sm-12">
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-key"></i></span>
<input type="password" name="password" ng-model="user.password" class="form-control" placeholder="Votre nouveau mot de passe" required ng-minlength="8">
<input type="password" name="password" ng-model="user.password" class="form-control" placeholder="Your new password" required ng-minlength="8">
</div>
<span class="help-block" ng-show="passwordEditForm.password.$dirty && passwordEditForm.password.$error.required">Mot de passe est obligatoire</span>
<span class="help-block" ng-show="passwordEditForm.password.$dirty && passwordEditForm.password.$error.minlength">Mot de passe est trop court (au moins 8 caractères)</span>
<span class="help-block" ng-show="passwordEditForm.password.$dirty && passwordEditForm.password.$error.required">Password is required</span>
<span class="help-block" ng-show="passwordEditForm.password.$dirty && passwordEditForm.password.$error.minlength">Password is too short (at least 8 characters)</span>
</div>
</div>
@ -23,17 +23,17 @@
<div class="col-sm-12">
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-key"></i></span>
<input type="password" name="password_confirmation" ng-model="user.password_confirmation" class="form-control" placeholder="Resaisissez votre mot de passe" required ng-minlength="8" match="user.password">
<input type="password" name="password_confirmation" ng-model="user.password_confirmation" class="form-control" placeholder="Enter your password" required ng-minlength="8" match="user.password">
</div>
<span class="help-block" ng-show="passwordEditForm.password_confirmation.$dirty && passwordEditForm.password_confirmation.$error.required">Mot de passe de confirmation est obligatoire</span>
<span class="help-block" ng-show="passwordEditForm.password_confirmation.$error.match">Mot de passe ne concorde pas avec la confirmation</span>
<span class="help-block" ng-show="passwordEditForm.password_confirmation.$dirty && passwordEditForm.password_confirmation.$error.required">Password confirmation is mandatory</span>
<span class="help-block" ng-show="passwordEditForm.password_confirmation.$error.match">Password does not match</span>
</div>
</div>
</form>
</div>
<div class="panel-footer no-padder">
<button class="btn btn-valid btn-warning btn-block p-l btn-lg text-u-c r-b" ng-click="changePassword()" ng-disabled="passwordEditForm.$invalid">Valider</button>
<button class="btn btn-valid btn-warning btn-block p-l btn-lg text-u-c r-b" ng-click="changePassword()" ng-disabled="passwordEditForm.$invalid">Confirm</button>
</div>
</div>
</div>

View File

@ -1,7 +1,7 @@
<div>
<div class="modal-header">
<%= image_tag("fablab-w.png", class: 'modal-logo') %>
<h1>Mot de passe oublié</h1>
<h1>Forgotten password</h1>
</div>
<div class="modal-body">
<alert ng-repeat="alert in alerts" type="{{alert.type}}" close="closeAlert($index)">{{alert.msg}}</alert>
@ -14,7 +14,7 @@
<span class="input-group-addon"><i class="fa fa-envelope"></i></span>
<input type="email" name="email" class="form-control"
ng-model="user.email" required="required" ng-blur="emailError = !!passwordNewForm.email.$error.email"
ng-focus="emailError = false" placeholder="Votre adresse email" />
ng-focus="emailError = false" placeholder="Your email address" />
</div>
</div>
</div>
@ -22,7 +22,7 @@
</div>
<div class="panel-footer no-padder">
<button class="btn btn-valid btn-warning btn-block p-l btn-lg text-u-c r-b" ng-click="sendReset()" ng-disabled="passwordNewForm.$invalid">Valider</button>
<button class="btn btn-valid btn-warning btn-block p-l btn-lg text-u-c r-b" ng-click="sendReset()" ng-disabled="passwordNewForm.$invalid">Confirm</button>
</div>
</div>
</div>

View File

@ -1,6 +1,6 @@
<div class="modal-header">
<%= image_tag("fablab-w.png", class: 'modal-logo') %>
<h1>Créer votre compte</h1>
<h1>CREATE YOUR ACCOUNT</h1>
</div>
<div class="">
<alert ng-repeat="alert in alerts" type="{{alert.type}}" close="closeAlert($index)">{{alert.msg}}</alert>
@ -10,25 +10,25 @@
<div class="form-group" ng-class="{'has-error': signupForm.gender.$dirty && signupForm.gender.$invalid}">
<div class="col-sm-12">
<label class="checkbox-inline">
<input type="radio" name="gender" ng-model="user.profile_attributes.gender" value="true" required/> Homme
<input type="radio" name="gender" ng-model="user.profile_attributes.gender" value="true" required/> Male
</label>
<label class="checkbox-inline">
<input type="radio" name="gender" ng-model="user.profile_attributes.gender" value="false"/> Femme
<input type="radio" name="gender" ng-model="user.profile_attributes.gender" value="false"/> Female
</label>
<span class="help-block" ng-show="signupForm.gender.$dirty && signupForm.gender.$error.required">Sexe est obligatoire</span>
<span class="help-block" ng-show="signupForm.gender.$dirty && signupForm.gender.$error.required">Inform gender is mandatory</span>
</div>
</div>
<div class="form-group">
<div class="col-sm-6" ng-class="{'has-error': signupForm.first_name.$dirty && signupForm.first_name.$invalid}">
<input type="first_name" name="first_name" ng-model="user.profile_attributes.first_name" class="form-control" placeholder="Votre prénom" required>
<span class="help-block" ng-show="signupForm.first_name.$dirty && signupForm.first_name.$error.required">Prénom est obligatoire</span>
<input type="first_name" name="first_name" ng-model="user.profile_attributes.first_name" class="form-control" placeholder="First name" required>
<span class="help-block" ng-show="signupForm.first_name.$dirty && signupForm.first_name.$error.required">Name is required</span>
</div>
<div class="m-b visible-xs"></div>
<div class="col-sm-6" ng-class="{'has-error': signupForm.last_name.$dirty && signupForm.last_name.$invalid}">
<input type="last_name" name="last_name" ng-model="user.profile_attributes.last_name" class="form-control" placeholder="Votre nom" required>
<span class="help-block" ng-show="signupForm.last_name.$dirty && signupForm.last_name.$error.required">Nom est obligatoire</span>
<input type="last_name" name="last_name" ng-model="user.profile_attributes.last_name" class="form-control" placeholder="Last Name" required>
<span class="help-block" ng-show="signupForm.last_name.$dirty && signupForm.last_name.$error.required">Last name is required</span>
</div>
</div>
@ -36,9 +36,9 @@
<div class="col-sm-12">
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-user"></i></span>
<input type="username" name="username" ng-model="user.username" class="form-control" placeholder="Votre pseudo" required>
<input type="username" name="username" ng-model="user.username" class="form-control" placeholder="Username" required>
</div>
<span class="help-block" ng-show="signupForm.username.$dirty && signupForm.username.$error.required">Pseudo est obligatoire</span>
<span class="help-block" ng-show="signupForm.username.$dirty && signupForm.username.$error.required">Username is required</span>
</div>
</div>
@ -46,9 +46,9 @@
<div class="col-sm-12">
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-envelope"></i></span>
<input type="email" name="email" ng-model="user.email" class="form-control" placeholder="Votre adresse email" required>
<input type="email" name="email" ng-model="user.email" class="form-control" placeholder="Your email address" required>
</div>
<span class="help-block" ng-show="signupForm.email.$dirty && signupForm.email.$error.required">Email est obligatoire</span>
<span class="help-block" ng-show="signupForm.email.$dirty && signupForm.email.$error.required">Email is required</span>
</div>
</div>
@ -56,10 +56,10 @@
<div class="col-sm-12">
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-key"></i></span>
<input type="password" name="password" ng-model="user.password" class="form-control" placeholder="Votre mot de passe" required ng-minlength="8">
<input type="password" name="password" ng-model="user.password" class="form-control" placeholder="Your password" required ng-minlength="8">
</div>
<span class="help-block" ng-show="signupForm.password.$dirty && signupForm.password.$error.required">Mot de passe est obligatoire</span>
<span class="help-block" ng-show="signupForm.password.$dirty && signupForm.password.$error.minlength">Mot de passe est trop court (au moins 8 caractères)</span>
<span class="help-block" ng-show="signupForm.password.$dirty && signupForm.password.$error.required">Password is required</span>
<span class="help-block" ng-show="signupForm.password.$dirty && signupForm.password.$error.minlength">Password too short (8 min)</span>
</div>
</div>
@ -67,10 +67,10 @@
<div class="col-sm-12">
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-key"></i></span>
<input type="password" name="password_confirmation" ng-model="user.password_confirmation" class="form-control" placeholder="Resaisissez votre mot de passe" required ng-minlength="8" match="user.password">
<input type="password" name="password_confirmation" ng-model="user.password_confirmation" class="form-control" placeholder="Enter your password" required ng-minlength="8" match="user.password">
</div>
<span class="help-block" ng-show="signupForm.password_confirmation.$dirty && signupForm.password_confirmation.$error.required">Mot de passe de confirmation est obligatoire</span>
<span class="help-block" ng-show="signupForm.password_confirmation.$error.match">Mot de passe ne concorde pas avec la confirmation</span>
<span class="help-block" ng-show="signupForm.password_confirmation.$dirty && signupForm.password_confirmation.$error.required">Password confirmation is mandatory</span>
<span class="help-block" ng-show="signupForm.password_confirmation.$error.match">Password does not match confirmation</span>
</div>
</div>
@ -78,10 +78,10 @@
<div class="col-sm-12">
<div>
<select ng-model="user.group_id" class="form-control" name="group_id" ng-options="g.id as g.name for g in groups" required>
<option value="">Votre profil utilisateur</option>
<option value="">Your user profile</option>
</select>
</div>
<span class="help-block" ng-show="signupForm.group_id.$dirty && signupForm.group_id.$error.required">Le profil utilisateur est obligatoire</span>
<span class="help-block" ng-show="signupForm.group_id.$dirty && signupForm.group_id.$error.required">The user profile is mandatory</span>
</div>
</div>
@ -96,11 +96,11 @@
datepicker-popup="{{datePicker.format}}"
datepicker-options="datePicker.options"
is-open="datePicker.opened"
placeholder="Date de naissance"
placeholder="Date of birth"
ng-click="openDatePicker($event)"
required/>
</div>
<span class="help-block" ng-show="signupForm.birthday.$dirty && signupForm.birthday.$error.required">La date de naissance est obligatoire</span>
<span class="help-block" ng-show="signupForm.birthday.$dirty && signupForm.birthday.$error.required">The date of birth is mandatory</span>
</div>
</div>
@ -108,26 +108,26 @@
<div class="col-sm-12">
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-phone"></i> </span>
<input ng-model="user.profile_attributes.phone" type="text" name="phone" class="form-control" placeholder="Numéro de téléphone" required>
<input ng-model="user.profile_attributes.phone" type="text" name="phone" class="form-control" placeholder="Phone number" required>
</div>
<span class="help-block" ng-show="signupForm.phone.$dirty && signupForm.phone.$error.required">Le numéro de téléphone est obligatoire.</span>
<span class="help-block" ng-show="signupForm.phone.$dirty && signupForm.phone.$error.required">The telephone number is mandatory.</span>
</div>
</div>
<div class="form-group" ng-class="{'has-error': signupForm.is_allow_contact.$dirty && signupForm.is_allow_contact.$invalid}">
<div class="col-sm-12">
<input type="checkbox" name="is_allow_contact" ng-model="user.is_allow_contact" value="true"/> J'autorise les utilisateurs du Fab Lab inscrits sur le site à me contacter
<input type="checkbox" name="is_allow_contact" ng-model="user.is_allow_contact" value="true"/> I authorize Fablab XinFab users registered on the site to contact me
</div>
</div>
<div class="form-group" ng-class="{'has-error': signupForm.cgu.$dirty && signupForm.cgu.$invalid}">
<div class="col-sm-12">
<input type="checkbox" name="cgu" ng-model="user.cgu" value="true" required/> J'accepte et J'ai Lu <a href="/Charte_FABLAB.pdf" target="_blank">la charte d'utilisation du Fab Lab</a>
<input type="checkbox" name="cgu" ng-model="user.cgu" value="true" required/> I have read and I accept <a href="/Charte_FABLAB.pdf" target="_blank">the Fab Lab rules</a>
</div>
</div>
</form>
</div>
</div>
<div class="modal-footer no-padder">
<button class="btn btn-valid btn-warning btn-block p-l btn-lg text-u-c r-b" ng-click="ok()" ng-disabled="signupForm.$invalid">Valider</button>
<button class="btn btn-valid btn-warning btn-block p-l btn-lg text-u-c r-b" ng-click="ok()" ng-disabled="signupForm.$invalid">Confirm</button>
</div>

View File

@ -1,13 +1,13 @@
<table border="1">
<tr>
<th>ID</th>
<th>Nom</th>
<th>Prénom</th>
<th>Last Name</th>
<th>First Name</th>
<th>Email</th>
<th>Genre</th>
<th>Gender</th>
<th>Age</th>
<th>Tel.</th>
<th>Type utilisateur</th>
<th>Phone</th>
<th>User Type</th>
</tr>
<% @datas.each do |data| %>
<tr>
@ -15,7 +15,7 @@
<td><%= data.profile.last_name %></td>
<td><%= data.profile.first_name %></td>
<td><%= data.email %></td>
<td><%= data.profile.gender ? 'Homme' : 'Femme' %></td>
<td><%= data.profile.gender ? 'Male' : 'Female' %></td>
<td><%= data.profile.age %></td>
<td><%= data.profile.phone %></td>
<td><%= data.group.name %></td>

View File

@ -1,3 +1,3 @@
json.title notification.notification_type
json.description "Un nouveau compte utilisateur vient d'être créé : <strong><em>#{ notification.attached_object.profile.full_name } &lt;#{ notification.attached_object.email}&gt;</strong></em>."
json.description "A new user account newly created : <strong><em>#{ notification.attached_object.profile.full_name } &lt;#{ notification.attached_object.email}&gt;</strong></em>."
json.url notification_url(notification, format: :json)

View File

@ -1,7 +1,7 @@
<p>Bonjour,</p>
<p>Hi,</p>
<p>Quelqu'un a demandé un lien pour changer votre mot de passe. Vous pouvez le faire via le lien ci-dessous.</p>
<p>Someone asked a link to change your password. You can do this via the link below.</p>
<p><%= link_to 'Changer mon mot de passe', "#{root_url}#!/?reset_password_token=#{@token}" %></p>
<p><%= link_to 'Change my password', "#{root_url}#!/?reset_password_token=#{@token}" %></p>
<p>Si vous n'avez pas demandé cela, merci d'ignorer ce message.</p>
<p>If you did not request this, thank you ignore this message.</p>

View File

@ -25,12 +25,12 @@
<%= p.label :gender %>
<div class="radio">
<label>
<%= p.radio_button :gender, true %> Homme
<%= p.radio_button :gender, true %> Male
</label>
</div>
<div class="radio">
<label>
<%= p.radio_button :gender, false %> Femme
<%= p.radio_button :gender, false %> Female
</label>
</div>
</div>
@ -73,13 +73,13 @@
<div class="checkbox">
<label>
<%= f.check_box :is_allow_contact %> J'autorise les utilisateurs du Fab Lab inscrits sur le site à me contacter
<%= f.check_box :is_allow_contact %> I authorize Fablab users registered on the site to contact me
</label>
</div>
<div class="checkbox">
<label>
<%= f.check_box :cgu %> J'accepte et J'ai Lu la charte d'utilisation du Fab Lab
<%= f.check_box :cgu %> I have read and I accept the rules of the Fab Lab XinFab
</label>
</div>
<button type="submit" class="btn btn-default">Sign in</button>

View File

@ -1,3 +1,3 @@
<p>Bonjour,</p>
<p>Un nouveau projet vient d'être publié : "<%= link_to @attached_object.name, "#{root_url}#!/projects/#{@attached_object.id}" %>"</p>
<p>A new project has just been published : "<%= link_to @attached_object.name, "#{root_url}#!/projects/#{@attached_object.id}" %>"</p>

View File

@ -1,10 +1,10 @@
<p>Bonjour <%= @user.profile.full_name %>, </p>
<p>Hi <%= @user.profile.full_name %>, </p>
<p>Léquipe du Fab Lab vient de vous créer un compte sur <%= link_to 'le site du Fab lab', root_url %> <br> Voici vos paramètres de connexion : </p>
<p>The FabLab team has created an account on www.xinfab.com. <%= link_to 'www.xinfab.com', root_url %> <br> Here is your connection settings : </p>
<p>Nom de compte : <b><%= @user.email %></b></p>
<p>Mot de passe : <b><%= @generated_password %></b></p>
<p>Username : <b><%= @user.email %></b></p>
<p>Password : <b><%= @generated_password %></b></p>
<p>Ce mot de passe est temporaire, vous pourrez le modifier en accédant à lespace « Mon compte ». Avec ce compte, vous conservez bien entendu tous les avantages liés à votre profil utilisateur Fab Lab (abonnement, formations).</p>
<p>This password is temporary, you can change it by accessing the "My Account". With this account, you retain all the benefits of course related to your user profile Fab Lab (subscription, training).</p>
<p>L'équipe Fab Lab.</p>
<p>The team Fablab XinFab.</p>

View File

@ -23,11 +23,11 @@ module Fablab
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
config.time_zone = 'Paris'
config.time_zone = 'Beijing'
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
config.i18n.default_locale = :fr
config.i18n.default_locale = :en
config.assets.paths << Rails.root.join('vendor', 'assets', 'components').to_s

View File

@ -9,10 +9,10 @@ fr:
failure:
already_authenticated: Vous êtes déjà connecté(e).
inactive: Votre compte nest pas encore activé.
invalid: E-mail ou mot de passe incorrect.
invalid: Incorrect Email or password.
invalid_token: Jeton d'authentification incorrect.
locked: Votre compte est verrouillé.
not_found_in_database: E-mail ou mot de passe incorrect.
not_found_in_database: Incorrect Email or password.
timeout: Votre session est périmée, veuillez vous reconnecter pour continuer.
unauthenticated: Vous devez vous connecter ou vous enregistrer pour continuer.
unconfirmed: Vous devez confirmer votre compte par e-mail.
@ -67,7 +67,7 @@ fr:
signed_in: Connecté(e) avec succès.
signed_out: Déconnecté(e) avec succès.
new:
sign_in: Connexion
sign_in: Login
remember: Se souvenir de moi
unlocks:
send_instructions: Vous allez recevoir un e-mail sous quelques minutes contenant les instructions nécessaires au déblocage de votre compte.
@ -80,9 +80,9 @@ fr:
didn_t_receive_confirmation_instructions: Vous navez pas reçu le-mail de confirmation ?
didn_t_receive_unlock_instructions: Vous navez pas reçu le-mail de débloquage ?
forgot_your_password: Mot de passe oublié ?
sign_in: Connexion
sign_in: Login
sign_in_with_provider: Connexion avec %{provider}
sign_up: Créer un compte
sign_up: Create an account
errors:
messages:
already_confirmed: a déjà été confirmé(e)

View File

@ -5,15 +5,15 @@
if Group.count == 0
Group.create!([
{name: "standard, association"},
{name: "étudiant, - de 25 ans, enseignant, demandeur d'emploi"},
{name: "artisan, commerçant, chercheur, auto-entrepreneur"},
{name: "PME, PMI, SARL, SA"}
{name: "standard, membership"},
{name: "student - 25 years, teachers, unemployed"},
{name: "artisan, trader, researcher, entrepreneur"},
{name: "Company"}
])
end
if User.find_by(email: "admin@fabmanager.com").nil?
admin = User.new(username: 'admin', email: 'admin@fabmanager.com', password: 'adminadmin', password_confirmation: 'adminadmin', group_id: Group.first.id,
if User.find_by(email: "admin@xinfab.com").nil?
admin = User.new(username: 'admin', email: 'admin@xinfab.com', password: 'adminadmin', password_confirmation: 'adminadmin', group_id: Group.first.id,
profile_attributes: {first_name: 'Admin', last_name: 'Admin', gender: true, phone: '0000000000', birthday: Time.now})
#admin.skip_confirmation!
admin.add_role "admin"
@ -23,15 +23,15 @@ end
if Component.count == 0
Component.create!([
{name: "Silicone"},
{name: "Vinyle"},
{name: "Bois Contre plaqué"},
{name: "Bois Medium"},
{name: "Vinyl"},
{name: "Plywood"},
{name: "Wood"},
{name: "Plexi / PMMA"},
{name: "Flex"},
{name: "Vinyle"},
{name: "Parafine"},
{name: "Fibre de verre"},
{name: "Résine"}
{name: "Paraffin"},
{name: "Fiberglass"},
{name: "Resin"}
])
end
@ -48,29 +48,29 @@ end
if Theme.count == 0
Theme.create!([
{name: "Vie quotidienne"},
{name: "Robotique"},
{name: "Arduine"},
{name: "Capteurs"},
{name: "Musique"},
{name: "Daily life"},
{name: "Robotics"},
{name: "Arduino"},
{name: "Sensors"},
{name: "Music"},
{name: "Sport"},
{name: "Autre"}
{name: "other"}
])
end
if Machine.count == 0
Machine.create!([
{name: "Découpeuse laser", description: "Préparation à l'utilisation de l'EPILOG Legend 36EXT\r\nInformations générales \r\n Pour la découpe, il suffit d'apporter votre fichier vectorisé type illustrator, svg ou dxf avec des \"lignes de coupe\" d'une épaisseur inférieur à 0,01 mm et la machine s'occupera du reste!\r\n La gravure est basée sur le spectre noir et blanc. Les nuances sont obtenues par différentes profondeurs de gravure correspondant aux niveaux de gris de votre image. Il suffit pour cela d'apporter une image scannée ou un fichier photo en noir et blanc pour pouvoir reproduire celle-ci sur votre support! \r\nQuels types de matériaux pouvons nous graver/découper?\r\n Du bois au tissu, du plexiglass au cuir, cette machine permet de découper et graver la plupart des matériaux sauf les métaux. La gravure est néanmoins possible sur les métaux recouverts d'une couche de peinture ou les aluminiums anodisés. \r\n Concernant l'épaisseur des matériaux découpés, il est préférable de ne pas dépasser 5 mm pour le bois et 6 mm pour le plexiglass.\r\n", spec: "Puissance: 40W\r\nSurface de travail: 914x609 mm \r\nEpaisseur maximale de la matière: 305mm\r\nSource laser: tube laser type CO2\r\nContrôles de vitesse et de puissance: ces deux paramètres sont ajustables en fonction du matériau (de 1% à 100%) .\r\n", slug: "decoupeuse-laser"},
{name: "Découpeuse vinyle", description: "Préparation à l'utilisation de la Roland CAMM-1 GX24\r\nInformations générales \r\n Envie de réaliser un tee shirt personnalisé ? Un sticker à l'effigie votre groupe préféré? Un masque pour la réalisation d'un circuit imprimé? Pour cela, il suffit simplement de venir avec votre fichier vectorisé (ne pas oublier de vectoriser les textes) type illustrator svg ou dxf.\r\n \r\nMatériaux utilisés:\r\n Cette machine permet de découper principalement du vinyle,vinyle réfléchissant, flex.\r\n", spec: "Largeurs de support acceptées: de 50 mm à 700 mm\r\nVitesse de découpe: 50 cm/sec\r\nRésolution mécanique: 0,0125 mm/pas\r\n", slug: "decoupeuse-vinyle"},
{name: "Shopbot / Grande fraiseuse", description: "La fraiseuse numérique ShopBot PRS standard\r\nInformations générales\r\nCette machine est un fraiseuse 3 axes idéale pour l'usinage de pièces de grandes dimensions. De la réalisation d'une chaise ou d'un meuble jusqu'à la construction d'une maison ou d'un assemblage immense, le ShopBot ouvre de nombreuses portes à votre imagination! \r\nMatériaux usinables\r\nLes principaux matériaux usinables sont le bois, le plastique, le laiton et bien d'autres.\r\nCette machine n'usine pas les métaux.\r\n", spec: "Surface maximale de travail: 2440x1220x150 (Z) mm\r\nLogiciel utilisé: Partworks 2D & 3D\r\nRésolution mécanique: 0,015 mm\r\nPrécision de la position: +/- 0,127mm\r\nFormats acceptés: DXF, STL \r\n", slug: "shopbot-grande-fraiseuse"},
{name: "Imprimante 3D", description: "L'utimaker est une imprimante 3D low cost utilisant une technologie FFF (Fused Filament Fabrication) avec extrusion thermoplastique.\r\nC'est une machine idéale pour réaliser rapidement des prototypes 3D dans des couleurs différentes.\r\n", spec: "Surface maximale de travail: 210x210x220mm \r\nRésolution méchanique: 0,02 mm \r\nPrécision de position: +/- 0,05 \r\nLogiciel utilisé: Cura\r\nFormats de fichier acceptés: STL \r\nMatériaux utilisés: PLA (en stock).", slug: "imprimante-3d"},
{name: "Petite Fraiseuse", description: "La fraiseuse numérique Roland Modela MDX-20\r\nInformations générales\r\nCette machine est utilisée pour l'usinage et le scannage 3D de précision. Elle permet principalement d'usiner des circuits imprimés et des moules de petite taille. Le faible diamètre des fraises utilisées (Ø 0,3 mm à Ø 6mm) induit que certains temps d'usinages peuvent êtres long (> 12h), c'est pourquoi cette fraiseuse peut être laissée en autonomie toute une nuit afin d'obtenir le plus précis des usinages au FabLab.\r\nMatériaux usinables:\r\nLes principaux matériaux usinables sont le bois, plâtre, résine, cire usinable, cuivre.\r\n", spec: "Taille du plateau X/Y : 220 mm x 160 mm\r\nVolume maximal de travail: 203,2 mm (X), 152,4 mm (Y), 60,5 mm (Z)\r\nPrécision usinage: 0,00625 mm\r\nPrécision scannage: réglable de 0,05 à 5 mm (axes X,Y) et 0,025 mm (axe Z)\r\nVitesse d'analyse (scannage): 4-15 mm/sec\r\n \r\n \r\nLogiciel utilisé pour le fraisage: Roland Modela player 4 \r\nLogiciel utilisé pour l'usinage de circuits imprimés: Cad.py (linux)\r\nFormats acceptés: STL,PNG 3D\r\nFormat d'exportation des données scannées: DXF, VRML, STL, 3DMF, IGES, Grayscale, Point Group et BMP\r\n", slug: "petite-fraiseuse"}
{name: "Laser cutter", description: "Préparation à l'utilisation de l'EPILOG Legend 36EXT\r\nInformations générales \r\n Pour la découpe, il suffit d'apporter votre fichier vectorisé type illustrator, svg ou dxf avec des \"lignes de coupe\" d'une épaisseur inférieur à 0,01 mm et la machine s'occupera du reste!\r\n La gravure est basée sur le spectre noir et blanc. Les nuances sont obtenues par différentes profondeurs de gravure correspondant aux niveaux de gris de votre image. Il suffit pour cela d'apporter une image scannée ou un fichier photo en noir et blanc pour pouvoir reproduire celle-ci sur votre support! \r\nQuels types de matériaux pouvons nous graver/découper?\r\n Du bois au tissu, du plexiglass au cuir, cette machine permet de découper et graver la plupart des matériaux sauf les métaux. La gravure est néanmoins possible sur les métaux recouverts d'une couche de peinture ou les aluminiums anodisés. \r\n Concernant l'épaisseur des matériaux découpés, il est préférable de ne pas dépasser 5 mm pour le bois et 6 mm pour le plexiglass.\r\n", spec: "Puissance: 40W\r\nSurface de travail: 914x609 mm \r\nEpaisseur maximale de la matière: 305mm\r\nSource laser: tube laser type CO2\r\nContrôles de vitesse et de puissance: ces deux paramètres sont ajustables en fonction du matériau (de 1% à 100%) .\r\n", slug: "decoupeuse-laser"},
{name: "Vinyl cutter", description: "Préparation à l'utilisation de la Roland CAMM-1 GX24\r\nInformations générales \r\n Envie de réaliser un tee shirt personnalisé ? Un sticker à l'effigie votre groupe préféré? Un masque pour la réalisation d'un circuit imprimé? Pour cela, il suffit simplement de venir avec votre fichier vectorisé (ne pas oublier de vectoriser les textes) type illustrator svg ou dxf.\r\n \r\nMatériaux utilisés:\r\n Cette machine permet de découper principalement du vinyle,vinyle réfléchissant, flex.\r\n", spec: "Largeurs de support acceptées: de 50 mm à 700 mm\r\nVitesse de découpe: 50 cm/sec\r\nRésolution mécanique: 0,0125 mm/pas\r\n", slug: "decoupeuse-vinyle"},
{name: "Shopbot / Milling", description: "La fraiseuse numérique ShopBot PRS standard\r\nInformations générales\r\nCette machine est un fraiseuse 3 axes idéale pour l'usinage de pièces de grandes dimensions. De la réalisation d'une chaise ou d'un meuble jusqu'à la construction d'une maison ou d'un assemblage immense, le ShopBot ouvre de nombreuses portes à votre imagination! \r\nMatériaux usinables\r\nLes principaux matériaux usinables sont le bois, le plastique, le laiton et bien d'autres.\r\nCette machine n'usine pas les métaux.\r\n", spec: "Surface maximale de travail: 2440x1220x150 (Z) mm\r\nLogiciel utilisé: Partworks 2D & 3D\r\nRésolution mécanique: 0,015 mm\r\nPrécision de la position: +/- 0,127mm\r\nFormats acceptés: DXF, STL \r\n", slug: "shopbot-grande-fraiseuse"},
{name: "3D Printer", description: "L'utimaker est une imprimante 3D low cost utilisant une technologie FFF (Fused Filament Fabrication) avec extrusion thermoplastique.\r\nC'est une machine idéale pour réaliser rapidement des prototypes 3D dans des couleurs différentes.\r\n", spec: "Surface maximale de travail: 210x210x220mm \r\nRésolution méchanique: 0,02 mm \r\nPrécision de position: +/- 0,05 \r\nLogiciel utilisé: Cura\r\nFormats de fichier acceptés: STL \r\nMatériaux utilisés: PLA (en stock).", slug: "imprimante-3d"},
{name: "Small milling machine", description: "La fraiseuse numérique Roland Modela MDX-20\r\nInformations générales\r\nCette machine est utilisée pour l'usinage et le scannage 3D de précision. Elle permet principalement d'usiner des circuits imprimés et des moules de petite taille. Le faible diamètre des fraises utilisées (Ø 0,3 mm à Ø 6mm) induit que certains temps d'usinages peuvent êtres long (> 12h), c'est pourquoi cette fraiseuse peut être laissée en autonomie toute une nuit afin d'obtenir le plus précis des usinages au FabLab.\r\nMatériaux usinables:\r\nLes principaux matériaux usinables sont le bois, plâtre, résine, cire usinable, cuivre.\r\n", spec: "Taille du plateau X/Y : 220 mm x 160 mm\r\nVolume maximal de travail: 203,2 mm (X), 152,4 mm (Y), 60,5 mm (Z)\r\nPrécision usinage: 0,00625 mm\r\nPrécision scannage: réglable de 0,05 à 5 mm (axes X,Y) et 0,025 mm (axe Z)\r\nVitesse d'analyse (scannage): 4-15 mm/sec\r\n \r\n \r\nLogiciel utilisé pour le fraisage: Roland Modela player 4 \r\nLogiciel utilisé pour l'usinage de circuits imprimés: Cad.py (linux)\r\nFormats acceptés: STL,PNG 3D\r\nFormat d'exportation des données scannées: DXF, VRML, STL, 3DMF, IGES, Grayscale, Point Group et BMP\r\n", slug: "petite-fraiseuse"}
])
end
if Category.count == 0
Category.create!([
{name: "Stage"},
{name: "Atelier"}
{name: "Course"},
{name: "Workshop"}
])
end

View File

@ -5,9 +5,9 @@
"use strict";
$.extend($.fn.select2.defaults, {
formatMatches: function (matches) { return matches + " résultats sont disponibles, utilisez les flèches haut et bas pour naviguer."; },
formatNoMatches: function () { return "Aucun résultat trouvé"; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "Merci de saisir " + n + " caractère" + (n == 1 ? "" : "s") + " de plus"; },
formatMatches: function (matches) { return matches + " results are available, use the up and down arrows to navigate."; },
formatNoMatches: function () { return "No result found"; },
formatInputTooShort: function (input, min) { var n = min - input.length; return "Thank You " + n + " character" + (n == 1 ? "" : "s") + " de plus"; },
formatInputTooLong: function (input, max) { var n = input.length - max; return "Merci de supprimer " + n + " caractère" + (n == 1 ? "" : "s"); },
formatSelectionTooBig: function (limit) { return "Vous pouvez seulement sélectionner " + limit + " élément" + (limit == 1 ? "" : "s"); },
formatLoadMore: function (pageNumber) { return "Chargement de résultats supplémentaires…"; },