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.
Files changed (93) hide show
  1. data/Gemfile +29 -27
  2. data/LICENSE +21 -0
  3. data/README.textile +23 -3
  4. data/app/controllers/admin/theme_assets_controller.rb +1 -0
  5. data/app/helpers/admin/base_helper.rb +1 -1
  6. data/app/helpers/admin/custom_fields_helper.rb +1 -1
  7. data/app/models/content_type.rb +1 -1
  8. data/app/models/extensions/page/tree.rb +3 -3
  9. data/app/models/layout.rb +2 -3
  10. data/app/models/theme_asset.rb +2 -2
  11. data/app/uploaders/asset_uploader.rb +2 -0
  12. data/app/uploaders/theme_asset_uploader.rb +1 -1
  13. data/app/views/admin/custom_fields/_custom_form.html.haml +14 -1
  14. data/app/views/admin/mailer/confirmation_instructions.html.haml +8 -0
  15. data/app/views/admin/mailer/reset_password_instructions.html.haml +12 -0
  16. data/app/views/admin/mailer/unlock_instructions.html.haml +10 -0
  17. data/app/views/admin/shared/_footer.html.haml +2 -5
  18. data/app/views/admin/shared/_head.html.haml +2 -2
  19. data/app/views/admin/theme_assets/_form.html.haml +2 -2
  20. data/app/views/admin/theme_assets/index.html.haml +9 -0
  21. data/config/initializers/devise.rb +1 -1
  22. data/config/locales/admin_ui_en.yml +7 -2
  23. data/config/locales/admin_ui_fr.yml +348 -0
  24. data/config/locales/default_en.yml +4 -0
  25. data/config/locales/default_fr.yml +172 -1
  26. data/config/locales/devise.en.yml +47 -21
  27. data/config/locales/devise.fr.yml +67 -0
  28. data/lib/locomotive.rb +3 -0
  29. data/lib/locomotive/carrierwave.rb +3 -0
  30. data/lib/locomotive/carrierwave/base.rb +15 -0
  31. data/{config/initializers/carrierwave.rb → lib/locomotive/carrierwave/patches.rb} +0 -1
  32. data/lib/locomotive/custom_fields.rb +18 -0
  33. data/lib/locomotive/engine.rb +1 -0
  34. data/lib/locomotive/httparty.rb +2 -0
  35. data/lib/locomotive/httparty/patches.rb +18 -0
  36. data/lib/locomotive/httparty/webservice.rb +24 -0
  37. data/lib/locomotive/liquid/drops/content.rb +3 -1
  38. data/lib/locomotive/liquid/filters/text.rb +16 -0
  39. data/lib/locomotive/liquid/tags/consume.rb +46 -0
  40. data/lib/locomotive/liquid/tags/nav.rb +60 -0
  41. data/lib/locomotive/liquid/tags/paginate.rb +2 -2
  42. data/lib/locomotive/liquid/tags/snippet.rb +2 -7
  43. data/lib/locomotive/mongoid.rb +2 -1
  44. data/{config/initializers/mongoid.rb → lib/locomotive/mongoid/patches.rb} +24 -0
  45. data/lib/locomotive/regexps.rb +1 -1
  46. data/public/images/admin/nocoffee.png +0 -0
  47. data/public/javascripts/admin/contents.js +3 -0
  48. data/public/javascripts/admin/locales/datepicker_fr.js +18 -0
  49. data/public/javascripts/admin/theme_assets.js +1 -1
  50. data/public/stylesheets/admin/formtastic_changes.css +14 -4
  51. data/public/stylesheets/admin/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  52. data/public/stylesheets/admin/jquery/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  53. data/public/stylesheets/admin/jquery/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  54. data/public/stylesheets/admin/jquery/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  55. data/public/stylesheets/admin/jquery/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  56. data/public/stylesheets/admin/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  57. data/public/stylesheets/admin/jquery/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  58. data/public/stylesheets/admin/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  59. data/public/stylesheets/admin/jquery/images/ui-icons_222222_256x240.png +0 -0
  60. data/public/stylesheets/admin/jquery/images/ui-icons_2e83ff_256x240.png +0 -0
  61. data/public/stylesheets/admin/jquery/images/ui-icons_454545_256x240.png +0 -0
  62. data/public/stylesheets/admin/jquery/images/ui-icons_888888_256x240.png +0 -0
  63. data/public/stylesheets/admin/jquery/images/ui-icons_cd0a0a_256x240.png +0 -0
  64. data/public/stylesheets/admin/jquery/ui.css +406 -0
  65. data/public/stylesheets/admin/layout.css +13 -9
  66. data/spec/factories.rb +1 -1
  67. data/spec/lib/locomotive/httparty/patches_spec.rb +19 -0
  68. data/spec/lib/locomotive/httparty/webservice_spec.rb +24 -0
  69. data/spec/lib/locomotive/liquid/filters/text_spec.rb +11 -0
  70. data/spec/lib/locomotive/liquid/tags/consume_spec.rb +40 -0
  71. data/spec/lib/locomotive/liquid/tags/nav_spec.rb +41 -0
  72. data/spec/models/asset_collections_spec.rb +5 -2
  73. data/spec/models/layout_spec.rb +2 -2
  74. data/spec/models/page_spec.rb +1 -1
  75. data/vendor/plugins/custom_fields/Gemfile +6 -5
  76. data/vendor/plugins/custom_fields/lib/custom_fields.rb +3 -0
  77. data/vendor/plugins/custom_fields/lib/custom_fields/field.rb +4 -2
  78. data/vendor/plugins/custom_fields/lib/custom_fields/types/category.rb +1 -1
  79. data/vendor/plugins/custom_fields/lib/custom_fields/types/date.rb +35 -0
  80. data/vendor/plugins/custom_fields/lib/custom_fields/types/default.rb +2 -2
  81. data/vendor/plugins/custom_fields/lib/custom_fields/types/file.rb +27 -0
  82. data/vendor/plugins/custom_fields/spec/fixtures/doc.txt +1 -0
  83. data/vendor/plugins/custom_fields/spec/integration/types/file_spec.rb +18 -0
  84. data/vendor/plugins/custom_fields/spec/spec_helper.rb +4 -8
  85. data/vendor/plugins/custom_fields/spec/support/carrierwave.rb +31 -0
  86. data/vendor/plugins/custom_fields/spec/support/mongoid.rb +6 -0
  87. data/vendor/plugins/custom_fields/spec/unit/types/date_spec.rb +59 -0
  88. data/vendor/plugins/custom_fields/spec/unit/types/file_spec.rb +23 -0
  89. metadata +82 -14
  90. data/app/views/devise/mailer/confirmation_instructions.html.haml +0 -8
  91. data/app/views/devise/mailer/reset_password_instructions.html.haml +0 -12
  92. data/app/views/devise/mailer/unlock_instructions.html.haml +0 -10
  93. data/lib/locomotive/patches.rb +0 -1
