ecm_cms2 1.0.0

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 (72) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +66 -0
  4. data/Rakefile +25 -0
  5. data/app/assets/javascripts/ecm_cms.js.coffee +0 -0
  6. data/app/assets/stylesheets/ecm_cms.css.less +11 -0
  7. data/app/controllers/ecm/cms/page_controller.rb +24 -0
  8. data/app/helpers/ecm/cms_helper.rb +46 -0
  9. data/app/models/concerns/ecm/cms/navigation_item/properties.rb +29 -0
  10. data/app/models/ecm/cms/content_box.rb +16 -0
  11. data/app/models/ecm/cms/folder.rb +20 -0
  12. data/app/models/ecm/cms/navigation.rb +18 -0
  13. data/app/models/ecm/cms/navigation_item.rb +88 -0
  14. data/app/models/ecm/cms/page/content_block.rb +24 -0
  15. data/app/models/ecm/cms/page.rb +33 -0
  16. data/app/models/ecm/cms/partial.rb +16 -0
  17. data/app/models/ecm/cms/template.rb +19 -0
  18. data/config/locales/ecm.cms.content_box.de.yml +15 -0
  19. data/config/locales/ecm.cms.content_box.en.yml +15 -0
  20. data/config/locales/ecm.cms.de.yml +17 -0
  21. data/config/locales/ecm.cms.en.yml +17 -0
  22. data/config/locales/ecm.cms.navigation.de.yml +15 -0
  23. data/config/locales/ecm.cms.navigation.en.yml +15 -0
  24. data/config/locales/ecm.cms.navigation_item.de.yml +25 -0
  25. data/config/locales/ecm.cms.navigation_item.en.yml +25 -0
  26. data/config/locales/ecm.cms.page.content_block.de.yml +14 -0
  27. data/config/locales/ecm.cms.page.content_block.en.yml +14 -0
  28. data/config/locales/ecm.cms.page.de.yml +25 -0
  29. data/config/locales/ecm.cms.page.en.yml +25 -0
  30. data/config/locales/ecm.cms.partial.de.yml +21 -0
  31. data/config/locales/ecm.cms.partial.en.yml +21 -0
  32. data/config/locales/ecm.cms.template.de.yml +21 -0
  33. data/config/locales/ecm.cms.template.en.yml +21 -0
  34. data/config/routes.rb +2 -0
  35. data/db/migrate/001_create_ecm_cms_folders.rb +21 -0
  36. data/db/migrate/002_create_ecm_cms_pages.rb +19 -0
  37. data/db/migrate/003_create_ecm_cms_templates.rb +18 -0
  38. data/db/migrate/004_create_ecm_cms_partials.rb +19 -0
  39. data/db/migrate/005_create_ecm_cms_navigations.rb +13 -0
  40. data/db/migrate/006_create_ecm_cms_navigation_items.rb +29 -0
  41. data/db/migrate/007_create_ecm_cms_content_boxes.rb +9 -0
  42. data/db/migrate/008_create_ecm_cms_page_content_blocks.rb +15 -0
  43. data/lib/ecm/cms/action_view/template/handlers/textile.rb +18 -0
  44. data/lib/ecm/cms/action_view/template_patch.rb +19 -0
  45. data/lib/ecm/cms/action_view/template_renderer_patch.rb +47 -0
  46. data/lib/ecm/cms/active_admin/ecm_cms_content_box.rb +33 -0
  47. data/lib/ecm/cms/active_admin/ecm_cms_navigation_items.rb +68 -0
  48. data/lib/ecm/cms/active_admin/ecm_cms_navigations.rb +65 -0
  49. data/lib/ecm/cms/active_admin/ecm_cms_pages.rb +110 -0
  50. data/lib/ecm/cms/active_admin/ecm_cms_partials.rb +53 -0
  51. data/lib/ecm/cms/active_admin/ecm_cms_templates.rb +55 -0
  52. data/lib/ecm/cms/configuration.rb +33 -0
  53. data/lib/ecm/cms/controller_extensions/page_resolver.rb +13 -0
  54. data/lib/ecm/cms/controller_extensions/partial_resolver.rb +13 -0
  55. data/lib/ecm/cms/controller_extensions/template_resolver.rb +13 -0
  56. data/lib/ecm/cms/database_resolver.rb +101 -0
  57. data/lib/ecm/cms/database_template.rb +61 -0
  58. data/lib/ecm/cms/engine.rb +28 -0
  59. data/lib/ecm/cms/importers/navigation.rb +30 -0
  60. data/lib/ecm/cms/importers/navigation_item.rb +64 -0
  61. data/lib/ecm/cms/importers/page.rb +41 -0
  62. data/lib/ecm/cms/resolvers/ecm/cms/page_resolver.rb +45 -0
  63. data/lib/ecm/cms/resolvers/ecm/cms/partial_resolver.rb +30 -0
  64. data/lib/ecm/cms/resolvers/ecm/cms/template_resolver.rb +30 -0
  65. data/lib/ecm/cms/routing.rb +13 -0
  66. data/lib/ecm/cms/version.rb +5 -0
  67. data/lib/ecm_cms2.rb +36 -0
  68. data/lib/generators/ecm/cms/install/install_generator.rb +15 -0
  69. data/lib/generators/ecm/cms/install/templates/ecm_cms.rb +37 -0
  70. data/lib/generators/ecm/cms/locales/locales_generator.rb +38 -0
  71. data/lib/tasks/ecm_cms_tasks.rake +5 -0
  72. metadata +498 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8d6fcb88e37f46304a93a16318714c6abb90fcbe
