hancock_cms_pages 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 (81) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.ruby-gemset +1 -0
  4. data/.ruby-version +1 -0
  5. data/.travis.yml +4 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +84 -0
  9. data/Rakefile +1 -0
  10. data/app/assets/javascripts/hancock/pages/init.coffee +2 -0
  11. data/app/assets/javascripts/hancock/pages/scrolling.coffee +55 -0
  12. data/app/assets/javascripts/hancock/pages.coffee +6 -0
  13. data/app/assets/stylesheets/hancock/pages.sass +1 -0
  14. data/app/controllers/concerns/hancock/pages/blocksetable.rb +104 -0
  15. data/app/controllers/concerns/hancock/pages/decorators/pages.rb +15 -0
  16. data/app/controllers/concerns/hancock/pages/localizeable.rb +66 -0
  17. data/app/controllers/concerns/hancock/pages/nav_menu.rb +91 -0
  18. data/app/controllers/concerns/hancock/pages/seo_pages.rb +99 -0
  19. data/app/controllers/hancock/pages/pages_controller.rb +7 -0
  20. data/app/helpers/hancock/pages/canonical_helper.rb +12 -0
  21. data/app/helpers/hancock/pages/pages_helpers.rb +2 -0
  22. data/app/models/concerns/hancock/pages/canonicalable.rb +22 -0
  23. data/app/models/concerns/hancock/pages/connectable.rb +36 -0
  24. data/app/models/concerns/hancock/pages/decorators/block.rb +39 -0
  25. data/app/models/concerns/hancock/pages/decorators/blockset.rb +39 -0
  26. data/app/models/concerns/hancock/pages/decorators/menu.rb +39 -0
  27. data/app/models/concerns/hancock/pages/decorators/page.rb +39 -0
  28. data/app/models/hancock/pages/block.rb +13 -0
  29. data/app/models/hancock/pages/blockset.rb +13 -0
  30. data/app/models/hancock/pages/menu.rb +16 -0
  31. data/app/models/hancock/pages/page.rb +16 -0
  32. data/app/views/blocks/_header.html.slim +4 -0
  33. data/app/views/hancock/pages/pages/show.html.slim +1 -0
  34. data/app/views/rails_admin/main/_hancock_connectable.html.slim +56 -0
  35. data/app/views/shared/_obj.html.slim +26 -0
  36. data/bin/console +14 -0
  37. data/bin/setup +7 -0
  38. data/config/initializers/hancock_pages.rb +3 -0
  39. data/config/locales/hancock.pages.ru.yml +54 -0
  40. data/hancock_cms_pages.gemspec +37 -0
  41. data/lib/generators/hancock/pages/config/install_generator.rb +13 -0
  42. data/lib/generators/hancock/pages/config/templates/hancock_pages.erb +14 -0
  43. data/lib/generators/hancock/pages/migration_generator.rb +18 -0
  44. data/lib/generators/hancock/pages/models/block_generator.rb +39 -0
  45. data/lib/generators/hancock/pages/models/blockset_generator.rb +39 -0
  46. data/lib/generators/hancock/pages/models/decorators_generator.rb +24 -0
  47. data/lib/generators/hancock/pages/models/menu_generator.rb +39 -0
  48. data/lib/generators/hancock/pages/models/page_generator.rb +39 -0
  49. data/lib/generators/hancock/pages/models/templates/block.erb +37 -0
  50. data/lib/generators/hancock/pages/models/templates/blockset.erb +34 -0
  51. data/lib/generators/hancock/pages/models/templates/menu.erb +37 -0
  52. data/lib/generators/hancock/pages/models/templates/page.erb +43 -0
  53. data/lib/generators/hancock/pages/templates/migration_blocks.rb +42 -0
  54. data/lib/generators/hancock/pages/templates/migration_pages.rb +48 -0
  55. data/lib/hancock/pages/admin/block.rb +81 -0
  56. data/lib/hancock/pages/admin/blockset.rb +72 -0
  57. data/lib/hancock/pages/admin/menu.rb +48 -0
  58. data/lib/hancock/pages/admin/page.rb +105 -0
  59. data/lib/hancock/pages/admin.rb +45 -0
  60. data/lib/hancock/pages/configuration.rb +35 -0
  61. data/lib/hancock/pages/controllers/pages.rb +33 -0
  62. data/lib/hancock/pages/engine.rb +5 -0
  63. data/lib/hancock/pages/models/active_record/block.rb +16 -0
  64. data/lib/hancock/pages/models/active_record/blockset.rb +19 -0
  65. data/lib/hancock/pages/models/active_record/menu.rb +20 -0
  66. data/lib/hancock/pages/models/active_record/page.rb +22 -0
  67. data/lib/hancock/pages/models/block.rb +190 -0
  68. data/lib/hancock/pages/models/blockset.rb +69 -0
  69. data/lib/hancock/pages/models/menu.rb +48 -0
  70. data/lib/hancock/pages/models/mongoid/block.rb +34 -0
  71. data/lib/hancock/pages/models/mongoid/blockset.rb +22 -0
  72. data/lib/hancock/pages/models/mongoid/menu.rb +16 -0
  73. data/lib/hancock/pages/models/mongoid/page.rb +43 -0
  74. data/lib/hancock/pages/models/page.rb +159 -0
  75. data/lib/hancock/pages/rails_admin_ext/hancock_connectable.rb +33 -0
  76. data/lib/hancock/pages/rails_admin_ext/menu.rb +147 -0
  77. data/lib/hancock/pages/routes.rb +46 -0
  78. data/lib/hancock/pages/version.rb +5 -0
  79. data/lib/hancock_cms_pages.rb +54 -0
  80. data/release.sh +6 -0
  81. metadata +185 -0