data/Gemfile CHANGED
@@ -1,41 +1,43 @@
1
- # Edit this Gemfile to bundle your application"s dependencies.
2
- source "http://gemcutter.org"
3
- source "http://gems.github.com"
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 "rails", "3.0.0.beta3"
5
+ gem 'rails', '3.0.0.beta3'
6
6
 
7
- gem "liquid"
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.2"
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"
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 "mongrel"
29
- gem "cgi_multipart_eof_fix"
30
- gem "fastthread"
31
- gem "mongrel_experimental"
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' #, :git => 'git://github.com/jnicklas/capybara.git'
38
- gem 'cucumber', '0.7.3'
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.
@@ -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. If we have to give only 4 main features to describe our application, there will be:
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
- * inline editing
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
- TODO
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
@@ -48,7 +48,7 @@ module Admin::BaseHelper
48
48
  end
49
49
 
50
50
  def nocoffee_tag
51
- link_to content_tag(:em, 'no') + 'Coffee', 'http://www.nocoffee.fr', :id => 'nocoffee'
51
+ link_to 'noCoffee', 'http://www.nocoffee.fr', :id => 'nocoffee'
52
52
  end
53
53
 
54
54
  end
@@ -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
@@ -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 => :site
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 = nil if p.parent_id.blank? }
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[parent_id_field] = nil
63
+ self.write_attribute parent_id_field, nil
64
64
  self[path_field] = []
65
65
  self[depth_field] = 0
66
66
  else
67
- self[parent_id_field] = parent._id
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
@@ -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 = attributes[1].strip.gsub("\"", '')
25
- name = nil if name.empty?
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?
@@ -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
@@ -45,6 +45,8 @@ class AssetUploader < CarrierWave::Uploader::Base
45
45
  end
46
46
  end
47
47
 
48
+ puts "content_type = #{value}"
49
+
48
50
  model.content_type = value
49
51
  end
50
52
 
@@ -26,7 +26,7 @@ class ThemeAssetUploader < AssetUploader
26
26
  end
27
27
 
28
28
  def extension_white_list
29
- %w(jpg jpeg gif png css js)
29
+ %w(jpg jpeg gif png css js swf flv)
30
30
  end
31
31
 
32
32
  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
+ &nbsp;/&nbsp;
30
+ = t('.delete_file')
31
+ = form.check_box :"remove_#{field._name}"
@@ -0,0 +1,8 @@
1
+ %p
2
+ = t('admin.mailer.common.hello')
3
+ = @resource.email
4
+ \!
5
+ %p
6
+ = t('.you_can_confirm_your_account_through_the_link_below')
7
+ %p
8
+ = link_to t('.confirm_my_account'), confirmation_url(@resource, :confirmation_token => @resource.confirmation_token)
@@ -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')
@@ -0,0 +1,10 @@
1
+ %p
2
+ = t('admin.mailer.common.hello')
3
+ = @resource.email
4
+ \!
5
+ %p
6
+ = t('.locked_account_message')
7
+ %p
8
+ = t('.unlock_account_instruction')
9
+ %p
10
+ = link_to t('.unlock_my_account'), unlock_url(@resource, :unlock_token => @resource.unlock_token)
@@ -1,5 +1,2 @@
1
- %p.tright
2
- = t('.developed_by')
3
- = nocoffee_tag
4
- = t('.powered_by')
5
- = link_to 'Ruby on Rails', 'http://www.rubyonrails.com', :id => 'powered-by'
1
+ %p.tcenter
2
+ = t('.who_is_behind', :development => nocoffee_tag)
@@ -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
- %li.more
29
- = link_to t('.picker_link'), admin_theme_assets_path, :id => 'asset-picker-link'
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')
@@ -25,3 +25,12 @@
25
25
  %ul.assets
26
26
  = render :partial => 'asset', :collection => @image_assets
27
27
  %li.clear
28
+
29
+
30
+ - if not @flash_assets.empty?
31
+ %br
32
+
33
+ %h3= t('.flash')
34
+ %ul.assets
35
+ = render :partial => 'asset', :collection => @flash_assets
36
+ %li.clear
@@ -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
- # config.scoped_views = true
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: "&rarr; Retour page de connexion"
90
+ email: "Votre email"
91
+ edit:
92
+ title: Changer mon mot de passe
93
+ link: "&rarr; 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}} &mdash; nouvel élément'
315
+ edit:
316
+ title: '{{type}} &mdash; é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."