4
+ data.tar.gz: ae240502120e7e4744700dc2a712a9bd026dd649
5
+ SHA512:
6
+ metadata.gz: 243c50e7220649305bd6f4bd0210c1d66659b47b5857a8e41dd4a9c0503aac7815fcb2f2b649261a32cd6174e4bb903e74dcd98cdc35982b969659d7dc63cd84
7
+ data.tar.gz: 8b9949ad93aa390975d1c0524625f62757b4b2ec5e62db291e540a3f5e659bced0224082af92b7b364e45755d2a286fb3187ad1534685a4bb6c0e9aab26ee78b
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2015 Roberto Vasquez Angel
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,66 @@
1
+ = ECM Module Template
2
+
3
+ = End-User documentation
4
+
5
+ Please look at the[link:doc] Folder.
6
+
7
+
8
+ = Prerequisites
9
+
10
+ = Installation
11
+
12
+ Add it to your bundle:
13
+
14
+ # Gemfile:
15
+ gem 'ecm_cms2'
16
+
17
+ Install your bundle:
18
+
19
+ > bundle install
20
+
21
+ Install the intializer:
22
+
23
+ > rails g ecm:cms:install
24
+
25
+ Install the locales
26
+
27
+ > rails g ecm:cms:locales
28
+
29
+ Generate migrations and migrate:
30
+
31
+ > rake ecm_cms_engine:install:migrations
32
+ > rake db:migrate
33
+
34
+ = Configuring localized routing
35
+
36
+ Add the routes to your routing file:
37
+
38
+ # config/routes.rb:
39
+ localized do
40
+ Ecm::Cms::Routing.routes(self)
41
+ end
42
+ root to: redirect("/#{I18n.locale}")
43
+
44
+ = Optional: Generating example/default data
45
+
46
+ There is a task to prepopulate your database tables with example data.
47
+
48
+ Warning: *RUNNING THIS WILL DELETE ALL OF YOUR CMS DATA AND REPLACE IT WITH EXAMPLE DATA!*
49
+
50
+ > rake ecm:cms:db:populate!
51
+
52
+ = Linking to pages
53
+
54
+ <%= link_to 'My Page', page_path(i18n_locale: I18n.locale, page: 'my-page') %>
55
+
56
+ = Using partials form the database in other controllers
57
+
58
+ # app/controllers/application_controller.rb
59
+ class ApplicationController < ActionController::Base
60
+ prepend_view_path ::Ecm::Cms::PartialResolver.instance
61
+ ...
62
+ end
63
+
64
+ = License
65
+
66
+ This project rocks and uses MIT-LICENSE.
data/Rakefile ADDED
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ RDoc::Task.new(:rdoc) do |rdoc|
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = 'ECM CMS'
18
+ rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('README.rdoc')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
22
+
23
+ Bundler::GemHelper.install_tasks
24
+
25
+ require 'rails/dummy/tasks'
File without changes
@@ -0,0 +1,11 @@
1
+ body.active_admin textarea#ecm_cms_page_body, body.active_admin textarea#ecm_cms_template_body, body.active_admin textarea#ecm_cms_partial_body {
2
+ font-family: Consolas, Monaco,Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace;
3
+ }
4
+
5
+ .active_admin pre {
6
+ white-space: pre-wrap !important; /* css-3 */
7
+ white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */
8
+ white-space: -pre-wrap !important; /* Opera 4-6 */
9
+ white-space: -o-pre-wrap !important; /* Opera 7 */
10
+ }
11
+
@@ -0,0 +1,24 @@
1
+ class Ecm::Cms::PageController < Ecm::Cms::Configuration.base_controller.constantize
2
+ # add the page resolver
3
+ include Ecm::Cms::ControllerExtensions::PageResolver
4
+ include Ecm::Cms::ControllerExtensions::PartialResolver
5
+
6
+ # avoid error 500 on missing template
7
+ rescue_from ActionView::MissingTemplate do
8
+ respond_to do |format|
9
+ format.html {
10
+ render(:file => "#{Rails.root}/public/404", :formats => [:html],
11
+ :layout => false,
12
+ :status => 404
13
+ )
14
+ }
15
+ format.xml { head :not_found }
16
+ format.any { head :not_found }
17
+ end
18
+ end
19
+
20
+ def respond
21
+ render :template => params[:page]
22
+ end
23
+ end
24
+
@@ -0,0 +1,46 @@
1
+ module Ecm::CmsHelper
2
+ def cms_render_navigation(name, options = {})
3
+ options.reverse_merge! renderer: :bootstrap, expand_all: true, level: 1
4
+
5
+ level = options.delete(:level)
6
+ expand_all = options.delete(:expand_all)
7
+ container_css_class = options.delete(:container_css_class)
8
+ renderer = options.delete(:renderer)
9
+
10
+ level_as_array = (level).is_a?(Range) ? level.to_a : [level]
11
+
12
+ navigation = Ecm::Cms::Navigation.where(:name => name.to_s, :locale => I18n.locale.to_s).first
13
+ unless navigation
14
+ return I18n.t('ecm.cms.navigation.messages.not_found', {:lang => I18n.locale.to_s, :name => name.to_s})
15
+ end
16
+
17
+ roots = navigation.ecm_cms_navigation_items.roots.all
18
+ if roots.empty?
19
+ return I18n.t('ecm.cms.navigation.messages.empty', :lang => I18n.locale.to_s, :name => name)
20
+ end
21
+
22
+ render_navigation(level: level, expand_all: expand_all, renderer: renderer) do |navigation|
23
+ navigation.dom_class = container_css_class
24
+ roots.each do |navigation_item|
25
+ build_navigation_item(navigation, navigation_item, container_css_class)
26
+ end
27
+ end
28
+ end
29
+
30
+ def build_navigation_item(navigation, item, container_css_class)
31
+ options = {}
32
+ options[:highlights_on] = /#{item.highlights_on}/ if item.highlights_on.present?
33
+ options = item.li_attributes.marshal_dump.delete_if {|key, value| value.blank? }
34
+
35
+ navigation.dom_class = container_css_class
36
+ if item.children.present?
37
+ navigation.item item.key, item.name, item.url, options do |sub_navigation|
38
+ item.children.each do |sub_item|
39
+ build_navigation_item(sub_navigation, sub_item, container_css_class)
40
+ end
41
+ end
42
+ else
43
+ navigation.item item.key, item.name, item.url, options
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,29 @@
1
+ require 'active_support/concern'
2
+
3
+ module Ecm::Cms
4
+ module NavigationItem::Properties
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ serialize :properties, OpenStruct
9
+ delegate *Configuration.navigation_item_properties, to: :li_attributes
10
+ delegate *Configuration.navigation_item_properties.collect { |a| "#{a}=".to_sym }, to: :li_attributes
11
+ end
12
+
13
+ def highlights_on
14
+ self.properties.highlights_on ||= nil
15
+ end
16
+
17
+ def highlights_on=(highlights_on)
18
+ properties.highlights_on = highlights_on
19
+ end
20
+
21
+ def li_attributes
22
+ self.properties.li_attributes ||= OpenStruct.new
23
+ end
24
+
25
+ def li_attributes=(li_attributes)
26
+ properties.li_attributes = li_attributes
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,16 @@
1
+ module Ecm::Cms
2
+ class ContentBox < ActiveRecord::Base
3
+ # associations
4
+ has_many :ecm_cms_page_content_blocks, :class_name => 'Page::ContentBlock',
5
+ :foreign_key => 'ecm_cms_content_box_id'
6
+
7
+ # validations
8
+ validates :name, :presence => true,
9
+ :uniqueness => true
10
+
11
+ def ecm_cms_page_content_blocks_count
12
+ ecm_cms_page_content_blocks.count
13
+ end
14
+ end
15
+ end
16
+
@@ -0,0 +1,20 @@
1
+ class Ecm::Cms::Folder < ActiveRecord::Base
2
+ # associations
3
+ has_many :ecm_cms_pages,
4
+ :class_name => 'Ecm::Cms::Page',
5
+ :dependent => :destroy,
6
+ :foreign_key => 'ecm_cms_folder_id'
7
+ has_many :ecm_cms_partials,
8
+ :class_name => 'Ecm::Cms::Partial',
9
+ :dependent => :destroy,
10
+ :foreign_key => 'ecm_cms_folder_id'
11
+ has_many :ecm_cms_templates,
12
+ :class_name => 'Ecm::Cms::Template',
13
+ :dependent => :destroy,
14
+ :foreign_key => 'ecm_cms_folder_id'
15
+
16
+ # validations
17
+ validates :basename, :presence => true
18
+ validates :pathname, :presence => true
19
+ end
20
+
@@ -0,0 +1,18 @@
1
+ class Ecm::Cms::Navigation < ActiveRecord::Base
2
+ # associations
3
+ has_many :ecm_cms_navigation_items,
4
+ :class_name => 'Ecm::Cms::NavigationItem',
5
+ :dependent => :destroy,
6
+ :foreign_key => 'ecm_cms_navigation_id'
7
+
8
+ # validations
9
+ validates :locale, :inclusion => I18n.available_locales.map(&:to_s),
10
+ :allow_nil => true
11
+ validates :name, :presence => true,
12
+ :uniqueness => { :scope => [ :locale ] }
13
+
14
+ def to_s
15
+ "#{self.name} (#{self.locale})"
16
+ end
17
+ end
18
+
@@ -0,0 +1,88 @@
1
+ module Ecm::Cms
2
+ class NavigationItem < ActiveRecord::Base
3
+ include Properties
4
+
5
+ # associations
6
+ belongs_to :ecm_cms_navigation,
7
+ :class_name => 'Ecm::Cms::Navigation',
8
+ :foreign_key => 'ecm_cms_navigation_id'
9
+ belongs_to :ecm_cms_page,
10
+ :class_name => 'Ecm::Cms::Page',
11
+ :foreign_key => 'ecm_cms_page_id'
12
+
13
+ # awesome nested set
14
+ acts_as_nested_set :dependent => :destroy, :counter_cache => :children_count, :scope => :ecm_cms_navigation_id
15
+
16
+ # callbacks
17
+ before_validation :update_navigation_from_parent, :if => Proc.new { |ni| ni.child? }
18
+ before_validation :update_url_form_page, :if => Proc.new { |ni| ni.ecm_cms_page.present? && ni.url.blank? }
19
+ after_save :update_children_navigations!
20
+
21
+ # default_scope
22
+ default_scope { order(:ecm_cms_navigation_id, :lft) }
23
+
24
+ # validations
25
+ validates :key, :presence => true
26
+ validates :name, :presence => true
27
+ validates :url, :presence => true
28
+ validates :ecm_cms_navigation, :presence => true, :if => :root?
29
+
30
+ def params_for_new_page
31
+ return {} if self.new_record?
32
+ match = self.url.scan(/(#{I18n.available_locales.join('|')})$/)
33
+ return { :locale => match[0][0], :pathname => '/', :basename => 'home', :title => self.name, :ecm_cms_navigation_item_ids => [ self.to_param ] } if match.size > 0
34
+ match = self.url.scan(/(#{I18n.available_locales.join('|')})(.*)\/(.*)/)
35
+ return {} unless match.first.respond_to?(:size) # && match.first.size != 3
36
+ params = match.first
37
+ return {} if params.size != 3
38
+ params[1] << '/' unless params[1].end_with?('/')
39
+ return { :locale => params[0], :pathname => params[1], :basename => params[2], :title => self.name, :ecm_cms_navigation_item_ids => [ self.to_param ] }
40
+ end
41
+
42
+ def to_label
43
+ if depth > 0
44
+ "#{'&nbsp;' * depth} &#9654; #{name}".html_safe
45
+ else
46
+ name
47
+ end
48
+ end
49
+
50
+ def to_s
51
+ "#{ecm_cms_navigation}: #{name}"
52
+ end
53
+
54
+ def update_navigation_from_parent!
55
+ update_navigation_from_parent
56
+ save!
57
+ end
58
+
59
+ def update_children_navigations!
60
+ self.descendants.map(&:"update_navigation_from_parent!")
61
+ end
62
+
63
+ def update_url_form_page!
64
+ # self.url = build_url_from_page(ecm_cms_page.locale, ecm_cms_page.pathname, ecm_cms_page.basename, ecm_cms_page.home_page?)
65
+ update_url_form_page
66
+ save!
67
+ end
68
+
69
+ private
70
+
71
+ def build_url_from_page(locale, pathname, basename, is_home_page)
72
+ if is_home_page
73
+ "/#{locale}"
74
+ else
75
+ "/#{locale}#{pathname}#{basename}"
76
+ end
77
+ end
78
+
79
+ def update_navigation_from_parent
80
+ self.ecm_cms_navigation = self.parent.ecm_cms_navigation
81
+ end
82
+
83
+ def update_url_form_page
84
+ self.url = build_url_from_page(ecm_cms_page.locale, ecm_cms_page.pathname, ecm_cms_page.basename, ecm_cms_page.home_page?)
85
+ end
86
+ end
87
+ end
88
+
@@ -0,0 +1,24 @@
1
+ module Ecm::Cms
2
+ class Page::ContentBlock < ActiveRecord::Base
3
+ # associations
4
+ belongs_to :ecm_cms_content_box, :class_name => 'ContentBox',
5
+ :foreign_key => 'ecm_cms_content_box_id'
6
+ belongs_to :ecm_cms_page, :class_name => 'Ecm::Cms::Page',
7
+ :foreign_key => 'ecm_cms_page_id'
8
+
9
+ # attributes
10
+ attr_accessible(:body,
11
+ :ecm_cms_content_box_id) if Rails.version < '4.0.0'
12
+
13
+ # validations
14
+ validates :body, :presence => true
15
+ validates :ecm_cms_content_box, :presence => true
16
+ validates :ecm_cms_page, :presence => true
17
+ # validates :ecm_cms_page, :existence => true
18
+
19
+ def content_box_name
20
+ ecm_cms_content_box.name
21
+ end
22
+ end
23
+ end
24
+
@@ -0,0 +1,33 @@
1
+ module Ecm::Cms
2
+ class Page < ActiveRecord::Base
3
+ # add shared behaviour for database backed templates
4
+ include DatabaseTemplate
5
+
6
+ # associations
7
+ has_many :ecm_cms_navigation_items,
8
+ :class_name => 'NavigationItem',
9
+ :dependent => :nullify,
10
+ :foreign_key => 'ecm_cms_page_id'
11
+ has_many :ecm_cms_page_content_blocks,
12
+ :class_name => 'Ecm::Cms::Page::ContentBlock',
13
+ :dependent => :destroy,
14
+ :foreign_key => 'ecm_cms_page_id',
15
+ :inverse_of => :ecm_cms_page
16
+
17
+ accepts_nested_attributes_for :ecm_cms_page_content_blocks, :allow_destroy => true
18
+
19
+ # callbacks
20
+ after_save :touch_navigation_items # , :if => Proc.new { |page| page.locale_changed? || page.pathname_changed? || page.basename_changed? }
21
+
22
+ # validations
23
+ validates :title, :presence => true
24
+
25
+ def home_page?
26
+ return self.pathname == '/' && self.basename == 'home'
27
+ end
28
+
29
+ def touch_navigation_items
30
+ self.ecm_cms_navigation_items.map(&:update_url_form_page!)
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,16 @@
1
+ require 'ecm/cms/database_template'
2
+
3
+ class Ecm::Cms::Partial < ActiveRecord::Base
4
+ # add shared behaviour for database backed templates
5
+ include Ecm::Cms::DatabaseTemplate
6
+
7
+ # callbacks
8
+ before_validation :ensure_basename_starts_with_underscore, :if => Proc.new { |t| t.basename.present? }
9
+
10
+ private
11
+
12
+ def ensure_basename_starts_with_underscore
13
+ self.basename.insert(0, '_') unless self.basename.start_with?('_')
14
+ end
15
+ end
16
+
@@ -0,0 +1,19 @@
1
+ class Ecm::Cms::Template < ActiveRecord::Base
2
+ # add shared behaviour for database backed templates
3
+ include Ecm::Cms::DatabaseTemplate
4
+
5
+ # associations
6
+ belongs_to :ecm_cms_folder,
7
+ :class_name => 'Ecm::Cms::Folder',
8
+ :foreign_key => 'ecm_cms_folder_id'
9
+
10
+ # callbacks
11
+ before_validation :ensure_basename_starts_without_underscore, :if => Proc.new { |t| t.basename.present? }
12
+
13
+ private
14
+
15
+ def ensure_basename_starts_without_underscore
16
+ self.basename.slice!(0) if self.basename.start_with?('_')
17
+ end
18
+ end
19
+
@@ -0,0 +1,15 @@
1
+ de:
2
+ activerecord:
3
+ models:
4
+ ecm/cms/content_box:
5
+ one: Content Box
6
+ other: Content Boxen
7
+ attributes:
8
+ ecm/cms/content_box:
9
+ name: Name
10
+ body: Inhalt
11
+ created_at: Erstellt am
12
+ ecm_cms_page_content_blocks: Content Blöcke
13
+ ecm_cms_page_content_blocks_count: Content Blöcke
14
+ updated_at: Aktualisiert am
15
+
@@ -0,0 +1,15 @@
1
+ en:
2
+ activerecord:
3
+ models:
4
+ ecm/cms/content_box:
5
+ one: content box
6
+ other: content boxes
7
+ attributes:
8
+ ecm/cms/content_box:
9
+ name: name
10
+ body: body
11
+ created_at: created at
12
+ ecm_cms_page_content_blocks: content blocks
13
+ ecm_cms_page_content_blocks_count: content blocks
14
+ updated_at: updated at
15
+
@@ -0,0 +1,17 @@
1
+ de:
2
+ ecm:
3
+ cms:
4
+ active_admin:
5
+ menu: CMS
6
+ navigation:
7
+ messages:
8
+ empty: Navigation %{name} (%{lang}) ist leer
9
+ not_found: Navigation %{name} (%{lang}) nicht gefunden
10
+ resources:
11
+ ecm_cms_folders: ordner
12
+ ecm_cms_navigations: navigationen
13
+ ecm_cms_navigation_items: navigationseintraege
14
+ ecm_cms_pages: seiten
15
+ ecm_cms_partials: fragmente
16
+ ecm_cms_templates: vorlagen
17
+
@@ -0,0 +1,17 @@
1
+ en:
2
+ ecm:
3
+ cms:
4
+ active_admin:
5
+ menu: CMS
6
+ navigation:
7
+ messages:
8
+ empty: Navigation %{name} (%{lang}) is empty
9
+ not_found: Could not find navigation %{name} (%{lang})
10
+ resources:
11
+ ecm_cms_folders: folders
12
+ ecm_cms_navigations: navigations
13
+ ecm_cms_navigation_items: navigation_items
14
+ ecm_cms_pages: pages
15
+ ecm_cms_partials: partials
16
+ ecm_cms_templates: templates
17
+
@@ -0,0 +1,15 @@
1
+ de:
2
+ activerecord:
3
+ models:
4
+ ecm/cms/navigation:
5
+ one: Navigation
6
+ other: Navigationen
7
+ attributes:
8
+ ecm/cms/navigation:
9
+ created_at: Erstellt am
10
+ ecm_cms_navigation_items: Navigationseinträge
11
+ locale: Sprache
12
+ name: Name
13
+ slug: Freundliche ID
14
+ updated_at: Aktualisiert am
15
+
@@ -0,0 +1,15 @@
1
+ en:
2
+ activerecord:
3
+ models:
4
+ ecm/cms/navigation:
5
+ one: navigation
6
+ other: navigations
7
+ attributes:
8
+ ecm/cms/navigation:
9
+ created_at: created at
10
+ ecm_cms_navigation_items: navigation items
11
+ locale: language
12
+ name: name
13
+ slug: friendly id
14
+ updated_at: updated at
15
+
@@ -0,0 +1,25 @@
1
+ de:
2
+ activerecord:
3
+ models:
4
+ ecm/cms/navigation_item:
5
+ one: Navigationseintrag
6
+ other: Navigationseinträge
7
+ attributes:
8
+ ecm/cms/navigation_item:
9
+ created_at: Erstellt am
10
+ depth: Baumtiefe
11
+ ecm_cms_navigation: Navigation
12
+ ecm_cms_page: Seite
13
+ data_add_icon: Symbol
14
+ highlights_on: Hervorgehoben bei
15
+ key: Schlüssel
16
+ lft: Links
17
+ li_attributes: 'Listen-Element Attribute'
18
+ name: Name
19
+ options: Optionen
20
+ parent: Untereintrag von
21
+ rgt: Rechts
22
+ slug: Freundliche ID
23
+ updated_at: Aktualisiert am
24
+ url: Ziel-URL
25
+
@@ -0,0 +1,25 @@
1
+ en:
2
+ activerecord:
3
+ models:
4
+ ecm/cms/navigation_item:
5
+ one: navigation item
6
+ other: navigation items
7
+ attributes:
8
+ ecm/cms/navigation_item:
9
+ created_at: created at
10
+ depth: tree depth
11
+ ecm_cms_navigation: navigation
12
+ ecm_cms_page: page
13
+ data_add_icon: icon
14
+ highlights_on: highlights on
15
+ key: key
16
+ lft: left
17
+ li_attributes: 'list-element attributes'
18
+ name: name
19
+ options: options
20
+ parent: parent
21
+ rgt: right
22
+ slug: friendly id
23
+ updated_at: updated at
24
+ url: target url
25
+
@@ -0,0 +1,14 @@
1
+ de:
2
+ activerecord:
3
+ models:
4
+ ecm/cms/page/content_block:
5
+ one: Content Block
6
+ other: Content Blöcke
7
+ attributes:
8
+ ecm/cms/page/content_block:
9
+ body: Inhalt
10
+ created_at: Erstellt am
11
+ ecm_cms_page: Seite
12
+ ecm_cms_content_box: Content Box
13
+ updated_at: Aktualisiert am
14
+
@@ -0,0 +1,14 @@
1
+ en:
2
+ activerecord:
3
+ models:
4
+ ecm/cms/page/content_block:
5
+ one: content block
6
+ other: content blocks
7
+ attributes:
8
+ ecm/cms/page/content_block:
9
+ body: body
10
+ created_at: created at
11
+ ecm_cms_page: page
12
+ ecm_cms_content_box: content box
13
+ updated_at: udpated at
14
+