locomotive_cms 0.0.2.7 → 0.0.2.8
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +29 -27
- data/LICENSE +21 -0
- data/README.textile +23 -3
- data/app/controllers/admin/theme_assets_controller.rb +1 -0
- data/app/helpers/admin/base_helper.rb +1 -1
- data/app/helpers/admin/custom_fields_helper.rb +1 -1
- data/app/models/content_type.rb +1 -1
- data/app/models/extensions/page/tree.rb +3 -3
- data/app/models/layout.rb +2 -3
- data/app/models/theme_asset.rb +2 -2
- data/app/uploaders/asset_uploader.rb +2 -0
- data/app/uploaders/theme_asset_uploader.rb +1 -1
- data/app/views/admin/custom_fields/_custom_form.html.haml +14 -1
- data/app/views/admin/mailer/confirmation_instructions.html.haml +8 -0
- data/app/views/admin/mailer/reset_password_instructions.html.haml +12 -0
- data/app/views/admin/mailer/unlock_instructions.html.haml +10 -0
- data/app/views/admin/shared/_footer.html.haml +2 -5
- data/app/views/admin/shared/_head.html.haml +2 -2
- data/app/views/admin/theme_assets/_form.html.haml +2 -2
- data/app/views/admin/theme_assets/index.html.haml +9 -0
- data/config/initializers/devise.rb +1 -1
- data/config/locales/admin_ui_en.yml +7 -2
- data/config/locales/admin_ui_fr.yml +348 -0
- data/config/locales/default_en.yml +4 -0
- data/config/locales/default_fr.yml +172 -1
- data/config/locales/devise.en.yml +47 -21
- data/config/locales/devise.fr.yml +67 -0
- data/lib/locomotive.rb +3 -0
- data/lib/locomotive/carrierwave.rb +3 -0
- data/lib/locomotive/carrierwave/base.rb +15 -0
- data/{config/initializers/carrierwave.rb → lib/locomotive/carrierwave/patches.rb} +0 -1
- data/lib/locomotive/custom_fields.rb +18 -0
- data/lib/locomotive/engine.rb +1 -0
- data/lib/locomotive/httparty.rb +2 -0
- data/lib/locomotive/httparty/patches.rb +18 -0
- data/lib/locomotive/httparty/webservice.rb +24 -0
- data/lib/locomotive/liquid/drops/content.rb +3 -1
- data/lib/locomotive/liquid/filters/text.rb +16 -0
- data/lib/locomotive/liquid/tags/consume.rb +46 -0
- data/lib/locomotive/liquid/tags/nav.rb +60 -0
- data/lib/locomotive/liquid/tags/paginate.rb +2 -2
- data/lib/locomotive/liquid/tags/snippet.rb +2 -7
- data/lib/locomotive/mongoid.rb +2 -1
- data/{config/initializers/mongoid.rb → lib/locomotive/mongoid/patches.rb} +24 -0
- data/lib/locomotive/regexps.rb +1 -1
- data/public/images/admin/nocoffee.png +0 -0
- data/public/javascripts/admin/contents.js +3 -0
- data/public/javascripts/admin/locales/datepicker_fr.js +18 -0
- data/public/javascripts/admin/theme_assets.js +1 -1
- data/public/stylesheets/admin/formtastic_changes.css +14 -4
- data/public/stylesheets/admin/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/public/stylesheets/admin/jquery/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/public/stylesheets/admin/jquery/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/public/stylesheets/admin/jquery/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/public/stylesheets/admin/jquery/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/public/stylesheets/admin/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/public/stylesheets/admin/jquery/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/public/stylesheets/admin/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/public/stylesheets/admin/jquery/images/ui-icons_222222_256x240.png +0 -0
- data/public/stylesheets/admin/jquery/images/ui-icons_2e83ff_256x240.png +0 -0
- data/public/stylesheets/admin/jquery/images/ui-icons_454545_256x240.png +0 -0
- data/public/stylesheets/admin/jquery/images/ui-icons_888888_256x240.png +0 -0
- data/public/stylesheets/admin/jquery/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/public/stylesheets/admin/jquery/ui.css +406 -0
- data/public/stylesheets/admin/layout.css +13 -9
- data/spec/factories.rb +1 -1
- data/spec/lib/locomotive/httparty/patches_spec.rb +19 -0
- data/spec/lib/locomotive/httparty/webservice_spec.rb +24 -0
- data/spec/lib/locomotive/liquid/filters/text_spec.rb +11 -0
- data/spec/lib/locomotive/liquid/tags/consume_spec.rb +40 -0
- data/spec/lib/locomotive/liquid/tags/nav_spec.rb +41 -0
- data/spec/models/asset_collections_spec.rb +5 -2
- data/spec/models/layout_spec.rb +2 -2
- data/spec/models/page_spec.rb +1 -1
- data/vendor/plugins/custom_fields/Gemfile +6 -5
- data/vendor/plugins/custom_fields/lib/custom_fields.rb +3 -0
- data/vendor/plugins/custom_fields/lib/custom_fields/field.rb +4 -2
- data/vendor/plugins/custom_fields/lib/custom_fields/types/category.rb +1 -1
- data/vendor/plugins/custom_fields/lib/custom_fields/types/date.rb +35 -0
- data/vendor/plugins/custom_fields/lib/custom_fields/types/default.rb +2 -2
- data/vendor/plugins/custom_fields/lib/custom_fields/types/file.rb +27 -0
- data/vendor/plugins/custom_fields/spec/fixtures/doc.txt +1 -0
- data/vendor/plugins/custom_fields/spec/integration/types/file_spec.rb +18 -0
- data/vendor/plugins/custom_fields/spec/spec_helper.rb +4 -8
- data/vendor/plugins/custom_fields/spec/support/carrierwave.rb +31 -0
- data/vendor/plugins/custom_fields/spec/support/mongoid.rb +6 -0
- data/vendor/plugins/custom_fields/spec/unit/types/date_spec.rb +59 -0
- data/vendor/plugins/custom_fields/spec/unit/types/file_spec.rb +23 -0
- metadata +82 -14
- data/app/views/devise/mailer/confirmation_instructions.html.haml +0 -8
- data/app/views/devise/mailer/reset_password_instructions.html.haml +0 -12
- data/app/views/devise/mailer/unlock_instructions.html.haml +0 -10
- data/lib/locomotive/patches.rb +0 -1
data/Gemfile
CHANGED
@@ -1,41 +1,43 @@
|
|
1
|
-
# Edit this Gemfile to bundle your application
|
2
|
-
source
|
3
|
-
source
|
1
|
+
# Edit this Gemfile to bundle your application's dependencies.
|
2
|
+
source 'http://gemcutter.org'
|
3
|
+
source 'http://gems.github.com'
|
4
4
|
|
5
|
-
gem
|
5
|
+
gem 'rails', '3.0.0.beta3'
|
6
6
|
|
7
|
-
gem
|
8
|
-
gem
|
9
|
-
gem
|
10
|
-
gem
|
11
|
-
gem
|
12
|
-
gem
|
13
|
-
gem
|
14
|
-
gem
|
15
|
-
gem
|
16
|
-
gem
|
17
|
-
gem
|
18
|
-
gem
|
19
|
-
gem
|
20
|
-
gem
|
21
|
-
gem
|
22
|
-
gem
|
23
|
-
gem
|
7
|
+
gem 'liquid', '2.0.0'
|
8
|
+
gem 'bson_ext', '>= 1.0.1'
|
9
|
+
gem 'mongo_ext'
|
10
|
+
gem 'mongoid', '2.0.0.beta6'
|
11
|
+
gem 'mongoid_acts_as_tree', '0.1.5'
|
12
|
+
gem 'mongo_session_store', '2.0.0.pre'
|
13
|
+
gem 'warden'
|
14
|
+
gem 'devise', '1.1.rc1'
|
15
|
+
gem 'haml', '3.0.1'
|
16
|
+
gem 'rmagick', '2.12.2'
|
17
|
+
gem 'aws'
|
18
|
+
gem 'jeweler'
|
19
|
+
gem 'mimetype-fu', :require => 'mimetype_fu'
|
20
|
+
gem 'formtastic-rails3', :require => 'formtastic'
|
21
|
+
gem 'carrierwave-rails3', :require => 'carrierwave'
|
22
|
+
gem 'actionmailer-with-request', :require => 'actionmailer_with_request'
|
23
|
+
gem 'heroku'
|
24
|
+
gem 'httparty', '0.6.0'
|
25
|
+
gem 'RedCloth'
|
24
26
|
|
25
27
|
# Development environment
|
26
28
|
group :development do
|
27
29
|
# Using mongrel instead of webrick (default server)
|
28
|
-
gem
|
29
|
-
gem
|
30
|
-
gem
|
31
|
-
gem
|
30
|
+
gem 'mongrel'
|
31
|
+
gem 'cgi_multipart_eof_fix'
|
32
|
+
gem 'fastthread'
|
33
|
+
gem 'mongrel_experimental'
|
32
34
|
end
|
33
35
|
|
34
36
|
group :test do
|
35
37
|
gem 'rspec-rails', '2.0.0.beta.11'
|
36
38
|
gem 'factory_girl', :git => 'git://github.com/thoughtbot/factory_girl.git', :branch => 'rails3'
|
37
|
-
gem 'capybara'
|
38
|
-
gem 'cucumber'
|
39
|
+
gem 'capybara'
|
40
|
+
gem 'cucumber'
|
39
41
|
gem 'cucumber-rails'
|
40
42
|
gem 'spork'
|
41
43
|
gem 'launchy'
|
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
== MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2010, Didier Lafforgue.
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.textile
CHANGED
@@ -1,20 +1,40 @@
|
|
1
1
|
h1. Locomotive CMS
|
2
2
|
|
3
|
-
Locomotive is a simple but powerful CMS based on liquid templates and mongodb database.
|
3
|
+
Locomotive is a simple but powerful CMS based on liquid templates and mongodb database. At my company ("NoCoffee":http://www.nocoffee.fr), we use it for our clients when they request a simple website.
|
4
|
+
|
5
|
+
If we have to give only 5 main features to describe our application, there will be:
|
4
6
|
|
5
7
|
* managing as many websites as you want with one application instance
|
6
8
|
* nice looking UI (see http://www.locomotiveapp.org for some screenshots)
|
7
9
|
* flexible content types
|
8
|
-
*
|
10
|
+
* playing smoothly with Heroku and MongoHQ
|
11
|
+
* inline editing (coming soon)
|
9
12
|
|
10
13
|
h2. Strategy / Development status
|
11
14
|
|
12
15
|
We already developed a fully functional prototype in Rails 2.3.2 with both active record / mongomapper and it worked quite well. We are even using it for some client websites.
|
13
16
|
Now, our goal is to port our prototype to Rails 3 and migrate from mongomapper to mongoid. Besides, we put a lot of efforts to make it as robust as we can by writing better specs than we wrote for the prototype at first.
|
14
17
|
|
18
|
+
h2. Gems
|
19
|
+
|
20
|
+
Here is a short list of main gems used in the application.
|
21
|
+
|
22
|
+
* Rails 3 (beta 3)
|
23
|
+
* Mongoid
|
24
|
+
* Liquid
|
25
|
+
* Devise
|
26
|
+
* Carrierwave
|
27
|
+
* Haml
|
28
|
+
|
15
29
|
h2. Installation
|
16
30
|
|
17
|
-
|
31
|
+
See the "official website":http://www.locomotiveapp.org
|
32
|
+
|
33
|
+
h2. Credits
|
34
|
+
|
35
|
+
Many thanks to "Sacha Greif":http://www.sachagreif.com for his great work on the user interface and the LocomotiveApp website front page.
|
36
|
+
|
37
|
+
"Rodrigo Alvarez":http://blog.codecaster.es/ for his plugin named Congo which gave us a good starting point and for his availability for (very late) tech discussions.
|
18
38
|
|
19
39
|
h2. Contact
|
20
40
|
|
@@ -9,6 +9,7 @@ module Admin
|
|
9
9
|
assets = current_site.theme_assets.all
|
10
10
|
@non_image_assets = assets.find_all { |a| a.stylesheet? || a.javascript? }
|
11
11
|
@image_assets = assets.find_all { |a| a.image? }
|
12
|
+
@flash_assets = assets.find_all { |a| a.movie? }
|
12
13
|
|
13
14
|
if request.xhr?
|
14
15
|
render :action => 'images', :layout => false
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Admin::CustomFieldsHelper
|
2
2
|
|
3
3
|
def options_for_field_kind(selected = nil)
|
4
|
-
options = %w{String Text Category Boolean}.map do |kind|
|
4
|
+
options = %w{String Text Category Boolean Date File}.map do |kind|
|
5
5
|
[t("admin.custom_fields.kind.#{kind.downcase}"), kind]
|
6
6
|
end
|
7
7
|
end
|
data/app/models/content_type.rb
CHANGED
@@ -21,7 +21,7 @@ class ContentType
|
|
21
21
|
|
22
22
|
## validations ##
|
23
23
|
validates_presence_of :site, :name, :slug
|
24
|
-
validates_uniqueness_of :slug, :scope => :
|
24
|
+
validates_uniqueness_of :slug, :scope => :site_id
|
25
25
|
validates_size_of :content_custom_fields, :minimum => 1, :message => :array_too_short
|
26
26
|
|
27
27
|
## behaviours ##
|
@@ -16,7 +16,7 @@ module Models
|
|
16
16
|
|
17
17
|
## callbacks ##
|
18
18
|
before_validate :reset_parent
|
19
|
-
before_save { |p| p.parent_id
|
19
|
+
before_save { |p| p.send(:write_attribute, :parent_id, nil) if p.parent_id.blank? }
|
20
20
|
before_save :change_parent
|
21
21
|
before_create { |p| p.send(:fix_position, false) }
|
22
22
|
before_create :add_to_list_bottom
|
@@ -60,11 +60,11 @@ module Models
|
|
60
60
|
|
61
61
|
def hacked_fix_position(perform_save = true)
|
62
62
|
if parent.nil?
|
63
|
-
self
|
63
|
+
self.write_attribute parent_id_field, nil
|
64
64
|
self[path_field] = []
|
65
65
|
self[depth_field] = 0
|
66
66
|
else
|
67
|
-
self
|
67
|
+
self.write_attribute parent_id_field, parent._id
|
68
68
|
self[path_field] = parent[path_field] + [parent._id]
|
69
69
|
self[depth_field] = parent[depth_field] + 1
|
70
70
|
self.save if perform_save
|
data/app/models/layout.rb
CHANGED
@@ -21,9 +21,8 @@ class Layout < LiquidTemplate
|
|
21
21
|
|
22
22
|
self.value.scan(Locomotive::Regexps::CONTENT_FOR).each do |attributes|
|
23
23
|
slug = attributes[0].strip.downcase
|
24
|
-
name =
|
25
|
-
name =
|
26
|
-
name ||= I18n.t('attributes.defaults.page_parts.name') if slug == 'layout'
|
24
|
+
name = slug.humanize
|
25
|
+
name = I18n.t('attributes.defaults.page_parts.name') if slug == 'layout'
|
27
26
|
|
28
27
|
if part = self.parts.detect { |p| p.slug == slug }
|
29
28
|
part.name = name if name.present?
|
data/app/models/theme_asset.rb
CHANGED
@@ -33,7 +33,7 @@ class ThemeAsset
|
|
33
33
|
|
34
34
|
## methods ##
|
35
35
|
|
36
|
-
%w{image stylesheet javascript}.each do |type|
|
36
|
+
%w{movie image stylesheet javascript}.each do |type|
|
37
37
|
define_method("#{type}?") do
|
38
38
|
self.content_type == type
|
39
39
|
end
|
@@ -53,7 +53,7 @@ class ThemeAsset
|
|
53
53
|
end
|
54
54
|
|
55
55
|
def performing_plain_text?
|
56
|
-
return true if !self.new_record? && !self.image? && self.errors.empty?
|
56
|
+
return true if !self.new_record? && !self.image? && !self.movie? && self.errors.empty?
|
57
57
|
|
58
58
|
!(self.performing_plain_text.blank? || self.performing_plain_text == 'false' || self.performing_plain_text == false)
|
59
59
|
end
|
@@ -15,4 +15,17 @@
|
|
15
15
|
%span= t('.edit_categories')
|
16
16
|
- elsif field.boolean?
|
17
17
|
= form.custom_input field._alias.to_sym, :label => field.label, :hint => field.hint, :css => 'toggle' do
|
18
|
-
= form.check_box field._alias.to_sym
|
18
|
+
= form.check_box field._alias.to_sym
|
19
|
+
- elsif field.date?
|
20
|
+
= form.input field._alias.to_sym, :label => field.label, :hint => field.hint, :input_html => { :class => 'date' }
|
21
|
+
- elsif field.file?
|
22
|
+
= form.custom_input field._alias.to_sym, :label => field.label, :hint => field.hint, :css => 'file' do
|
23
|
+
= form.file_field field._name.to_sym
|
24
|
+
- if form.object.send(:"#{field._name}?")
|
25
|
+
%p
|
26
|
+
%strong
|
27
|
+
= link_to File.basename(form.object.send(field._name).url), form.object.send(field._name).url
|
28
|
+
%span
|
29
|
+
/
|
30
|
+
= t('.delete_file')
|
31
|
+
= form.check_box :"remove_#{field._name}"
|
@@ -0,0 +1,12 @@
|
|
1
|
+
%p
|
2
|
+
= t('admin.mailer.common.hello')
|
3
|
+
= @resource.email
|
4
|
+
\!
|
5
|
+
%p
|
6
|
+
= t('.reset_password_instruction')
|
7
|
+
%p
|
8
|
+
= link_to t('.change_my_password'), edit_admin_password_url(@resource, :reset_password_token => @resource.reset_password_token)
|
9
|
+
%p
|
10
|
+
= t('.wrong_request_instruction')
|
11
|
+
%p
|
12
|
+
= t('.unchange_password_message')
|
@@ -8,9 +8,9 @@
|
|
8
8
|
/ [if IE]
|
9
9
|
= stylesheet_link_tag 'admin/blueprint/ie', :media => 'screen'
|
10
10
|
|
11
|
-
= stylesheet_link_tag 'admin/layout', 'admin/plugins/toggle', 'admin/menu', 'admin/buttons', 'admin/formtastic', 'admin/formtastic_changes', 'admin/application', :media => 'screen', :cache => Rails.env.production? && !Locomotive.heroku?
|
11
|
+
= stylesheet_link_tag 'admin/layout', 'admin/jquery/ui', 'admin/plugins/toggle', 'admin/menu', 'admin/buttons', 'admin/formtastic', 'admin/formtastic_changes', 'admin/application', :media => 'screen', :cache => Rails.env.production? && !Locomotive.heroku?
|
12
12
|
|
13
|
-
= javascript_include_tag 'admin/jquery', 'admin/jquery.ui', 'admin/rails', 'admin/utils', 'admin/plugins/toggle', 'admin/plugins/growl', 'admin/plugins/cookie', 'admin/application', :cache => Rails.env.production? && !Locomotive.heroku?
|
13
|
+
= javascript_include_tag 'admin/jquery', 'admin/jquery.ui', 'admin/rails', 'admin/utils', 'admin/plugins/toggle', 'admin/plugins/growl', 'admin/plugins/cookie', 'admin/application', 'admin/locales/datepicker_fr', :cache => Rails.env.production? && !Locomotive.heroku?
|
14
14
|
|
15
15
|
%script{ :type => 'text/javascript' }
|
16
16
|
= find_and_preserve(growl_message)
|
@@ -25,8 +25,8 @@
|
|
25
25
|
= f.custom_input :plain_text, :css => 'full', :with_label => false do
|
26
26
|
%code{ :class => (@asset.size && @asset.size > 40000 ? 'nude' : (@asset.content_type || 'stylesheet')) }
|
27
27
|
= f.text_area :plain_text
|
28
|
-
|
29
|
-
|
28
|
+
.more
|
29
|
+
= link_to t('.picker_link'), admin_theme_assets_path, :id => 'asset-picker-link'
|
30
30
|
|
31
31
|
%span.alt
|
32
32
|
= t('admin.theme_assets.form.choose_file')
|
@@ -119,7 +119,7 @@ Devise.setup do |config|
|
|
119
119
|
# Turn scoped views on. Before rendering "sessions/new", it will first check for
|
120
120
|
# "sessions/users/new". It's turned off by default because it's slower if you
|
121
121
|
# are using only default views.
|
122
|
-
|
122
|
+
config.scoped_views = true
|
123
123
|
|
124
124
|
# By default, devise detects the role accessed based on the url. So whenever
|
125
125
|
# accessing "/users/sign_in", it knows you are accessing an User. This makes
|
@@ -40,6 +40,8 @@ en:
|
|
40
40
|
text: Text
|
41
41
|
category: Select
|
42
42
|
boolean: Checkbox
|
43
|
+
date: Date
|
44
|
+
file: File
|
43
45
|
text_formatting:
|
44
46
|
none: None
|
45
47
|
html: HTML
|
@@ -51,6 +53,7 @@ en:
|
|
51
53
|
collection_label: List of options
|
52
54
|
custom_form:
|
53
55
|
edit_categories: Edit options
|
56
|
+
delete_file: Delete file
|
54
57
|
|
55
58
|
sessions:
|
56
59
|
new:
|
@@ -172,6 +175,7 @@ en:
|
|
172
175
|
accounts:
|
173
176
|
new:
|
174
177
|
title: New account
|
178
|
+
help: "Fill in the form below to add a new account."
|
175
179
|
messages:
|
176
180
|
successful_create: "Account was successfully created."
|
177
181
|
failed_create: "Account was not created."
|
@@ -207,6 +211,7 @@ en:
|
|
207
211
|
choose_plain_text: Choose plain text
|
208
212
|
images:
|
209
213
|
title: Listing images
|
214
|
+
no_items: "There are no files for now."
|
210
215
|
messages:
|
211
216
|
successful_create: "File was successfully created."
|
212
217
|
successful_update: "File was successfully updated."
|
@@ -325,13 +330,13 @@ en:
|
|
325
330
|
|
326
331
|
hints:
|
327
332
|
page:
|
328
|
-
keywords: "Meta keywords used within the head tag of the page. They are separeted by an empty space. Required for SEO."
|
329
|
-
description: "Meta description used within the head tag of the page. Required for SEO."
|
330
333
|
published: "Only authenticated accounts can view unpublished pages."
|
331
334
|
cache_expires_in: "Cache the page for better performance. Pressing shift-reload in the browser will regenerate the page."
|
332
335
|
snippet:
|
333
336
|
slug: "You need to know it in order to insert the snippet inside a page or a layout"
|
334
337
|
site:
|
338
|
+
meta_keywords: "Meta keywords used within the head tag of the page. They are separeted by an empty space. Required for SEO."
|
339
|
+
meta_description: "Meta description used within the head tag of the page. Required for SEO."
|
335
340
|
domain_name: "ex: locomotiveapp.org"
|
336
341
|
theme_asset:
|
337
342
|
slug: "You do not need to add the extension file (.css or .js)"
|
@@ -19,3 +19,351 @@ fr:
|
|
19
19
|
login: Se connecter
|
20
20
|
send_password: Envoyer
|
21
21
|
change_password: Changer
|
22
|
+
|
23
|
+
fr:
|
24
|
+
admin:
|
25
|
+
buttons:
|
26
|
+
login: Se connecter
|
27
|
+
send_password: Envoyer
|
28
|
+
change_password: Mettre à jour
|
29
|
+
new_item: "+ ajouter"
|
30
|
+
|
31
|
+
messages:
|
32
|
+
confirm: "Êtes-vous sûr(e) ?"
|
33
|
+
|
34
|
+
shared:
|
35
|
+
header:
|
36
|
+
welcome: Bonjour, {{name}}
|
37
|
+
see: Voir le site web
|
38
|
+
logout: Se déconnecter
|
39
|
+
menu:
|
40
|
+
contents: Contenu
|
41
|
+
assets: Média
|
42
|
+
settings: Paramètres
|
43
|
+
pages: Pages
|
44
|
+
layouts: Gabarits
|
45
|
+
snippets: Snippets
|
46
|
+
account: Mon compte
|
47
|
+
site: Site
|
48
|
+
theme_assets: Fichiers Thème
|
49
|
+
footer:
|
50
|
+
who_is_behind: "Service développé par {{development}} et désigné par <a href=\"http://www.sachagreif.com\">Sacha Greif</a>"
|
51
|
+
form_actions:
|
52
|
+
back: Retour sans sauvegarder
|
53
|
+
create: Créer
|
54
|
+
update: Mettre à jour
|
55
|
+
|
56
|
+
custom_fields:
|
57
|
+
edit:
|
58
|
+
title: Editer champ personnalisé
|
59
|
+
kind:
|
60
|
+
string: Texte
|
61
|
+
text: Zone de texte
|
62
|
+
category: Liste déroulante
|
63
|
+
boolean: Case à cocher
|
64
|
+
date: Date
|
65
|
+
file: Fichier
|
66
|
+
text_formatting:
|
67
|
+
none: Aucun
|
68
|
+
html: HTML
|
69
|
+
edit_field:
|
70
|
+
title: Editer champ
|
71
|
+
edit_category:
|
72
|
+
title: Editer options
|
73
|
+
help: Gèrer la liste des options de votre liste déroulante
|
74
|
+
collection_label: List des options
|
75
|
+
custom_form:
|
76
|
+
edit_categories: Editer options
|
77
|
+
delete_file: Supprimer fichier
|
78
|
+
|
79
|
+
sessions:
|
80
|
+
new:
|
81
|
+
title: Connexion
|
82
|
+
link: "J'ai oublié mon mot de passe"
|
83
|
+
email: "Email"
|
84
|
+
password: "Mot de passe"
|
85
|
+
|
86
|
+
passwords:
|
87
|
+
new:
|
88
|
+
title: "Mot de passe oublié"
|
89
|
+
link: "→ Retour page de connexion"
|
90
|
+
email: "Votre email"
|
91
|
+
edit:
|
92
|
+
title: Changer mon mot de passe
|
93
|
+
link: "→ Retour page de connexion"
|
94
|
+
password: "Votre email"
|
95
|
+
password_confirmation: "Confirmation nouveau mot de passe"
|
96
|
+
|
97
|
+
pages:
|
98
|
+
index:
|
99
|
+
title: Liste des pages
|
100
|
+
help: "Les pages sont organisées sous forme d'un arbre. Vous pouvez classes les pages ainsi que les dossiers."
|
101
|
+
no_items: "Il n'existe pas de page. Vous pouvez commencer par créer une <a href='{{url}}'>ici</a>."
|
102
|
+
new: nouvelle page
|
103
|
+
lastest_items: Dernières pages
|
104
|
+
new:
|
105
|
+
title: Nouvelle page
|
106
|
+
help: "Remplissez le formulaire ci-dessous pour créer votre page. Attention, par défaut, la page n'est pas publiée."
|
107
|
+
page:
|
108
|
+
updated_at: Mise à jour le
|
109
|
+
edit:
|
110
|
+
show: voir
|
111
|
+
help: "Le titre de la page est modifiable en cliquant dessus."
|
112
|
+
ask_for_title: "Veuillez entrer le nouveau titre"
|
113
|
+
messages:
|
114
|
+
successful_create: "La page a été créée avec succès."
|
115
|
+
successful_update: "La page a été mise à jour avec succès."
|
116
|
+
successful_destroy: "La page a été supprimée avec succès."
|
117
|
+
successful_sort: "Les pages ont été ordonnées avec succès."
|
118
|
+
failed_create: "La page n'a pas été créée."
|
119
|
+
failed_update: "La page n'a pas été mise à jour."
|
120
|
+
form:
|
121
|
+
expiration:
|
122
|
+
never: Jamais
|
123
|
+
hour: 1 heure
|
124
|
+
day: 1 jour
|
125
|
+
week: 1 semaine
|
126
|
+
month: 1 mois
|
127
|
+
|
128
|
+
layouts:
|
129
|
+
index:
|
130
|
+
title: Liste gabarits
|
131
|
+
help: "Les gabarits permettent de définir le squelette d'une page (1, 2 ou plusieurs colonnes)."
|
132
|
+
no_items: "Il n'existe pas de gabarit. Vous pouvez commencer par créer un <a href='{{url}}'>ici</a>."
|
133
|
+
new: nouveau gabarit
|
134
|
+
new:
|
135
|
+
title: Nouveau gabarit
|
136
|
+
help: "Remplissez le formulaire ci-dessous pour créer votre gabarit."
|
137
|
+
edit:
|
138
|
+
title: Edition gabarit
|
139
|
+
help: "Remplissez le formulaire ci-dessous pour mettre à jour votre gabarit."
|
140
|
+
new: nouveau gabarit
|
141
|
+
layout:
|
142
|
+
updated_at: Mis à jour le
|
143
|
+
messages:
|
144
|
+
successful_create: "Le gabarit a été crée avec succès."
|
145
|
+
successful_update: "Le gabarit a été mis à jour avec succès."
|
146
|
+
successful_destroy: "Le gabarit a été supprimé avec succès."
|
147
|
+
failed_create: "Le gabarit n'a pas été crée."
|
148
|
+
failed_update: "Le gabarit n'a pas été mis à jour."
|
149
|
+
|
150
|
+
snippets:
|
151
|
+
index:
|
152
|
+
title: Liste des snippets
|
153
|
+
help: "Les snippets sont des bouts de code HTML qui se répetent à travers le site (tel que le bas-de-page par exemple)."
|
154
|
+
no_items: "Il n'existe pas de snippet. Vous pouvez commencer par créer un <a href='{{url}}'>ici</a>."
|
155
|
+
new: nouveau snippet
|
156
|
+
new:
|
157
|
+
title: "Nouveau snippet"
|
158
|
+
help: "Remplissez le formulaire ci-dessous pour créer votre snippet."
|
159
|
+
edit:
|
160
|
+
title: Edition snippet
|
161
|
+
help: "Remplissez le formulaire ci-dessous pour mettre à jour votre snippet."
|
162
|
+
snippet:
|
163
|
+
updated_at: Mis à jour le
|
164
|
+
messages:
|
165
|
+
successful_create: "Le snippet a été crée avec succès."
|
166
|
+
successful_update: "Le snippet a été mis à jour avec succès."
|
167
|
+
successful_destroy: "Le snippet a été supprimé avec succès."
|
168
|
+
failed_create: "Le snippet n'a pas été crée."
|
169
|
+
failed_update: "Le snippet n'a pas été mis à jour."
|
170
|
+
|
171
|
+
sites:
|
172
|
+
new:
|
173
|
+
title: "Nouveau site"
|
174
|
+
help: "Remplissez le formulaire ci-dessous pour créer votre nouveau site."
|
175
|
+
messages:
|
176
|
+
successful_create: "Le site a été crée avec succès."
|
177
|
+
failed_create: "Le site n'a pas été crée."
|
178
|
+
|
179
|
+
current_sites:
|
180
|
+
edit:
|
181
|
+
new_membership: ajouter compte
|
182
|
+
help: "Le nom du site est modifiable en cliquant dessus."
|
183
|
+
ask_for_name: "Veuillez entrer le nouveau nom"
|
184
|
+
messages:
|
185
|
+
successful_update: "Le site a été mis à jour avec succès."
|
186
|
+
failed_update: "Le site n'a pas été mis à jour."
|
187
|
+
|
188
|
+
memberships:
|
189
|
+
new:
|
190
|
+
title: "Ajout d'un compte"
|
191
|
+
help: "Donnez l'adresse email du compte à ajouter. S'il n'existe pas, vous serez redirigé(e) vers le formulaire de création d'un compte."
|
192
|
+
messages:
|
193
|
+
successful_create: "Le compte a été ajouté avec succès."
|
194
|
+
failed_create: "Le compte n'a pas été ajouté."
|
195
|
+
|
196
|
+
accounts:
|
197
|
+
new:
|
198
|
+
title: Nouveau compte
|
199
|
+
help: "Remplissez le formulaire ci-dessous pour ajouter un nouveau compte."
|
200
|
+
messages:
|
201
|
+
successful_create: "Le compte a été crée avec succès."
|
202
|
+
failed_create: "Le compte n'a pas été crée."
|
203
|
+
|
204
|
+
my_accounts:
|
205
|
+
edit:
|
206
|
+
help: "Votre nom est modifiable en cliquant dessus."
|
207
|
+
new_site: nouveau site
|
208
|
+
en: en Anglais
|
209
|
+
fr: en Français
|
210
|
+
ask_for_name: "Veuillez entrer le nouveau nom"
|
211
|
+
messages:
|
212
|
+
successful_update: "Mon compte a été mis à jour avec succès."
|
213
|
+
failed_update: "compte site n'a pas été mis à jour."
|
214
|
+
|
215
|
+
theme_assets:
|
216
|
+
index:
|
217
|
+
title: Liste des fichiers du thème
|
218
|
+
help: "Les fichiers du thème sont utilisés par les gabarits et les snippets. Si vous avez besoin d'une galerie d'images, la section Média est plus adéquate."
|
219
|
+
new: nouveau fichier
|
220
|
+
css_and_js: Style et javascript
|
221
|
+
images: Images
|
222
|
+
no_items: "Il n'existe pas de fichiers. Vous pouvez commencer par créer un <a href='{{url}}'>ici</a>."
|
223
|
+
new:
|
224
|
+
title: Nouveau fichier
|
225
|
+
help: "Vous avez le choix de soit uploader n'importe quel fichier ou bien soit de copier/coller du code css ou javascript."
|
226
|
+
edit:
|
227
|
+
title: "Edition {{file}}"
|
228
|
+
help: "Vous pouvez utiliser ce fichier grâce a l'url suivante: {{url}}"
|
229
|
+
form:
|
230
|
+
picker_link: Insérer un fichier dans le code
|
231
|
+
choose_file: Choisir fichier
|
232
|
+
choose_plain_text: Passer en mode texte
|
233
|
+
images:
|
234
|
+
title: Liste des images
|
235
|
+
no_items: "Il n'y a pas d'images."
|
236
|
+
messages:
|
237
|
+
successful_create: "Le fichier a été crée avec succès."
|
238
|
+
successful_update: "Le fichier a été mis à jour avec succès."
|
239
|
+
successful_destroy: "Le fichier a été supprimé avec succès."
|
240
|
+
failed_create: "Le fichier n'a pas été crée."
|
241
|
+
failed_update: "Le fichier n'a pas été mis à jour."
|
242
|
+
|
243
|
+
asset_collections:
|
244
|
+
index:
|
245
|
+
title: Collections
|
246
|
+
help: "Le nom de la collection est modifiable en cliquant dessus. Vous pouvez personnaliser une collection en ajoutant d'autres champs à vos médias."
|
247
|
+
new: nouvelle collection
|
248
|
+
no_items: "Il n'existe pas de collections. Vous pouvez commencer par créer une <a href='{{url}}'>ici</a>."
|
249
|
+
new:
|
250
|
+
title: Nouvelle collection
|
251
|
+
help: "Pour le moment, veuillez rentrer le nom. Les autres options viendront dans le formulaire suivant."
|
252
|
+
edit:
|
253
|
+
help: "Le nom de la collection est modifiable en cliquant dessus. Vous pouvez personnaliser une collection en ajoutant d'autres champs à vos médias."
|
254
|
+
add_asset: ajouter média
|
255
|
+
destroy: supprimer collection
|
256
|
+
no_items: "Il n'existe pas de médias. Vous pouvez commencer par créer un <a href='{{url}}'>ici</a>."
|
257
|
+
ask_for_name: "Veuillez entrer le nouveau nom"
|
258
|
+
messages:
|
259
|
+
successful_create: "La collection a été créée avec succès."
|
260
|
+
successful_update: "La collection a été mise à jour avec succès."
|
261
|
+
successful_destroy: "La collection a été supprimée avec succès."
|
262
|
+
failed_create: "La collection n'a pas été créée."
|
263
|
+
failed_update: "La collection n'a pas été mise à jour."
|
264
|
+
|
265
|
+
assets:
|
266
|
+
new:
|
267
|
+
title: "Nouveau média"
|
268
|
+
help: "Remplissez le formulaire ci-dessous pour créer votre média."
|
269
|
+
edit:
|
270
|
+
title: "Edition média"
|
271
|
+
help: "Remplissez le formulaire ci-dessous pour mettre à jour votre média."
|
272
|
+
messages:
|
273
|
+
successful_create: "Le média a été crée avec succès."
|
274
|
+
successful_update: "Le média a été mis à jour avec succès."
|
275
|
+
successful_destroy: "Le média a été supprimé avec succès."
|
276
|
+
failed_create: "Le média n'a pas été crée."
|
277
|
+
failed_update: "Le média n'a pas été mis à jour."
|
278
|
+
|
279
|
+
content_types:
|
280
|
+
index:
|
281
|
+
new: nouveau modèle
|
282
|
+
new:
|
283
|
+
title: Nouveau modèle
|
284
|
+
help: "Créer votre propre modèle de données (Projets, Personnes, ...etc). Votre modèle doit au moins comporter un champ. Le premier champ sera obligatoire lorsque vous ajouterez un élément de ce type-là."
|
285
|
+
edit:
|
286
|
+
title: Edition modèle
|
287
|
+
help: "Votre modèle doit au moins comporter un champ. Le premier champ sera obligatoire lorsque vous ajouterez un élément de ce type-là."
|
288
|
+
show_items: voir éléments
|
289
|
+
new_item: nouvel élément
|
290
|
+
form:
|
291
|
+
order_by:
|
292
|
+
updated_at: 'Par date de mise à jour'
|
293
|
+
position_in_list: Manuellement
|
294
|
+
messages:
|
295
|
+
successful_create: "Le modèle a été crée avec succès."
|
296
|
+
successful_update: "Le modèle a été mis à jour avec succès."
|
297
|
+
successful_destroy: "Le modèle a été supprimé avec succès."
|
298
|
+
failed_create: "Le modèle n'a pas été crée."
|
299
|
+
failed_update: "Le modèle n'a pas été mis à jour."
|
300
|
+
|
301
|
+
contents:
|
302
|
+
index:
|
303
|
+
title: 'Liste des "{{type}}"'
|
304
|
+
edit: éditer modèle
|
305
|
+
destroy: supprimer modèle
|
306
|
+
download: télécharger éléments
|
307
|
+
new: nouvel élément
|
308
|
+
category_noname: "Pas de nom"
|
309
|
+
lastest_items: "Eléments récents"
|
310
|
+
updated_at: "Mis à jour le"
|
311
|
+
list:
|
312
|
+
no_items: "Il n'existe pas d'éléments. Vous pouvez commencer par créer un <a href='{{url}}'>ici</a>"
|
313
|
+
new:
|
314
|
+
title: '{{type}} — nouvel élément'
|
315
|
+
edit:
|
316
|
+
title: '{{type}} — édition élément'
|
317
|
+
messages:
|
318
|
+
successful_create: "L'élément a été crée avec succès."
|
319
|
+
successful_update: "L'élément a été mis à jour avec succès."
|
320
|
+
successful_destroy: "L'élément a été supprimé avec succès."
|
321
|
+
failed_create: "L'élément a été crée avec succès."
|
322
|
+
failed_update: "L'élément a été supprimé avec succès."
|
323
|
+
|
324
|
+
formtastic:
|
325
|
+
titles:
|
326
|
+
information: Informations générales
|
327
|
+
meta: SEO Metadata
|
328
|
+
code: Code
|
329
|
+
credentials: Informations de connexion
|
330
|
+
language: Langue
|
331
|
+
sites: Sites
|
332
|
+
access_points: Points d'accès
|
333
|
+
memberships: Comptes
|
334
|
+
membership_email: Email compte
|
335
|
+
file: Fichier
|
336
|
+
preview: Aperçu
|
337
|
+
options: Options avancées
|
338
|
+
custom_fields: Champs personnalisés
|
339
|
+
other_fields: Autres informations
|
340
|
+
presentation: Présentation
|
341
|
+
attributes: Propriétés
|
342
|
+
labels:
|
343
|
+
theme_asset:
|
344
|
+
new:
|
345
|
+
source: Fichier
|
346
|
+
edit:
|
347
|
+
source: Nouveau fichier
|
348
|
+
custom_fields:
|
349
|
+
field:
|
350
|
+
_alias: Alias
|
351
|
+
|
352
|
+
hints:
|
353
|
+
page:
|
354
|
+
published: "Seuls les administrateurs authentifiés peuvent voir une page non publiée."
|
355
|
+
cache_expires_in: "Cache la page pour de meilleure performance. Presser la touche SHIFT et le bouton \"Rafraichir\" dans le navigateur rechargera la page."
|
356
|
+
snippet:
|
357
|
+
slug: "Utilisé pour insérer le snippet dans une page ou un gabarit."
|
358
|
+
site:
|
359
|
+
meta_keywords: "Mots-clés utilisés à l'intérieur de la balise HEAD. Ils sont séparés par un espace. Requis pour un meilleur référencement."
|
360
|
+
meta_description: "Description utilisée à l'intérieur de la balise HEAD. Requis pour un meilleur référencement."
|
361
|
+
domain_name: "ex: locomotiveapp.org"
|
362
|
+
theme_asset:
|
363
|
+
slug: "Vous n'avez pas besoin de mettre l'extension du fichier (.css ou .js)"
|
364
|
+
edit:
|
365
|
+
source: "Vous pouvez le remplacer par un fichier avec la meme extension."
|
366
|
+
custom_fields:
|
367
|
+
field:
|
368
|
+
_alias: "Champ utilisable dans les templates liquid"
|
369
|
+
hint: "Texte affiché dans le formulaire de l'élément juste en dessous du champ."
|