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.
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."