hancock_cms 1.0.1 → 1.0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitattributes +4 -0
- data/app/assets/images/{rails-admin → hancock/rails_admin}/hancock_logo.svg +0 -0
- data/app/assets/javascripts/hancock/cms.coffee +1 -1
- data/app/assets/javascripts/hancock/rails_admin/cms.ui.coffee +10 -38
- data/app/assets/javascripts/hancock/rails_admin/en_ru_switcher.coffee +90 -0
- data/app/assets/javascripts/hancock/rails_admin/enum_with_custom.coffee +41 -0
- data/app/assets/javascripts/hancock/rails_admin/form_controls_fixed.coffee +44 -0
- data/app/assets/javascripts/hancock/rails_admin/leftside_hider.coffee +106 -0
- data/app/assets/javascripts/hancock/rails_admin/multiselect.coffee +8 -0
- data/app/assets/javascripts/hancock/rails_admin/navigation_dropdown.coffee +25 -0
- data/app/assets/javascripts/hancock/rails_admin/navigation_filter.coffee +108 -0
- data/app/assets/javascripts/hancock/rails_admin/navigation_scroll.coffee +12 -0
- data/app/assets/javascripts/jquery.placeholder.js +3 -2
- data/app/assets/javascripts/rails_admin/custom/ui.coffee +1 -0
- data/app/assets/stylesheets/hancock/cms/devise.sass +4 -1
- data/app/assets/stylesheets/hancock/rails_admin/cms.theming.sass +364 -147
- data/app/assets/stylesheets/hancock/rails_admin/fieldsets.sass +198 -0
- data/app/assets/stylesheets/rails_admin/custom/theming.sass +1 -1
- data/app/controllers/concerns/hancock/decorators/home.rb +1 -1
- data/app/controllers/concerns/hancock/errors.rb +4 -6
- data/app/controllers/hancock/registrations_controller.rb +2 -7
- data/app/controllers/hancock/sessions_controller.rb +3 -7
- data/app/helpers/hancock/powered_helper.rb +3 -3
- data/app/helpers/hancock/settings_helper.rb +44 -0
- data/app/helpers/rails_admin/application/hancock_helper.rb +19 -0
- data/app/helpers/rails_admin/hancock/form_builder.rb +44 -0
- data/app/helpers/rails_admin/main/hancock_helper.rb +27 -0
- data/app/models/concerns/hancock/boolean_field.rb +7 -2
- data/app/models/concerns/hancock/decorators/embedded_element.rb +1 -9
- data/app/models/concerns/hancock/enableable.rb +1 -0
- data/app/models/concerns/hancock/hash_field.rb +9 -8
- data/app/models/concerns/hancock/html_field.rb +6 -3
- data/app/models/concerns/hancock/insertion_field.rb +115 -0
- data/app/models/concerns/hancock/mappable.rb +1 -0
- data/app/models/concerns/hancock/model_localizeable.rb +4 -1
- data/app/models/concerns/hancock/rails_admin_patch.rb +22 -3
- data/app/models/concerns/hancock/sort_field.rb +26 -3
- data/app/models/concerns/hancock/sortable.rb +3 -0
- data/app/views/blocks/_footer.html.slim +1 -1
- data/app/views/devise/passwords/edit.html.slim +0 -2
- data/app/views/devise/passwords/new.html.slim +0 -2
- data/app/views/devise/registrations/edit.html.slim +0 -2
- data/app/views/devise/registrations/new.html.slim +0 -2
- data/app/views/devise/sessions/new.html.slim +0 -2
- data/app/views/hancock/home/index.html.slim +4 -1
- data/app/views/layouts/application.html.slim +7 -6
- data/app/views/layouts/hancock/devise/confirmations.html.slim +7 -4
- data/app/views/layouts/hancock/devise/passwords.html.slim +7 -4
- data/app/views/layouts/hancock/devise/registrations.html.slim +7 -4
- data/app/views/layouts/hancock/devise/sessions.html.slim +7 -4
- data/app/views/layouts/hancock/devise/unlocks.html.slim +7 -4
- data/app/views/layouts/rails_admin/_footer.html.slim +2 -2
- data/app/views/layouts/rails_admin/_footer_navigation.html.slim +20 -4
- data/app/views/layouts/rails_admin/_navigation.html.slim +13 -47
- data/app/views/layouts/rails_admin/_secondary_navigation.html.slim +5 -12
- data/app/views/layouts/rails_admin/_sidebar_navigation.html.slim +2 -0
- data/app/views/layouts/rails_admin/_sidebar_navigation_filter.html.slim +3 -0
- data/app/views/layouts/rails_admin/application.html.haml +3 -1
- data/app/views/rails_admin/main/_enum_for_settings_kinds.html.slim +24 -0
- data/app/views/rails_admin/main/_form_hancock_enum_with_custom.slim +20 -0
- data/app/views/rails_admin/main/_hancock_html.html.slim +2 -2
- data/app/views/rails_admin/main/_hancock_html_ml.html.slim +31 -34
- data/app/views/rails_admin/main/edit.html.haml +18 -0
- data/app/views/rails_admin/main/new.html.haml +17 -0
- data/app/views/shared/_admin_link.html.slim +4 -3
- data/config/initializers/rails_admin_mongoid_patch.rb +27 -0
- data/config/locales/en.hancock.yml +1 -0
- data/config/locales/ru.devise.yml +22 -18
- data/config/locales/ru.hancock.yml +2 -0
- data/config/locales/ru.rails_admin.yml +3 -0
- data/hancock_cms.gemspec +4 -1
- data/lib/filename_to_slug.rb +0 -20
- data/lib/generators/hancock/cms/ability_generator.rb +1 -0
- data/lib/generators/hancock/cms/admin_generator.rb +1 -0
- data/lib/generators/hancock/cms/application_generator.rb +1 -0
- data/lib/generators/hancock/cms/assets_generator.rb +1 -0
- data/lib/generators/hancock/cms/layout_generator.rb +1 -0
- data/lib/generators/hancock/cms/model_generator.rb +1 -0
- data/lib/generators/hancock/cms/models/templates/embedded_element.erb +2 -2
- data/lib/generators/hancock/cms/rack_generator.rb +1 -0
- data/lib/generators/hancock/cms/robots_generator.rb +1 -0
- data/lib/generators/hancock/cms/scripts_generator.rb +1 -0
- data/lib/generators/hancock/cms/setup_generator.rb +149 -32
- data/lib/generators/hancock/cms/templates/Gemfile.erb +1 -4
- data/lib/generators/hancock/cms/templates/ability.erb +1 -1
- data/lib/generators/hancock/cms/templates/admin.erb +12 -4
- data/lib/generators/hancock/cms/templates/robots.txt.erb +5 -1
- data/lib/generators/hancock/cms/templates/scripts/db_dump.sh.erb +1 -1
- data/lib/generators/hancock/cms/unicorn_god_generator.rb +1 -0
- data/lib/generators/hancock/cms/utils.rb +2 -0
- data/lib/hancock/admin/embedded_element.rb +7 -2
- data/lib/hancock/admin.rb +141 -17
- data/lib/hancock/controller.rb +9 -0
- data/lib/hancock/engine.rb +28 -36
- data/lib/hancock/model.rb +6 -0
- data/lib/hancock/models/embedded_element.rb +2 -0
- data/lib/hancock/models/mongoid/embedded_element.rb +17 -0
- data/lib/hancock/plugin_configuration.rb +1 -1
- data/lib/hancock/rails_admin_ext/config.rb +21 -4
- data/lib/hancock/rails_admin_ext/hancock_array.rb +19 -0
- data/lib/hancock/rails_admin_ext/hancock_enum.rb +10 -0
- data/lib/hancock/rails_admin_ext/hancock_enum_with_custom.rb +34 -0
- data/lib/hancock/rails_admin_ext/hancock_hash.rb +8 -1
- data/lib/hancock/rails_admin_ext/hancock_html.rb +17 -2
- data/lib/hancock/rails_admin_ext/hancock_multiselect.rb +1 -5
- data/lib/hancock/rails_admin_ext/hancock_slugs.rb +0 -4
- data/lib/hancock/rails_admin_ext/patches/field_patch.rb +2 -1
- data/lib/hancock/rails_admin_ext/patches/fieldset_patch.rb +14 -0
- data/lib/hancock/rails_admin_ext/patches/group_patch.rb +9 -0
- data/lib/hancock/rails_admin_ext/patches/hancock_cms_group.rb +2 -0
- data/lib/hancock/rails_admin_ext/patches/has_fields.rb +27 -0
- data/lib/hancock/rails_admin_ext/patches/navigation_patch.rb +25 -0
- data/lib/hancock/rails_admin_settings_patch.rb +195 -11
- data/lib/hancock/version.rb +1 -1
- data/lib/hancock_cms.rb +10 -9
- data/lib/manual_slug/active_record.rb +8 -8
- data/lib/rails_admin/custom_show_in_app.rb +21 -32
- data/template.rb +11 -10
- metadata +74 -5
@@ -0,0 +1,198 @@
|
|
1
|
+
body.rails_admin .form-horizontal .tab-content .tab-pane > .remove_nested_fields, body.rails_admin .form-horizontal .tab-content .tab-pane > .remove_nested_one_fields
|
2
|
+
opacity: 1
|
3
|
+
z-index: 10
|
4
|
+
left: 50px
|
5
|
+
top: 10px
|
6
|
+
|
7
|
+
body.rails_admin .form-horizontal.denser
|
8
|
+
margin-top: 15px
|
9
|
+
fieldset > legend
|
10
|
+
margin-bottom: 0px
|
11
|
+
legend i
|
12
|
+
font-size: 14px
|
13
|
+
|
14
|
+
body.rails_admin .nav.nav-tabs
|
15
|
+
margin-bottom: -1px
|
16
|
+
border-bottom: 0px
|
17
|
+
padding: 0px 5px
|
18
|
+
|
19
|
+
body.rails_admin .form-horizontal .tab-content .tab-pane
|
20
|
+
fieldset
|
21
|
+
margin-left: 50px
|
22
|
+
margin-right: 25px
|
23
|
+
|
24
|
+
.form-horizontal.denser
|
25
|
+
fieldset.opened
|
26
|
+
min-height: 180px
|
27
|
+
padding-bottom: 10px
|
28
|
+
fieldset
|
29
|
+
.form-group
|
30
|
+
margin-left: 25px !important
|
31
|
+
margin-top: 15px
|
32
|
+
margin-bottom: 15px
|
33
|
+
fieldset.default_fieldset
|
34
|
+
padding-top: 0px
|
35
|
+
border: 0px
|
36
|
+
|
37
|
+
fieldset
|
38
|
+
+border-radius(4px)
|
39
|
+
border: 1px solid #e3e3e3
|
40
|
+
background: #fff
|
41
|
+
margin-bottom: 5px
|
42
|
+
padding: 0px
|
43
|
+
min-height: 30px
|
44
|
+
overflow: visible
|
45
|
+
padding-top: 29px
|
46
|
+
&:first-child
|
47
|
+
margin-top: 5px
|
48
|
+
&:last-child
|
49
|
+
margin-bottom: 0px
|
50
|
+
legend
|
51
|
+
height: 30px
|
52
|
+
padding: 5px 10px
|
53
|
+
font-size: 18px
|
54
|
+
line-height: 20px
|
55
|
+
top: 0px
|
56
|
+
position: absolute
|
57
|
+
.form-group
|
58
|
+
margin-left: 25px
|
59
|
+
margin-right: 0px
|
60
|
+
margin-top: 15px
|
61
|
+
margin-bottom: 15px
|
62
|
+
.input-group
|
63
|
+
float: none !important
|
64
|
+
input[type=checkbox]
|
65
|
+
width: 25px !important
|
66
|
+
height: 25px !important
|
67
|
+
label
|
68
|
+
font-size: 13px
|
69
|
+
label.dropdown-toggle
|
70
|
+
width: auto
|
71
|
+
.help-block
|
72
|
+
margin-bottom: 0px
|
73
|
+
color: #aaaaaa
|
74
|
+
font-size: 12px
|
75
|
+
line-height: 12px
|
76
|
+
.ra-multiselect .ra-multiselect-column
|
77
|
+
float: left
|
78
|
+
margin-bottom: 5px
|
79
|
+
|
80
|
+
fieldset.default.hover
|
81
|
+
> .leftside_hider
|
82
|
+
opacity: 0
|
83
|
+
|
84
|
+
fieldset.hover
|
85
|
+
> .leftside_hider
|
86
|
+
opacity: 1.0
|
87
|
+
|
88
|
+
fieldset
|
89
|
+
+transition(all 0.3s)
|
90
|
+
position: relative
|
91
|
+
> .leftside_hider
|
92
|
+
overflow: hidden
|
93
|
+
width: 65px
|
94
|
+
position: absolute
|
95
|
+
top: 30px
|
96
|
+
bottom: 0px
|
97
|
+
background: rgba(100,100,100,0.05)
|
98
|
+
cursor: pointer
|
99
|
+
padding: 10px 0px
|
100
|
+
z-index: 9
|
101
|
+
opacity: 0
|
102
|
+
+transition(background 0.3s, opacity 0.2s)
|
103
|
+
&:hover
|
104
|
+
background: rgba(100,100,100,0.1)
|
105
|
+
&:active
|
106
|
+
background: rgba(100,100,100,0.075)
|
107
|
+
|
108
|
+
.scroll_fieldset_block
|
109
|
+
overflow: visible
|
110
|
+
position: absolute
|
111
|
+
width: 45px
|
112
|
+
top: 10px
|
113
|
+
margin-left: 10px
|
114
|
+
height: 126px
|
115
|
+
opacity: 0.75
|
116
|
+
cursor: pointer
|
117
|
+
z-index: 10
|
118
|
+
background: #fff
|
119
|
+
border: 1px solid #e3e3e3
|
120
|
+
+border-radius(4px)
|
121
|
+
+transition(scale 0.3s, opacity 0.3s)
|
122
|
+
+transform(scale(0))
|
123
|
+
transform-origin: top center
|
124
|
+
-webkit-transform-origin: top left
|
125
|
+
-o-transform-origin: top left
|
126
|
+
-moz-transform-origin: top left
|
127
|
+
padding: 5px
|
128
|
+
+box-shadow(0px 5px 10px -5px rgba(0, 0, 0, 0.5))
|
129
|
+
&:hover
|
130
|
+
opacity: 1.0
|
131
|
+
> *
|
132
|
+
height: 35px
|
133
|
+
width: 35px
|
134
|
+
+border-radius(4px)
|
135
|
+
margin-bottom: 5px
|
136
|
+
z-index: 11
|
137
|
+
display: flex
|
138
|
+
align-items: center
|
139
|
+
justify-content: center
|
140
|
+
background-color: #e53935
|
141
|
+
+transition(all 0.3s)
|
142
|
+
color: #fff
|
143
|
+
&:hover
|
144
|
+
background-color: #c73800
|
145
|
+
opacity: 1
|
146
|
+
&:active
|
147
|
+
background-color: #e53935
|
148
|
+
opacity: 1
|
149
|
+
|
150
|
+
.links-list
|
151
|
+
width: auto
|
152
|
+
display: inline-flex
|
153
|
+
background: #fff
|
154
|
+
border: 1px solid #e3e3e3
|
155
|
+
+border-radius(4px)
|
156
|
+
+box-shadow(0px 5px 10px -5px rgba(0, 0, 0, 0.5))
|
157
|
+
padding: 3px
|
158
|
+
|
159
|
+
.select_fieldset
|
160
|
+
+transition(all 0.3s)
|
161
|
+
overflow: visible
|
162
|
+
a, span
|
163
|
+
background-color: #e53935
|
164
|
+
display: inline-block
|
165
|
+
text-align: center
|
166
|
+
width: 50px
|
167
|
+
height: 29px
|
168
|
+
margin-right: 3px
|
169
|
+
overflow: hidden
|
170
|
+
white-space: nowrap
|
171
|
+
text-overflow: ellipsis
|
172
|
+
color: #ffffff
|
173
|
+
padding: 0px 3px
|
174
|
+
font-size: 10px
|
175
|
+
line-height: 29px
|
176
|
+
text-decoration: none
|
177
|
+
+transition(all 0.3s)
|
178
|
+
+border-radius(4px)
|
179
|
+
&:hover
|
180
|
+
background-color: #c73800
|
181
|
+
opacity: 1
|
182
|
+
&:last-child
|
183
|
+
margin-right: 0px
|
184
|
+
span
|
185
|
+
background-color: lightblue
|
186
|
+
cursor: auto
|
187
|
+
color: black
|
188
|
+
&:hover
|
189
|
+
background-color: lightblue
|
190
|
+
opacity: 1
|
191
|
+
|
192
|
+
fieldset.opened, fieldset.default_fieldset
|
193
|
+
.scroll_fieldset_block
|
194
|
+
+transform(scale(1))
|
195
|
+
|
196
|
+
fieldset[disabled] .btn-info, fieldset[disabled] .btn-info:hover, fieldset[disabled] .btn-info:focus, fieldset[disabled] .btn-info:active, fieldset[disabled] .btn-info.active
|
197
|
+
background-color: #ef3b36
|
198
|
+
border-color: #e53a36
|
@@ -26,12 +26,10 @@ module Hancock::Errors
|
|
26
26
|
unless exception.nil?
|
27
27
|
Rails.logger.error exception.message
|
28
28
|
Rails.logger.error exception.backtrace.join("\n")
|
29
|
-
capture_exception(exception) if defined?(Raven)
|
29
|
+
Raven.capture_exception(exception) if defined?(Raven)
|
30
30
|
end
|
31
31
|
Rails.logger.error "__________________________"
|
32
32
|
if !user_signed_in?
|
33
|
-
#scope = rails_admin? ? main_app : self
|
34
|
-
#redirect_to scope.new_user_session_path, alert: "Необходимо авторизоваться"
|
35
33
|
authenticate_user!
|
36
34
|
else
|
37
35
|
if rails_admin? and can?(:access, :rails_admin)
|
@@ -44,7 +42,7 @@ module Hancock::Errors
|
|
44
42
|
end
|
45
43
|
|
46
44
|
rescue_from ActionController::InvalidAuthenticityToken do |exception|
|
47
|
-
|
45
|
+
redirect_back(fallback_location: root_path, alert: t('hancock.errors.form_expired'))
|
48
46
|
end
|
49
47
|
end
|
50
48
|
|
@@ -57,7 +55,7 @@ module Hancock::Errors
|
|
57
55
|
unless exception.nil?
|
58
56
|
Rails.logger.error exception.message
|
59
57
|
Rails.logger.error exception.backtrace.join("\n")
|
60
|
-
capture_exception(exception) if defined?(Raven)
|
58
|
+
Raven.capture_exception(exception) if defined?(Raven)
|
61
59
|
end
|
62
60
|
Rails.logger.error "__________________________".freeze
|
63
61
|
render_error(404)
|
@@ -76,7 +74,7 @@ module Hancock::Errors
|
|
76
74
|
Rails.logger.error "__________________________".freeze
|
77
75
|
begin
|
78
76
|
if rails_admin?
|
79
|
-
render
|
77
|
+
render plain: t('hancock.errors.internal_error_full', klass: exception.class.name, message: exception.message), status: 500
|
80
78
|
return
|
81
79
|
end
|
82
80
|
rescue Exception => e
|
@@ -1,20 +1,15 @@
|
|
1
1
|
class Hancock::RegistrationsController < Devise::RegistrationsController
|
2
2
|
prepend_before_action :check_recaptcha, only: [:create]
|
3
3
|
|
4
|
-
private
|
4
|
+
# private :check_recaptcha
|
5
5
|
def check_recaptcha
|
6
6
|
if Hancock.config.recaptcha_support and (!Rails.env.development? or Hancock.config.captcha_on_development)
|
7
|
-
|
8
|
-
true
|
9
|
-
else
|
7
|
+
unless verify_recaptcha
|
10
8
|
self.resource = resource_class.new sign_up_params
|
11
9
|
self.resource.valid?
|
12
10
|
@recaptcha_error = "Вы робот?".freeze
|
13
11
|
respond_with_navigational(resource) { render :new }
|
14
12
|
end
|
15
|
-
|
16
|
-
else
|
17
|
-
true
|
18
13
|
end
|
19
14
|
end
|
20
15
|
|
@@ -1,21 +1,17 @@
|
|
1
1
|
class Hancock::SessionsController < Devise::SessionsController
|
2
2
|
prepend_before_action :check_recaptcha, only: [:create]
|
3
|
+
prepend_before_action :require_no_authentication, :only => [ :new, :create ]
|
3
4
|
|
4
|
-
private
|
5
|
+
# private :check_recaptcha
|
5
6
|
def check_recaptcha
|
6
7
|
if Hancock.config.recaptcha_support and (!Rails.env.development? or Hancock.config.captcha_on_development)
|
7
|
-
|
8
|
-
true
|
9
|
-
else
|
8
|
+
unless verify_recaptcha
|
10
9
|
self.resource = resource_class.new sign_in_params
|
11
10
|
resource.errors.add(:email, "Неверный e-mail или пароль".freeze)
|
12
11
|
resource.errors.add(:password, "Неверный e-mail или пароль".freeze)
|
13
12
|
@recaptcha_error = "Вы робот?".freeze
|
14
13
|
respond_with_navigational(resource) { render :new }
|
15
14
|
end
|
16
|
-
|
17
|
-
else
|
18
|
-
true
|
19
15
|
end
|
20
16
|
end
|
21
17
|
|
@@ -15,7 +15,7 @@ module Hancock::PoweredHelper
|
|
15
15
|
# "hancock-goto-disabled": true
|
16
16
|
# }
|
17
17
|
# }
|
18
|
-
# ret << link_to("Hancock CMS", "
|
18
|
+
# ret << link_to("Hancock CMS", "https://hancock.redrocks.pro/", _attrs)
|
19
19
|
# ret.join.html_safe
|
20
20
|
# end
|
21
21
|
# end
|
@@ -29,12 +29,12 @@ module Hancock::PoweredHelper
|
|
29
29
|
_attrs = {
|
30
30
|
class: "created_by",
|
31
31
|
target: "_blank",
|
32
|
-
title: "
|
32
|
+
title: "Redrocks Creative studio",
|
33
33
|
data: {
|
34
34
|
"hancock-goto-disabled": true
|
35
35
|
}
|
36
36
|
}.freeze
|
37
|
-
ret << link_to("Redrocks studio".freeze, "
|
37
|
+
ret << link_to("Redrocks studio".freeze, "https://redrocks.pro/".freeze, _attrs)
|
38
38
|
ret.join.html_safe
|
39
39
|
end
|
40
40
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Hancock::SettingsHelper
|
2
|
+
|
3
|
+
def hancock_settings(key, options = {}, &block)
|
4
|
+
if key.is_a?(Hash)
|
5
|
+
key, options = key[:key], key
|
6
|
+
end
|
7
|
+
ns = options.delete(:ns)
|
8
|
+
settings_scope = options.delete(:settings_scope) || Settings.ns(ns)
|
9
|
+
key ||= options.delete(:key)
|
10
|
+
options.delete(:key)
|
11
|
+
|
12
|
+
cache_keys = options[:cache_keys_str] || options[:cache_keys] || options[:cache_key] || []
|
13
|
+
if cache_keys.is_a?(::Array)
|
14
|
+
cache_keys = cache_keys.map { |k| k.to_s.strip }.join(" ")
|
15
|
+
else
|
16
|
+
cache_keys = cache_keys.to_s.strip
|
17
|
+
end
|
18
|
+
options.delete(:cache_keys)
|
19
|
+
options.delete(:cache_key)
|
20
|
+
|
21
|
+
# options[:loadable] = cache_keys.blank? if options[:loadable].nil? # temporary
|
22
|
+
options[:cache_keys_str] = cache_keys
|
23
|
+
options[:kind] ||= :html
|
24
|
+
|
25
|
+
options[:default] = capture(&block) if block
|
26
|
+
case (options.delete(:as) || :value).to_sym
|
27
|
+
when :value
|
28
|
+
ret = settings_scope.__send__(key, options)
|
29
|
+
when :object
|
30
|
+
ret = settings_scope.getnc(key)
|
31
|
+
ret.loadable ||= options[:loadable]
|
32
|
+
_old_cache_keys = options[:cache_keys_str].strip.split(" ")
|
33
|
+
options[:cache_keys_str] = (_old_cache_keys + ret.cache_keys).uniq
|
34
|
+
if (options[:cache_keys_str] - _old_cache_keys).blank?
|
35
|
+
ret.cache_keys_str = options[:cache_keys_str]
|
36
|
+
end
|
37
|
+
ret.save unless ret.changes.blank?
|
38
|
+
ret
|
39
|
+
else
|
40
|
+
ret = settings_scope.__send__(key, options)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'rails_admin/application_helper'
|
2
|
+
module RailsAdmin::Application
|
3
|
+
module HancockHelper
|
4
|
+
|
5
|
+
def hancock_navigation(nodes_stack, nodes, level = 0)
|
6
|
+
nodes.collect do |node|
|
7
|
+
model_param = node.abstract_model.to_param
|
8
|
+
url = rails_admin.url_for(action: :index, controller: 'rails_admin/main', model_name: model_param)
|
9
|
+
level_class = " nav-level-#{level}" if level > 0
|
10
|
+
nav_icon = node.navigation_icon ? %(<i class="#{node.navigation_icon}"></i>).html_safe : ''
|
11
|
+
li = content_tag :li, data: {model: model_param, "name-synonyms": node.name_synonyms} do
|
12
|
+
link_to nav_icon + capitalize_first_letter(node.label_plural), url, class: "pjax#{level_class}", title: capitalize_first_letter(node.label_plural)
|
13
|
+
end
|
14
|
+
li + hancock_navigation(nodes_stack, nodes_stack.select { |n| n.parent.to_s == node.abstract_model.model_name }, level + 1)
|
15
|
+
end.join.html_safe
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'rails_admin/form_builder'
|
2
|
+
module RailsAdmin::Hancock
|
3
|
+
class FormBuilder < ::RailsAdmin::FormBuilder
|
4
|
+
|
5
|
+
def fieldset_for(fieldset, nested_in)
|
6
|
+
fields = fieldset.with(
|
7
|
+
form: self,
|
8
|
+
object: @object,
|
9
|
+
view: @template,
|
10
|
+
controller: @template.controller,
|
11
|
+
).visible_fields
|
12
|
+
return if fields.empty?
|
13
|
+
|
14
|
+
_defailt_fieldset = fieldset.name == :default
|
15
|
+
@template.content_tag :fieldset, class: _defailt_fieldset ? 'default_fieldset' : '' do
|
16
|
+
if fieldset.leftside_hider
|
17
|
+
leftside_hider = @template.content_tag(:div, class: 'control-group leftside_hider', title: _defailt_fieldset ? "" : "Свернуть блок") do
|
18
|
+
@template.content_tag(:div, class: 'scroll_fieldset_block') do
|
19
|
+
ret = []
|
20
|
+
ret << @template.content_tag(:div, class: 'scroll_fieldset_top', title: "Вверх блока") do
|
21
|
+
@template.content_tag(:i, "", class: 'fa fa-arrow-up')
|
22
|
+
end
|
23
|
+
ret << @template.content_tag(:div, class: 'select_fieldset', title: "Выбрать другой блок") do
|
24
|
+
@template.content_tag(:i, "", class: 'fa fa-indent')
|
25
|
+
end
|
26
|
+
ret << @template.content_tag(:div, class: 'scroll_fieldset_bottom', title: "Вниз блока") do
|
27
|
+
@template.content_tag(:i, "", class: 'fa fa-arrow-down')
|
28
|
+
end
|
29
|
+
ret.join.html_safe
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
contents = []
|
35
|
+
contents << @template.content_tag(:legend, %(<i class="icon-chevron-#{(fieldset.active? ? 'down' : 'right')}"></i> #{fieldset.label}).html_safe, style: fieldset.name == :default ? 'display:none' : '')
|
36
|
+
contents << @template.content_tag(:p, fieldset.help) if fieldset.help.present?
|
37
|
+
contents << leftside_hider if fieldset.leftside_hider and leftside_hider
|
38
|
+
contents << fields.collect { |field| field_wrapper_for(field, nested_in) }.join
|
39
|
+
contents.join.html_safe
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'rails_admin/main_helper'
|
2
|
+
module RailsAdmin::Main
|
3
|
+
module HancockHelper
|
4
|
+
|
5
|
+
def hancock_rails_admin_form_for(*args, &block)
|
6
|
+
options = args.extract_options!.reverse_merge(builder: RailsAdmin::Hancock::FormBuilder)
|
7
|
+
(options[:html] ||= {})[:novalidate] ||= !RailsAdmin::Config.browser_validations
|
8
|
+
|
9
|
+
form_for(*(args << options), &block) << after_nested_form_callbacks
|
10
|
+
end
|
11
|
+
|
12
|
+
def hancock_main_navigation
|
13
|
+
nodes_stack = RailsAdmin::Config.visible_models(controller: controller)
|
14
|
+
node_model_names = nodes_stack.collect { |c| c.abstract_model.model_name }
|
15
|
+
|
16
|
+
nodes_stack.group_by(&:navigation_label).collect do |navigation_label, nodes|
|
17
|
+
nodes = nodes.select { |n| n.parent.nil? || !n.parent.to_s.in?(node_model_names) }
|
18
|
+
li_stack = hancock_navigation nodes_stack, nodes
|
19
|
+
|
20
|
+
label = navigation_label || t('admin.misc.navigation')
|
21
|
+
|
22
|
+
%(<li class='dropdown-header'>#{capitalize_first_letter label}</li>#{li_stack}) if li_stack.present?
|
23
|
+
end.join.html_safe
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
@@ -1,11 +1,13 @@
|
|
1
1
|
module Hancock::BooleanField
|
2
2
|
extend ActiveSupport::Concern
|
3
|
-
|
3
|
+
|
4
|
+
class_methods do
|
5
|
+
|
4
6
|
def boolean_field(name, default = true)
|
5
7
|
if default.is_a?(Hash)
|
6
8
|
default = default[:default]
|
7
9
|
end
|
8
|
-
|
10
|
+
|
9
11
|
if Hancock.mongoid?
|
10
12
|
field name, type: Mongoid::Boolean, default: default
|
11
13
|
end
|
@@ -16,6 +18,9 @@ module Hancock::BooleanField
|
|
16
18
|
elsif name == 'enabled'
|
17
19
|
scope :disabled, -> { where(enabled: false) }
|
18
20
|
end
|
21
|
+
|
19
22
|
end
|
23
|
+
|
20
24
|
end
|
25
|
+
|
21
26
|
end
|
@@ -3,15 +3,7 @@ module Hancock::Decorators
|
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
5
|
included do
|
6
|
-
|
7
|
-
# def image_styles
|
8
|
-
# super
|
9
|
-
# end
|
10
|
-
#
|
11
|
-
# def image_jcrop_options
|
12
|
-
# super
|
13
|
-
# end
|
14
|
-
#
|
6
|
+
|
15
7
|
# ############# rails_admin ##############
|
16
8
|
# def self.rails_admin_add_fields
|
17
9
|
# [] #super
|
@@ -2,7 +2,7 @@ if Hancock.mongoid?
|
|
2
2
|
module Hancock::HashField
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
|
-
|
5
|
+
class_methods do
|
6
6
|
def hancock_cms_hash_field(name, opts = {})
|
7
7
|
opts.merge!({type: Hash, default: {}})
|
8
8
|
field "#{name}_hash", opts
|
@@ -14,7 +14,7 @@ if Hancock.mongoid?
|
|
14
14
|
if opts[:localize]
|
15
15
|
meth_str_t = "#{meth_str}_translations".freeze
|
16
16
|
meth_hsh_t = "#{meth_hsh}_translations".freeze
|
17
|
-
class_eval <<-
|
17
|
+
class_eval <<-RUBY
|
18
18
|
def #{meth_str_t}=(val)
|
19
19
|
return self.#{meth_hsh_t} = {} if val.blank?
|
20
20
|
_hash = {}
|
@@ -63,10 +63,10 @@ if Hancock.mongoid?
|
|
63
63
|
end
|
64
64
|
true
|
65
65
|
end
|
66
|
-
|
66
|
+
RUBY
|
67
67
|
|
68
68
|
else
|
69
|
-
class_eval <<-
|
69
|
+
class_eval <<-RUBY
|
70
70
|
def #{meth_str}=(val)
|
71
71
|
return self.#{meth_hsh} = {} if val.blank?
|
72
72
|
if val.is_a?(String)
|
@@ -105,9 +105,10 @@ if Hancock.mongoid?
|
|
105
105
|
true
|
106
106
|
end
|
107
107
|
end
|
108
|
-
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
108
|
+
RUBY
|
109
|
+
end #if opts[:localize]
|
110
|
+
end #def hancock_cms_hash_field(name, opts = {})
|
111
|
+
end # class_methods do
|
112
|
+
|
112
113
|
end
|
113
114
|
end
|
@@ -2,7 +2,7 @@ if Hancock.mongoid?
|
|
2
2
|
module Hancock::HtmlField
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
|
-
|
5
|
+
class_methods do
|
6
6
|
def hancock_cms_html_field(name, opts = {})
|
7
7
|
clear_by_default = opts.delete(:clear_by_default)
|
8
8
|
clear_by_default = false unless clear_by_default == true
|
@@ -12,7 +12,9 @@ if Hancock.mongoid?
|
|
12
12
|
field _html_field_name, opts
|
13
13
|
field "#{name}_clear", type: Boolean, default: clear_by_default, localize: opts[:localize]
|
14
14
|
|
15
|
-
|
15
|
+
insertions_for(name) if respond_to?(:insertions_for)
|
16
|
+
|
17
|
+
class_eval <<-RUBY
|
16
18
|
def #{name}
|
17
19
|
self.#{_html_field_name} ||= ""
|
18
20
|
return self.#{_html_field_name} unless self.#{name}_clear
|
@@ -26,8 +28,9 @@ if Hancock.mongoid?
|
|
26
28
|
self.#{_html_field_name} ||= ""
|
27
29
|
Rails::Html::FullSanitizer.new.sanitize(self.#{_html_field_name}.strip)
|
28
30
|
end
|
29
|
-
|
31
|
+
RUBY
|
30
32
|
end
|
31
33
|
end
|
34
|
+
|
32
35
|
end
|
33
36
|
end
|