@@ -0,0 +1,19 @@
1
+ module Hancock::Pages
2
+ module Models
3
+ module ActiveRecord
4
+ module Blockset
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ has_paper_trail
9
+ validates_lengths_from_database only: [:name]
10
+ if Hancock::Pages.config.localize
11
+ translates :name
12
+ end
13
+
14
+ has_many :page_blocks, class_name: "Hancock::Pages::Blockset"
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,20 @@
1
+ module Hancock::Pages
2
+ module Models
3
+ module ActiveRecord
4
+ module Menu
5
+ extend ActiveSupport::Concern
6
+ included do
7
+ has_paper_trail
8
+ validates_lengths_from_database only: [:name]
9
+ if Hancock::Pages.config.localize
10
+ translates :name
11
+ end
12
+
13
+ has_and_belongs_to_many :pages,
14
+ class_name: "Hancock::Pages::Page",
15
+ join_table: :hancock_pages_menus_pages
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,22 @@
1
+ module Hancock::Pages
2
+ module Models
3
+ module ActiveRecord
4
+ module Page
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ has_paper_trail
9
+ validates_lengths_from_database only: [:name, :content_html, :excerpt_html, :regexp, :redirect, :fullpath]
10
+ scope :sorted, -> { order(lft: :asc) }
11
+ if Hancock::Pages.config.localize
12
+ translates :name, :content_html, :excerpt_html
13
+ end
14
+
15
+ has_and_belongs_to_many :menus,
16
+ class_name: "Hancock::Pages::Menu",
17
+ join_table: :hancock_pages_menus_pages
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,190 @@
1
+ module Hancock::Pages
2
+ module Models
3
+ module Block
4
+ extend ActiveSupport::Concern
5
+ include Hancock::Model
6
+ include Hancock::Enableable
7
+ include ManualSlug
8
+
9
+ include Hancock::Pages.orm_specific('Block')
10
+
11
+ included do
12
+ manual_slug :name
13
+
14
+ validates :file_path, format: {
15
+ # with: /\A(?!layouts\/).*\Z/,
16
+ without: /\Alayouts\/.*\Z/,
17
+ message: "Недопустимый путь к файлу".freeze
18
+ }
19
+
20
+ attr_accessor :file_pathname
21
+ after_initialize do
22
+ self.file_pathname = Pathname.new(file_path) unless file_path.nil?
23
+ end
24
+ end
25
+
26
+ def file_pathname_as_partial
27
+ self.file_pathname.dirname.join("_#{self.file_pathname.basename}")
28
+ end
29
+ def file_path_as_partial
30
+ self.file_pathname_as_partial.to_s
31
+ end
32
+
33
+ def file_pathname_for_fs
34
+ self.partial ? self.file_pathname_as_partial : self.file_pathname
35
+ end
36
+ def file_path_for_fs
37
+ self.file_pathname_for_fs.to_s
38
+ end
39
+
40
+
41
+ def has_content?
42
+ @content_used.nil? && !content.blank?
43
+ end
44
+ def block_content(clear_insertions = true)
45
+ if clear_insertions.is_a?(Hash)
46
+ clear_insertions = clear_insertions[:clear_insertions]
47
+ end
48
+ if @content_used.nil?
49
+ @content_used = true
50
+ if content.nil?
51
+ ''
52
+ else
53
+ # content.gsub(/\{\{(.*?)\}\}/) do
54
+ content.gsub(/\{\{(([^\.]*?)\.)?(.*?)\}\}/) do
55
+ if $3 == "FILE" and $2.blank?
56
+ clear_insertions ? "" : $0
57
+ else
58
+ (Settings and !$3.blank?) ? Settings.ns($2).get($3).val : "" #temp
59
+ end
60
+ end
61
+ end
62
+ else
63
+ ''
64
+ end
65
+ end
66
+ def has_content_html?
67
+ @content_html_used.nil? && !content_html.blank?
68
+ end
69
+ def block_content_html(clear_insertions = true)
70
+ if clear_insertions.is_a?(Hash)
71
+ clear_insertions = clear_insertions[:clear_insertions]
72
+ end
73
+ if @content_html_used.nil?
74
+ @content_html_used = true
75
+ if content_html.nil?
76
+ ''
77
+ else
78
+ # content.gsub(/\{\{(.*?)\}\}/) do
79
+ content_html.gsub(/\{\{(([^\.]*?)\.)?(.*?)\}\}/) do
80
+ if $3 == "FILE" and $2.blank?
81
+ clear_insertions ? "" : $0
82
+ else
83
+ (Settings and !$3.blank?) ? Settings.ns($2).get($3).val : "" #temp
84
+ end
85
+ end
86
+ end
87
+ else
88
+ ''
89
+ end
90
+ end
91
+
92
+ def render_or_content_html(view, opts = {})
93
+ if view.is_a?(Hash)
94
+ view, opts = view.delete(:view), view
95
+ end
96
+ ret = ""
97
+ if self.render_file and !self.file_path.blank?
98
+ opts.merge!(partial: self.file_path, locals: {hancock_block: self, called_from: :render})
99
+ ret = view.render(opts) rescue self.content_html.html_safe
100
+ else
101
+ opts.merge!(partial: self.file_path, locals: {hancock_block: self, called_from: :content_html})
102
+ ret = self.block_content_html(false).gsub("{{FILE}}") do
103
+ view.render(opts) rescue nil
104
+ end.html_safe
105
+ end
106
+ if use_wrapper
107
+ _attrs = {
108
+ class: wrapper_class,
109
+ id: wrapper_id
110
+ }.merge(wrapper_attributes)
111
+ ret = view.content_tag wrapper_tag, ret, _attrs
112
+ end
113
+ ret = yield ret if block_given?
114
+ return ret
115
+ end
116
+
117
+ def render_or_content(view, opts = {})
118
+ if view.is_a?(Hash)
119
+ view, opts = view.delete(:view), view
120
+ end
121
+ ret = ""
122
+ unless self.file_path.blank?
123
+ opts.merge!(partial: self.file_path, locals: {hancock_block: self, called_from: :render})
124
+ ret = view.render(opts) rescue self.content
125
+ else
126
+ opts.merge!(partial: self.file_path, locals: {hancock_block: self, called_from: :content})
127
+ ret = self.block_content(false).gsub("{{FILE}}") do
128
+ view.render(opts) rescue nil
129
+ end
130
+ end
131
+ ret = yield ret if block_given?
132
+ return ret
133
+ end
134
+
135
+ def file_fullpath(with_ext = false, ext = ".html.slim")
136
+ if with_ext.is_a?(String)
137
+ ext, with_ext = with_ext, true
138
+ end
139
+ ret = nil
140
+ unless self.file_path.blank?
141
+ ret = self.file_path_for_fs
142
+ ret += ext if with_ext
143
+ ret = Rails.root.join("views", ret)
144
+ end
145
+ return ret
146
+ end
147
+ def file_exists?
148
+ file_fullpath(true).exist?
149
+ end
150
+
151
+ def nav_options
152
+ nav_options_default.deep_merge(nav_options_additions)
153
+ end
154
+
155
+ def nav_options_default
156
+ {
157
+ highlights_on: false,
158
+ link_html: {
159
+ data: {
160
+ pageblock_selector: self.pageblock_selector,
161
+ history_name: self.name
162
+ }
163
+ }
164
+ }
165
+ end
166
+
167
+ def nav_options_additions
168
+ {}
169
+ end
170
+
171
+ def wrapper_attributes=(val)
172
+ if val.is_a? (String)
173
+ begin
174
+ begin
175
+ self[:wrapper_attributes] = JSON.parse(val)
176
+ rescue
177
+ self[:wrapper_attributes] = YAML.load(val)
178
+ end
179
+ rescue
180
+ end
181
+ elsif val.is_a?(Hash)
182
+ self[:wrapper_attributes] = val
183
+ else
184
+ self[:wrapper_attributes] = wrapper_attributes
185
+ end
186
+ end
187
+
188
+ end
189
+ end
190
+ end
@@ -0,0 +1,69 @@
1
+ module Hancock::Pages
2
+ module Models
3
+ module Blockset
4
+ extend ActiveSupport::Concern
5
+ include Hancock::Model
6
+ include Hancock::Enableable
7
+ include ManualSlug
8
+
9
+ include Hancock::Pages.orm_specific('Blockset')
10
+
11
+ included do
12
+ manual_slug :name
13
+
14
+ def self.manager_can_add_actions
15
+ ret = [:sort_embedded]
16
+ # ret += [:multiple_file_upload, :sort_embedded] if Hancock::Pages.mongoid?
17
+ ret << :model_settings if Hancock::Pages.config.model_settings_support
18
+ ret << :model_accesses if Hancock::Pages.config.user_abilities_support
19
+ ret += [:comments, :model_comments] if Hancock::Pages.config.ra_comments_support
20
+ ret.freeze
21
+ end
22
+ def self.rails_admin_add_visible_actions
23
+ ret = [:sort_embedded]
24
+ # ret += [:multiple_file_upload, :sort_embedded] if Hancock::Pages.mongoid?
25
+ ret << :model_settings if Hancock::Pages.config.model_settings_support
26
+ ret << :model_accesses if Hancock::Pages.config.user_abilities_support
27
+ ret += [:comments, :model_comments] if Hancock::Pages.config.ra_comments_support
28
+ ret.freeze
29
+ end
30
+ end
31
+
32
+
33
+ def render(view, content = "")
34
+ if view.is_a?(Hash)
35
+ view, content = view[:view], view[:content]
36
+ end
37
+ ret = content
38
+ if use_wrapper
39
+ _attrs = {
40
+ class: wrapper_class,
41
+ id: wrapper_id
42
+ }.merge(wrapper_attributes)
43
+ ret = view.content_tag wrapper_tag, ret, _attrs
44
+ end
45
+ ret = yield ret if block_given?
46
+ return ret
47
+ end
48
+
49
+ def wrapper_attributes=(val)
50
+ if val.is_a? (String)
51
+ begin
52
+ begin
53
+ self[:wrapper_attributes] = JSON.parse(val)
54
+ rescue
55
+ self[:wrapper_attributes] = YAML.load(val)
56
+ end
57
+ rescue
58
+ end
59
+ elsif val.is_a?(Hash)
60
+ self[:wrapper_attributes] = val
61
+ else
62
+ self[:wrapper_attributes] = wrapper_attributes
63
+ end
64
+ end
65
+
66
+
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,48 @@
1
+ module Hancock::Pages
2
+ module Models
3
+ module Menu
4
+ extend ActiveSupport::Concern
5
+ include Hancock::Model
6
+ include Hancock::Enableable
7
+ include ManualSlug
8
+
9
+ include Hancock::Cacheable
10
+
11
+ include Hancock::Pages.orm_specific('Menu')
12
+
13
+ included do
14
+ def self.default_cache_keys
15
+ ['menus']
16
+ end
17
+
18
+ manual_slug :name
19
+
20
+ def self.manager_can_add_actions
21
+ ret = []
22
+ # ret += [:multiple_file_upload, :sort_embedded] if Hancock::Pages.mongoid?
23
+ ret << :model_settings if Hancock::Pages.config.model_settings_support
24
+ ret << :model_accesses if Hancock::Pages.config.user_abilities_support
25
+ ret += [:comments, :model_comments] if Hancock::Pages.config.ra_comments_support
26
+ ret.freeze
27
+ end
28
+ def self.rails_admin_add_visible_actions
29
+ ret = []
30
+ # ret += [:multiple_file_upload, :sort_embedded] if Hancock::Pages.mongoid?
31
+ ret << :model_settings if Hancock::Pages.config.model_settings_support
32
+ ret << :model_accesses if Hancock::Pages.config.user_abilities_support
33
+ ret += [:comments, :model_comments] if Hancock::Pages.config.ra_comments_support
34
+ ret.freeze
35
+ end
36
+
37
+ def self.page_class
38
+ Hancock::Pages::Page
39
+ end
40
+
41
+ def page_class
42
+ self.class.page_class
43
+ end
44
+ end
45
+
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,34 @@
1
+ module Hancock::Pages
2
+ module Models
3
+ module Mongoid
4
+ module Block
5
+ extend ActiveSupport::Concern
6
+
7
+ include Hancock::HtmlField
8
+
9
+ included do
10
+ field :name, type: String, default: "", overwrite: true
11
+
12
+ field :pageblock_selector, type: String, localize: Hancock::Pages.config.localize, default: ""
13
+ field :file_path, type: String, localize: Hancock::Pages.config.localize, default: ""
14
+ field :partial, type: Boolean, default: true
15
+ field :render_file, type: Boolean, default: true
16
+ embedded_in :blockset, inverse_of: :blocks, class_name: "Hancock::Pages::Blockset"
17
+
18
+ hancock_cms_html_field :content, type: String, localize: Hancock::Pages.config.localize, default: ""
19
+
20
+ field :use_wrapper, type: Boolean, default: false
21
+ field :wrapper_tag, type: String, default: ""
22
+ field :wrapper_class, type: String, default: ""
23
+ field :wrapper_id, type: String, default: ""
24
+ field :wrapper_attributes, type: Hash, default: {}
25
+
26
+ field :menu_link_content, type: String
27
+ field :show_in_menu, type: Boolean, default: true
28
+ scope :show_in_menu, -> { where(show_in_menu: true) }
29
+ end
30
+
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,22 @@
1
+ module Hancock::Pages
2
+ module Models
3
+ module Mongoid
4
+ module Blockset
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ field :name, type: String, default: "", overwrite: true
9
+
10
+ embeds_many :blocks, inverse_of: :blockset, class_name: "Hancock::Pages::Block"
11
+ accepts_nested_attributes_for :blocks, allow_destroy: true
12
+
13
+ field :use_wrapper, type: Boolean, default: false
14
+ field :wrapper_tag, type: String, default: ""
15
+ field :wrapper_class, type: String, default: ""
16
+ field :wrapper_id, type: String, default: ""
17
+ field :wrapper_attributes, type: Hash, default: {}
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,16 @@
1
+ module Hancock::Pages
2
+ module Models
3
+ module Mongoid
4
+ module Menu
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ has_and_belongs_to_many :pages, inverse_of: :menus, class_name: "Hancock::Pages::Page"
9
+ alias_method :items, :pages
10
+
11
+ field :name, type: String, default: "", overwrite: true
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,43 @@
1
+ module Hancock::Pages
2
+ module Models
3
+ module Mongoid
4
+ module Page
5
+ extend ActiveSupport::Concern
6
+
7
+ include Hancock::HtmlField
8
+
9
+ included do
10
+ scope :connected, -> {
11
+ where(:connectable_id.ne => nil)
12
+ }
13
+ scope :unconnected, -> (except_this = nil) {
14
+ if except_this
15
+ where({"$or" =>[
16
+ {:connectable_id => nil},
17
+ {"$and" => [
18
+ {connectable_type: except_this.class.to_param},
19
+ {connectable_id: except_this._id}
20
+ ]}
21
+ ]})
22
+ else
23
+ where(:connectable_id => nil)
24
+ end
25
+ }
26
+
27
+ field :name, type: String, localize: Hancock::Pages.config.localize, default: ""
28
+
29
+ field :regexp, type: String, default: ""
30
+ field :redirect, type: String, default: ""
31
+ hancock_cms_html_field :excerpt, type: String, localize: Hancock::Pages.config.localize, default: ""
32
+ hancock_cms_html_field :content, type: String, localize: Hancock::Pages.config.localize, default: ""
33
+ field :fullpath, type: String, default: ""
34
+
35
+ has_and_belongs_to_many :menus, inverse_of: :pages, class_name: "Hancock::Pages::Menu"
36
+
37
+ scope :sorted, -> { order_by([:lft, :asc]) }
38
+ scope :menu, ->(menu_id) { enabled.sorted.where(menu_ids: menu_id) }
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,159 @@
1
+ module Hancock::Pages
2
+ module Models
3
+ module Page
4
+ extend ActiveSupport::Concern
5
+ include Hancock::Model
6
+ include Hancock::Enableable
7
+ include ManualSlug
8
+ if Hancock::Pages.config.seo_support
9
+ include Hancock::Seo::Seoable
10
+ include Hancock::Seo::SitemapDataField
11
+ end
12
+
13
+ include Hancock::Pages.orm_specific('Page')
14
+
15
+ # if Hancock.config.search_enabled
16
+ # include Hancock::ElasticSearch
17
+ # end
18
+
19
+ included do
20
+ acts_as_nested_set
21
+
22
+ validates_uniqueness_of :fullpath
23
+ validates_presence_of :name
24
+ manual_slug :name
25
+ before_validation do
26
+ self.fullpath = "/pages/#{slug}" if self.fullpath.blank?
27
+ end
28
+
29
+
30
+ if Hancock.rails4?
31
+ belongs_to :connectable, polymorphic: true
32
+ else
33
+ belongs_to :connectable, polymorphic: true, optional: true
34
+ end
35
+
36
+ def self.goto_hancock
37
+ self.where(connectable_type: /^Enjoy/).all.map { |s|
38
+ s.connectable_type = s.connectable_type.sub("Enjoy", "Hancock");
39
+ s.save
40
+ }
41
+ end
42
+
43
+ before_save do
44
+ self.connectable_id = nil if self.connectable_type.nil?
45
+ self.connectable_type = nil if self.connectable_id.nil?
46
+ self
47
+ end
48
+
49
+ def self.manager_can_add_actions
50
+ ret = [:nested_set]
51
+ # ret += [:multiple_file_upload, :sort_embedded] if Hancock::Pages.mongoid?
52
+ ret << :model_settings if Hancock::Pages.config.model_settings_support
53
+ ret << :model_accesses if Hancock::Pages.config.user_abilities_support
54
+ ret += [:comments, :model_comments] if Hancock::Pages.config.ra_comments_support
55
+ ret.freeze
56
+ end
57
+ def self.rails_admin_add_visible_actions
58
+ ret = [:nested_set]
59
+ # ret += [:multiple_file_upload, :sort_embedded] if Hancock::Pages.mongoid?
60
+ ret << :model_settings if Hancock::Pages.config.model_settings_support
61
+ ret << :model_accesses if Hancock::Pages.config.user_abilities_support
62
+ ret += [:comments, :model_comments] if Hancock::Pages.config.ra_comments_support
63
+ ret.freeze
64
+ end
65
+ end
66
+
67
+ def page_h1
68
+ _ret = seo ? seo.h1 : nil
69
+ _ret = name if _ret.blank?
70
+ _ret = title if _ret.blank?
71
+ _ret
72
+ end
73
+
74
+ def get_fullpath
75
+ redirect.blank? ? fullpath : redirect
76
+ end
77
+
78
+
79
+ def has_excerpt?
80
+ @excerpt_used.nil? && !excerpt.blank?
81
+ end
82
+
83
+ def page_excerpt
84
+ if @excerpt_used.nil?
85
+ @excerpt_used = true
86
+ if excerpt.nil?
87
+ ''
88
+ else
89
+ # excerpt.gsub(/\{\{(.*?)\}\}/) do
90
+ excerpt.gsub(/\{\{(([^\.]*?)\.)?(.*?)\}\}/) do
91
+ (Settings and !$3.nil?) ? Settings.ns($2).get($3).val : "" #temp
92
+ end
93
+ end
94
+ else
95
+ ''
96
+ end
97
+ end
98
+
99
+
100
+ def has_content?
101
+ @content_used.nil? && !content.blank?
102
+ end
103
+
104
+ def page_content
105
+ if @content_used.nil?
106
+ @content_used = true
107
+ if content.nil?
108
+ ''
109
+ else
110
+ # content.gsub(/\{\{(.*?)\}\}/) do
111
+ content.gsub(/\{\{(([^\.]*?)\.)?(.*?)\}\}/) do
112
+ (Settings and !$3.nil?) ? Settings.ns($2).get($3).val : "" #temp
113
+ end
114
+ end
115
+ else
116
+ ''
117
+ end
118
+ end
119
+
120
+ def is_current?(url)
121
+ if fullpath == '/'
122
+ url == '/'
123
+ else
124
+ url.match(clean_regexp)
125
+ end
126
+ end
127
+
128
+ def regexp_prefix
129
+ Hancock::Pages.config.localize ? "(?:#{I18n.available_locales.map { |l| "\\/#{l}"}.join("|")})?" : ""
130
+ end
131
+
132
+ def clean_regexp
133
+ if regexp.blank?
134
+ /^#{regexp_prefix}#{Regexp.escape(fullpath)}$/
135
+ else
136
+ begin
137
+ /#{regexp}/
138
+ rescue
139
+ # not a valid regexp - treat as literal search string
140
+ /#{Regexp.escape(regexp)}/
141
+ end
142
+ end
143
+ end
144
+
145
+ def nav_options
146
+ nav_options_default.merge(nav_options_additions)
147
+ end
148
+
149
+ def nav_options_default
150
+ {highlights_on: clean_regexp}
151
+ end
152
+
153
+ def nav_options_additions
154
+ {}
155
+ end
156
+
157
+ end
158
+ end
159
+ end
@@ -0,0 +1,33 @@
1
+ require 'rails_admin/config/fields/types/has_many_association'
2
+
3
+ module RailsAdmin
4
+ module Config
5
+ module Fields
6
+ module Types
7
+ class HancockConnectable < RailsAdmin::Config::Fields::Types::HasManyAssociation
8
+ RailsAdmin::Config::Fields::Types::register(self)
9
+ include RailsAdmin::Engine.routes.url_helpers
10
+
11
+ register_instance_option :partial do
12
+ :hancock_connectable
13
+ end
14
+
15
+ register_instance_option :autocreate_page_attr do
16
+ :hancock_connectable_autocreate_page
17
+ end
18
+
19
+ register_instance_option :allowed_methods do
20
+ [method_name, autocreate_page_attr]
21
+ end
22
+
23
+ register_instance_option :associated_collection_scope do
24
+ me = bindings[:object]
25
+ Proc.new do |scope|
26
+ scope.unconnected(me).enabled.sorted
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end