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.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +84 -0
- data/Rakefile +1 -0
- data/app/assets/javascripts/hancock/pages/init.coffee +2 -0
- data/app/assets/javascripts/hancock/pages/scrolling.coffee +55 -0
- data/app/assets/javascripts/hancock/pages.coffee +6 -0
- data/app/assets/stylesheets/hancock/pages.sass +1 -0
- data/app/controllers/concerns/hancock/pages/blocksetable.rb +104 -0
- data/app/controllers/concerns/hancock/pages/decorators/pages.rb +15 -0
- data/app/controllers/concerns/hancock/pages/localizeable.rb +66 -0
- data/app/controllers/concerns/hancock/pages/nav_menu.rb +91 -0
- data/app/controllers/concerns/hancock/pages/seo_pages.rb +99 -0
- data/app/controllers/hancock/pages/pages_controller.rb +7 -0
- data/app/helpers/hancock/pages/canonical_helper.rb +12 -0
- data/app/helpers/hancock/pages/pages_helpers.rb +2 -0
- data/app/models/concerns/hancock/pages/canonicalable.rb +22 -0
- data/app/models/concerns/hancock/pages/connectable.rb +36 -0
- data/app/models/concerns/hancock/pages/decorators/block.rb +39 -0
- data/app/models/concerns/hancock/pages/decorators/blockset.rb +39 -0
- data/app/models/concerns/hancock/pages/decorators/menu.rb +39 -0
- data/app/models/concerns/hancock/pages/decorators/page.rb +39 -0
- data/app/models/hancock/pages/block.rb +13 -0
- data/app/models/hancock/pages/blockset.rb +13 -0
- data/app/models/hancock/pages/menu.rb +16 -0
- data/app/models/hancock/pages/page.rb +16 -0
- data/app/views/blocks/_header.html.slim +4 -0
- data/app/views/hancock/pages/pages/show.html.slim +1 -0
- data/app/views/rails_admin/main/_hancock_connectable.html.slim +56 -0
- data/app/views/shared/_obj.html.slim +26 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/config/initializers/hancock_pages.rb +3 -0
- data/config/locales/hancock.pages.ru.yml +54 -0
- data/hancock_cms_pages.gemspec +37 -0
- data/lib/generators/hancock/pages/config/install_generator.rb +13 -0
- data/lib/generators/hancock/pages/config/templates/hancock_pages.erb +14 -0
- data/lib/generators/hancock/pages/migration_generator.rb +18 -0
- data/lib/generators/hancock/pages/models/block_generator.rb +39 -0
- data/lib/generators/hancock/pages/models/blockset_generator.rb +39 -0
- data/lib/generators/hancock/pages/models/decorators_generator.rb +24 -0
- data/lib/generators/hancock/pages/models/menu_generator.rb +39 -0
- data/lib/generators/hancock/pages/models/page_generator.rb +39 -0
- data/lib/generators/hancock/pages/models/templates/block.erb +37 -0
- data/lib/generators/hancock/pages/models/templates/blockset.erb +34 -0
- data/lib/generators/hancock/pages/models/templates/menu.erb +37 -0
- data/lib/generators/hancock/pages/models/templates/page.erb +43 -0
- data/lib/generators/hancock/pages/templates/migration_blocks.rb +42 -0
- data/lib/generators/hancock/pages/templates/migration_pages.rb +48 -0
- data/lib/hancock/pages/admin/block.rb +81 -0
- data/lib/hancock/pages/admin/blockset.rb +72 -0
- data/lib/hancock/pages/admin/menu.rb +48 -0
- data/lib/hancock/pages/admin/page.rb +105 -0
- data/lib/hancock/pages/admin.rb +45 -0
- data/lib/hancock/pages/configuration.rb +35 -0
- data/lib/hancock/pages/controllers/pages.rb +33 -0
- data/lib/hancock/pages/engine.rb +5 -0
- data/lib/hancock/pages/models/active_record/block.rb +16 -0
- data/lib/hancock/pages/models/active_record/blockset.rb +19 -0
- data/lib/hancock/pages/models/active_record/menu.rb +20 -0
- data/lib/hancock/pages/models/active_record/page.rb +22 -0
- data/lib/hancock/pages/models/block.rb +190 -0
- data/lib/hancock/pages/models/blockset.rb +69 -0
- data/lib/hancock/pages/models/menu.rb +48 -0
- data/lib/hancock/pages/models/mongoid/block.rb +34 -0
- data/lib/hancock/pages/models/mongoid/blockset.rb +22 -0
- data/lib/hancock/pages/models/mongoid/menu.rb +16 -0
- data/lib/hancock/pages/models/mongoid/page.rb +43 -0
- data/lib/hancock/pages/models/page.rb +159 -0
- data/lib/hancock/pages/rails_admin_ext/hancock_connectable.rb +33 -0
- data/lib/hancock/pages/rails_admin_ext/menu.rb +147 -0
- data/lib/hancock/pages/routes.rb +46 -0
- data/lib/hancock/pages/version.rb +5 -0
- data/lib/hancock_cms_pages.rb +54 -0
- data/release.sh +6 -0
- 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
|