locomotive_cms 0.0.2.7 → 0.0.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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."
|