ab_admin 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -0
- data/Guardfile +1 -1
- data/app/assets/images/admin/flags/b_uk.png +0 -0
- data/app/assets/images/admin/preloader.gif +0 -0
- data/app/assets/javascripts/ab_admin/application.js +1 -28
- data/app/assets/javascripts/ab_admin/components/admin_assets.js.coffee +29 -6
- data/app/assets/javascripts/ab_admin/components/gmaps.js.coffee +120 -91
- data/app/assets/javascripts/ab_admin/components/google_translate.js.coffee +3 -2
- data/app/assets/javascripts/ab_admin/core/batch_actions.js.coffee +4 -7
- data/app/assets/javascripts/ab_admin/core/init.js.coffee +8 -10
- data/app/assets/javascripts/ab_admin/core/ui_utils.js.coffee +53 -24
- data/app/assets/javascripts/ab_admin/core/utils.js.coffee +7 -0
- data/app/assets/javascripts/ab_admin/inputs/datetime_input.js.coffee +1 -2
- data/app/assets/javascripts/ab_admin/main.js +28 -0
- data/app/assets/stylesheets/ab_admin/application.css.scss +1 -10
- data/app/assets/stylesheets/ab_admin/bootstrap_and_overrides.css.scss +4 -0
- data/app/assets/stylesheets/ab_admin/components/_base.css.scss +4 -1
- data/app/assets/stylesheets/ab_admin/components/_form.css.scss +10 -13
- data/app/assets/stylesheets/ab_admin/components/_geo_input.css.scss +5 -9
- data/app/assets/stylesheets/ab_admin/fileupload.css.scss +68 -102
- data/app/assets/stylesheets/ab_admin/main.css.scss +8 -0
- data/app/controllers/admin/base_controller.rb +18 -14
- data/app/controllers/admin/manager_controller.rb +51 -6
- data/app/controllers/admin/users_controller.rb +23 -0
- data/app/views/admin/fileupload/_asset.html.slim +8 -0
- data/app/views/admin/fileupload/_container.html.slim +10 -0
- data/app/views/admin/fileupload/_file.html.slim +5 -0
- data/app/views/admin/fileupload/_ftmpl.html.slim +6 -0
- data/app/views/admin/fileupload/_tmpl.html.slim +9 -0
- data/app/views/admin/users/_form.html.slim +1 -0
- data/config/locales/en.yml +5 -60
- data/config/locales/ru.yml +14 -63
- data/config/routes.rb +7 -4
- data/features/dsl/custom_actions.feature +62 -0
- data/features/dsl/parent_resource.feature +18 -0
- data/features/step_definitions/configuration_steps.rb +6 -0
- data/features/step_definitions/dsl/parent_resource_steps.rb +8 -0
- data/features/step_definitions/settings_steps.rb +1 -1
- data/features/step_definitions/web_steps/transforms_steps.rb +3 -0
- data/features/support/paths.rb +3 -0
- data/lib/ab_admin.rb +5 -0
- data/lib/ab_admin/abstract_resource.rb +28 -4
- data/lib/ab_admin/carrierwave/base_uploader.rb +22 -22
- data/lib/ab_admin/concerns/admin_addition.rb +2 -2
- data/lib/ab_admin/concerns/utilities.rb +4 -4
- data/lib/ab_admin/config/base.rb +18 -0
- data/lib/ab_admin/controllers/head_options.rb +1 -1
- data/lib/ab_admin/core_ext/array.rb +4 -0
- data/lib/ab_admin/core_ext/string.rb +9 -10
- data/lib/ab_admin/hooks/quiet_scope_page.rb +16 -16
- data/lib/ab_admin/hooks/simple_form_hooks.rb +13 -13
- data/lib/ab_admin/i18n_tools/model_translator.rb +67 -0
- data/lib/ab_admin/models/asset.rb +32 -1
- data/lib/ab_admin/models/attachment_file.rb +1 -1
- data/lib/ab_admin/models/locator.rb +7 -0
- data/lib/ab_admin/models/settings.rb +7 -0
- data/lib/ab_admin/models/structure.rb +4 -0
- data/lib/ab_admin/utils.rb +2 -2
- data/lib/ab_admin/version.rb +1 -1
- data/lib/ab_admin/views/admin_helpers.rb +3 -3
- data/lib/ab_admin/views/admin_navigation_helpers.rb +1 -1
- data/lib/ab_admin/views/form_builder.rb +42 -39
- data/lib/ab_admin/views/helpers.rb +5 -0
- data/lib/ab_admin/views/manager_helpers.rb +10 -0
- data/lib/ab_admin/views/search_form_builder.rb +12 -5
- data/lib/generators/ab_admin/install/install_generator.rb +1 -1
- data/lib/generators/ab_admin/install/templates/config/admin_menu.rb +2 -2
- data/lib/generators/ab_admin/install/templates/helpers/admin/structures_helper.rb +1 -1
- data/lib/generators/ab_admin/install/templates/models/attachment_file.rb +2 -0
- data/lib/generators/ab_admin/install/templates/models/locator.rb +0 -1
- data/lib/generators/ab_admin/install/templates/models/settings.rb +0 -1
- data/lib/generators/ab_admin/install/templates/models/static_page.rb +1 -0
- data/lib/generators/ab_admin/install/templates/{scripts → script}/unicorn.sh +0 -0
- data/lib/generators/ab_admin/install/templates/uploaders/avatar_uploader.rb +4 -0
- data/lib/generators/ab_admin/resource/templates/_search_form.haml.erb +1 -1
- data/lib/generators/ab_admin/resource/templates/_search_form.slim.erb +1 -1
- data/lib/generators/ab_admin/resource/templates/_table.haml.erb +1 -2
- data/lib/generators/ab_admin/resource/templates/_table.slim.erb +1 -2
- data/lib/generators/template.rb +1 -0
- data/lib/tasks/i18n.rake +7 -0
- data/spec/dummy/app/models/ab_admin/ab_admin_collection.rb +35 -0
- data/spec/dummy/app/models/ab_admin/ab_admin_product.rb +2 -0
- data/spec/dummy/app/models/admin_menu.rb +4 -2
- data/spec/dummy/app/models/collection.rb +3 -1
- data/spec/generators/install_generator_spec.rb +1 -1
- data/spec/generators/resource_generator_spec.rb +1 -1
- data/spec/models/avatar_spec.rb +29 -2
- metadata +25 -12
- data/app/views/admin/fileupload/_asset.html.erb +0 -5
- data/app/views/admin/fileupload/_container.html.erb +0 -28
- data/app/views/admin/fileupload/_fcontainer.html.erb +0 -25
- data/app/views/admin/fileupload/_file.html.erb +0 -5
- data/app/views/admin/fileupload/_ftmpl.html.erb +0 -7
- data/app/views/admin/fileupload/_tmpl.html.erb +0 -9
- data/lib/ab_admin/utils/csv_builder.rb +0 -52
@@ -71,6 +71,13 @@ $.fn.loadSelect = (optionsDataArray) ->
|
|
71
71
|
$.fn.scrollToEl = ->
|
72
72
|
$('html, body').animate({scrollTop: $(this).offset().top}, 'slow')
|
73
73
|
|
74
|
+
$.fn.toHref = ->
|
75
|
+
$el = $(this)
|
76
|
+
if _.isEmpty($el.data())
|
77
|
+
window.location.href = $el.attr('href')
|
78
|
+
else
|
79
|
+
$el.click()
|
80
|
+
|
74
81
|
$.parseQuery = ->
|
75
82
|
window.location.search.replace("?", "").parseQuery()
|
76
83
|
|
@@ -0,0 +1,28 @@
|
|
1
|
+
//= require i18n
|
2
|
+
//= require i18n/translations
|
3
|
+
//= require jquery_ujs
|
4
|
+
//= require jquery.cookie
|
5
|
+
//= require jquery.pjax
|
6
|
+
//= require jquery.ui.nestedSortable
|
7
|
+
//= require jquery_nested_form
|
8
|
+
//= require jquery.hotkeys
|
9
|
+
//= require bootstrap
|
10
|
+
//= require ab_admin/bootstrap-tab-multi
|
11
|
+
//= require ab_admin/bootstrap-datepicker/core
|
12
|
+
//= require ab_admin/bootstrap-datepicker/locales/bootstrap-datepicker.ru.js
|
13
|
+
//= require ab_admin/bootstrap-timepicker
|
14
|
+
//= require bootstrap-wysihtml5
|
15
|
+
//= require bootstrap-wysihtml5/locales/ru
|
16
|
+
//= require bootstrap-editable-inline
|
17
|
+
//= require select2
|
18
|
+
//= require fancybox
|
19
|
+
//= require jquery.ui.nestedSortable
|
20
|
+
//= require ab_admin/components/sortable_tree
|
21
|
+
//= require ab_admin/components/google_translate
|
22
|
+
//= require ab_admin/components/locator
|
23
|
+
//= require ab_admin/components/admin_assets
|
24
|
+
//= require ab_admin/components/gmaps
|
25
|
+
//= require ab_admin/components/in_place_edit
|
26
|
+
|
27
|
+
//= require ab_admin/core/init
|
28
|
+
//= require ab_admin/inputs/datetime_input
|
@@ -1,10 +1 @@
|
|
1
|
-
//= require ab_admin/
|
2
|
-
//= require ab_admin/bootstrap-timepicker
|
3
|
-
//= require bootstrap-wysihtml5
|
4
|
-
//= require bootstrap-editable
|
5
|
-
//= require select2
|
6
|
-
//= require ab_admin/bootstrap_and_overrides
|
7
|
-
//= require ab_admin/fileupload
|
8
|
-
|
9
|
-
//q= require jquery.fancybox
|
10
|
-
//q= require token_input/token-input-facebook
|
1
|
+
//= require ab_admin/main
|
@@ -17,6 +17,10 @@ $iconWhiteSpritePath: asset-url('glyphicons-halflings-white.png', image);
|
|
17
17
|
@import "ab_admin/components/geo_input";
|
18
18
|
@import "ab_admin/components/sortable_tree";
|
19
19
|
|
20
|
+
.dropdown .caret {
|
21
|
+
margin-left: 5px;
|
22
|
+
}
|
23
|
+
|
20
24
|
.btn .caret {
|
21
25
|
margin-left: 3px;
|
22
26
|
}
|
@@ -92,19 +92,16 @@ textarea.do_wysihtml5 {
|
|
92
92
|
width: 625px;
|
93
93
|
}
|
94
94
|
|
95
|
-
|
96
|
-
|
95
|
+
textarea {
|
96
|
+
width: auto;
|
97
97
|
}
|
98
98
|
|
99
|
-
.
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
text-align: center;
|
108
|
-
color: #999;
|
109
|
-
font-size: 26px;
|
99
|
+
.fancy_select, input.token {
|
100
|
+
min-width: 220px;
|
101
|
+
}
|
102
|
+
|
103
|
+
.simple_form {
|
104
|
+
.fancy_select, input.token {
|
105
|
+
min-width: 400px;
|
106
|
+
}
|
110
107
|
}
|
@@ -1,19 +1,15 @@
|
|
1
1
|
.admin_map {
|
2
2
|
height: 400px;
|
3
|
-
|
4
|
-
width: 80%;
|
5
|
-
margin-top: 0.6em;
|
3
|
+
width: 800px;
|
6
4
|
img {
|
7
5
|
max-width: none;
|
8
6
|
}
|
9
7
|
}
|
10
8
|
.geo_input {
|
11
|
-
label {
|
12
|
-
display: inline-block;
|
13
|
-
width: 10%;
|
14
|
-
}
|
15
9
|
input {
|
16
|
-
|
17
|
-
|
10
|
+
width: 400px;
|
11
|
+
&.geo_ac {
|
12
|
+
width: 800px;
|
13
|
+
}
|
18
14
|
}
|
19
15
|
}
|
@@ -1,120 +1,86 @@
|
|
1
|
-
.
|
1
|
+
.fileupload {
|
2
2
|
overflow: hidden;
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
background: #d1e6dc;
|
9
|
-
overflow: hidden;
|
10
|
-
}
|
11
|
-
.gr-title {
|
12
|
-
display: block;
|
13
|
-
color: #5b6569;
|
14
|
-
font-size: 1.1em;
|
15
|
-
padding: 20px 20px 15px 20px;
|
16
|
-
}
|
17
|
-
.galery {
|
18
|
-
display: block;
|
19
|
-
overflow: hidden;
|
20
|
-
.ill {
|
21
|
-
z-index: 3;
|
22
|
-
display: block;
|
3
|
+
position: relative;
|
4
|
+
padding-top: 10px;
|
5
|
+
padding-left: 10px;
|
6
|
+
&.asset_asset_type {
|
7
|
+
.asset {
|
23
8
|
float: left;
|
24
9
|
overflow: hidden;
|
25
|
-
|
26
|
-
height: 80px;
|
27
|
-
margin-right: 1px;
|
28
|
-
margin-bottom: 1px;
|
10
|
+
margin: 3px;
|
29
11
|
position: relative;
|
30
|
-
|
31
|
-
|
12
|
+
z-index: 3;
|
13
|
+
.del_asset, .main_image, .crop_image, .rotate_image {
|
32
14
|
position: absolute;
|
33
|
-
right: 0px;
|
34
|
-
top: 0px;
|
35
|
-
background: image_url("admin/transp_cross.png") no-repeat left top;
|
36
|
-
width: 17px;
|
37
|
-
height: 17px;
|
38
15
|
cursor: pointer;
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
height: 17px;
|
43
|
-
}
|
16
|
+
background: rgba(100, 131, 137, 0.6);
|
17
|
+
z-index: 4;
|
18
|
+
padding: 1px 3px;
|
44
19
|
}
|
45
|
-
.
|
46
|
-
|
47
|
-
display: block;
|
48
|
-
height: 17px;
|
49
|
-
width: 17px;
|
50
|
-
text-indent: -2000px;
|
51
|
-
position: absolute;
|
52
|
-
padding: 0 0 0 20px;
|
53
|
-
left: 0;
|
20
|
+
.del_asset {
|
21
|
+
right: 0;
|
54
22
|
top: 0;
|
55
|
-
z-index: 1;
|
56
23
|
}
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
background: image_url("main_pic.png") no-repeat;
|
24
|
+
.main_image {
|
25
|
+
right: 0;
|
26
|
+
bottom: 0;
|
61
27
|
}
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
.r-ill {
|
71
|
-
margin-left: -90px;
|
72
|
-
width: 100%;
|
73
|
-
float: right;
|
74
|
-
.r-ill-data {
|
75
|
-
margin-left: 90px;
|
28
|
+
.crop_image {
|
29
|
+
display: none;
|
30
|
+
left: 0;
|
31
|
+
bottom: 0;
|
32
|
+
}
|
33
|
+
.rotate_image {
|
34
|
+
left: 0;
|
35
|
+
bottm: 0;
|
76
36
|
}
|
77
37
|
}
|
78
|
-
.
|
79
|
-
|
80
|
-
width: 80px;
|
81
|
-
overflow: hidden;
|
82
|
-
}
|
83
|
-
.file-name {
|
84
|
-
color: #5b6569;
|
85
|
-
font-size: 0.9em;
|
86
|
-
font-weight: bold;
|
87
|
-
display: block;
|
38
|
+
&.one_asset .main_image {
|
39
|
+
display: none;
|
88
40
|
}
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
41
|
+
}
|
42
|
+
&.file_asset_type {
|
43
|
+
.asset {
|
44
|
+
margin-bottom: 10px;
|
45
|
+
z-index: 2;
|
46
|
+
position: relative;
|
47
|
+
.del_asset {
|
48
|
+
margin-left: 15px;
|
49
|
+
}
|
97
50
|
}
|
98
51
|
}
|
99
|
-
|
52
|
+
.file-name {
|
53
|
+
color: #5b6569;
|
54
|
+
font-size: 0.9em;
|
55
|
+
font-weight: bold;
|
56
|
+
}
|
57
|
+
.file-types {
|
58
|
+
overflow: hidden;
|
59
|
+
padding-top: 10px;
|
60
|
+
padding-left: 5px;
|
61
|
+
z-index: 2;
|
62
|
+
}
|
63
|
+
.fileupload-button {
|
64
|
+
z-index: 3;
|
65
|
+
}
|
100
66
|
|
101
|
-
.file-types {
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
67
|
+
.file-types .type-info {
|
68
|
+
float: right;
|
69
|
+
color: #5b6569;
|
70
|
+
font-size: 0.9em;
|
71
|
+
text-transform: uppercase;
|
72
|
+
}
|
73
|
+
.fileupload-drop-area {
|
74
|
+
position: absolute;
|
75
|
+
top: 0;
|
76
|
+
left: 0;
|
77
|
+
width: 100%;
|
78
|
+
height: 100%;
|
79
|
+
min-height: 70px;
|
80
|
+
z-index: 1;
|
81
|
+
text-align: center;
|
82
|
+
color: #999;
|
83
|
+
font-size: 18px;
|
84
|
+
}
|
106
85
|
|
107
|
-
.file-types .type-info {
|
108
|
-
display: block;
|
109
|
-
float: right;
|
110
|
-
color: #5b6569;
|
111
|
-
font-size: 0.9em;
|
112
86
|
}
|
113
|
-
.fileupload.file_asset_type {
|
114
|
-
.fileupload-list .asset {
|
115
|
-
width: auto !important;
|
116
|
-
height: auto !important;
|
117
|
-
float: none;
|
118
|
-
margin-bottom: 10px;
|
119
|
-
}
|
120
|
-
}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
//= require ab_admin/bootstrap-datepicker
|
2
|
+
//= require ab_admin/bootstrap-timepicker
|
3
|
+
//= require bootstrap-wysihtml5
|
4
|
+
//= require bootstrap-editable
|
5
|
+
//= require select2
|
6
|
+
//= require fancybox
|
7
|
+
//= require ab_admin/bootstrap_and_overrides
|
8
|
+
//= require ab_admin/fileupload
|
@@ -9,17 +9,17 @@ class Admin::BaseController < ::InheritedResources::Base
|
|
9
9
|
before_filter :authenticate_user!, :require_moderator
|
10
10
|
before_filter :add_breadcrumbs, :set_title, :set_user_vars, :unless => :xhr?
|
11
11
|
|
12
|
-
class_attribute :
|
12
|
+
class_attribute :export_builder, :batch_action_list, :instance_reader => false, :instance_writer => false
|
13
13
|
self.batch_action_list = [AbAdmin::Config::BatchAction.new(:destroy, :confirm => I18n.t('admin.delete_confirmation'))]
|
14
14
|
|
15
15
|
has_scope :ids, :type => :array
|
16
16
|
|
17
17
|
helper_method :admin?, :moderator?
|
18
18
|
|
19
|
-
helper_method :button_scopes, :collection_action?, :action_items, :resource_action_items,
|
19
|
+
helper_method :button_scopes, :collection_action?, :action_items, :resource_action_items,
|
20
20
|
:preview_resource_path, :get_subject, :settings, :batch_action_list, :tree_node_renderer
|
21
21
|
|
22
|
-
respond_to :json
|
22
|
+
respond_to :json
|
23
23
|
|
24
24
|
rescue_from ::CanCan::AccessDenied, :with => :render_unauthorized
|
25
25
|
|
@@ -98,10 +98,6 @@ class Admin::BaseController < ::InheritedResources::Base
|
|
98
98
|
self.class.batch_action_list
|
99
99
|
end
|
100
100
|
|
101
|
-
def export_options
|
102
|
-
{:column_names => csv_builder.columns.map(&:name), :column_data => csv_builder.columns.map(&:data), :column_separator => csv_builder.column_separator}
|
103
|
-
end
|
104
|
-
|
105
101
|
def self.inherited(base)
|
106
102
|
super
|
107
103
|
base.class_eval do
|
@@ -114,12 +110,16 @@ class Admin::BaseController < ::InheritedResources::Base
|
|
114
110
|
{:errors => resource.errors.full_messages.map { |m| "<br/> - #{m}" }.join.html_safe}
|
115
111
|
end
|
116
112
|
|
117
|
-
def self.
|
118
|
-
self.
|
113
|
+
def self.export(options={}, &block)
|
114
|
+
self.export_builder = ::AbAdmin::Config::Export.new(options, &block)
|
115
|
+
end
|
116
|
+
|
117
|
+
def export_builder
|
118
|
+
self.class.export_builder ||= ::AbAdmin::Config::Export.default_for_model(resource_class)
|
119
119
|
end
|
120
120
|
|
121
|
-
def
|
122
|
-
|
121
|
+
def export_options
|
122
|
+
export_builder.render_options
|
123
123
|
end
|
124
124
|
|
125
125
|
def set_title
|
@@ -171,8 +171,7 @@ class Admin::BaseController < ::InheritedResources::Base
|
|
171
171
|
def add_breadcrumbs
|
172
172
|
@breadcrumbs = []
|
173
173
|
if parent?
|
174
|
-
@breadcrumbs << {:name => parent_class.model_name.human(:count => 9),
|
175
|
-
:url => {:action => :index, :controller => "admin/#{parent_class.model_name.plural}"}}
|
174
|
+
@breadcrumbs << {:name => parent_class.model_name.human(:count => 9), :url => parent_collection_path}
|
176
175
|
@breadcrumbs << {:name => AbAdmin.display_name(parent), :url => parent_path}
|
177
176
|
end
|
178
177
|
@breadcrumbs << {:name => resource_class.model_name.human(:count => 9), :url => collection_path}
|
@@ -181,6 +180,10 @@ class Admin::BaseController < ::InheritedResources::Base
|
|
181
180
|
end
|
182
181
|
end
|
183
182
|
|
183
|
+
def parent_collection_path
|
184
|
+
{:action => :index, :controller => "admin/#{parent_class.model_name.plural}"}
|
185
|
+
end
|
186
|
+
|
184
187
|
def tree_node_renderer
|
185
188
|
@tree_node_renderer ||= lambda { |r| link_to AbAdmin.display_name(r), resource_path(r), :class => 'tree-item_link' }
|
186
189
|
end
|
@@ -277,7 +280,8 @@ class Admin::BaseController < ::InheritedResources::Base
|
|
277
280
|
end
|
278
281
|
|
279
282
|
def get_role
|
280
|
-
return :admin if admin?
|
283
|
+
return [:admin, :moderator] if admin?
|
284
|
+
return [:moderator] if moderator?
|
281
285
|
nil
|
282
286
|
end
|
283
287
|
|
@@ -8,8 +8,53 @@ class ::Admin::ManagerController < ::Admin::BaseController
|
|
8
8
|
|
9
9
|
helper_method :manager, :admin_partial_name
|
10
10
|
|
11
|
+
def custom_action
|
12
|
+
custom_action = manager.custom_action_for(params[:custom_action], self)
|
13
|
+
if custom_action.options[:method] && custom_action.options[:method] != request.method_symbol
|
14
|
+
raise ActionController::RoutingError.new("AbAdmin custom action for #{params[:custom_action]} not found")
|
15
|
+
end
|
16
|
+
instance_exec(&custom_action.data)
|
17
|
+
end
|
18
|
+
|
11
19
|
protected
|
12
20
|
|
21
|
+
def begin_of_association_chain
|
22
|
+
parent
|
23
|
+
end
|
24
|
+
|
25
|
+
def parent
|
26
|
+
return @parent if defined?(@parent)
|
27
|
+
@parent = begin
|
28
|
+
return if !params[:parent_resource] && !params[:parent_id]
|
29
|
+
assoc_name, r_id = params[:parent_resource].singularize.to_sym, params[:parent_id]
|
30
|
+
parent_config = manager.parent_resources.detect { |conf| conf.name == assoc_name }
|
31
|
+
return unless parent_config
|
32
|
+
assoc = resource_class.reflect_on_association(parent_config.name)
|
33
|
+
return unless assoc
|
34
|
+
assoc.klass.find(r_id)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def parent?
|
39
|
+
!!parent
|
40
|
+
end
|
41
|
+
|
42
|
+
def parent_type
|
43
|
+
parent.class.name.underscore.to_sym
|
44
|
+
end
|
45
|
+
|
46
|
+
def parent_class
|
47
|
+
parent.class
|
48
|
+
end
|
49
|
+
|
50
|
+
def parent_path
|
51
|
+
"/admin/#{parent_class.model_name.plural}/#{parent.id}"
|
52
|
+
end
|
53
|
+
|
54
|
+
def parent_collection_path
|
55
|
+
"/admin/#{parent_class.model_name.plural}"
|
56
|
+
end
|
57
|
+
|
13
58
|
def tree_node_renderer
|
14
59
|
manager.tree_node_renderer || super
|
15
60
|
end
|
@@ -49,16 +94,16 @@ class ::Admin::ManagerController < ::Admin::BaseController
|
|
49
94
|
raise ActionController::RoutingError.new("AbAdmin action #{action_name} for #{resource_class.name} not found")
|
50
95
|
end
|
51
96
|
manager_instance
|
52
|
-
|
53
|
-
|
97
|
+
rescue NameError => e
|
98
|
+
raise ActionController::RoutingError.new("AbAdmin manager_model for #{resource_class.name} not found (#{e.message})")
|
54
99
|
end
|
55
100
|
end
|
56
101
|
|
57
102
|
def resource_class
|
58
103
|
@model ||= begin
|
59
104
|
params[:model_name].singularize.classify.constantize
|
60
|
-
rescue NameError
|
61
|
-
raise ActionController::RoutingError.new("AbAdmin model #{params[:model_name]} not found")
|
105
|
+
rescue NameError => e
|
106
|
+
raise ActionController::RoutingError.new("AbAdmin model #{params[:model_name]} not found (#{e.message})")
|
62
107
|
end
|
63
108
|
end
|
64
109
|
|
@@ -98,12 +143,12 @@ class ::Admin::ManagerController < ::Admin::BaseController
|
|
98
143
|
|
99
144
|
def edit_resource_path(record=nil, options={})
|
100
145
|
record ||= resource
|
101
|
-
admin_edit_path(options.merge(:model_name =>
|
146
|
+
admin_edit_path(options.merge(:model_name => record.class.model_name.plural, :id => record.id))
|
102
147
|
end
|
103
148
|
|
104
149
|
def resource_path(record=nil, options={})
|
105
150
|
record ||= resource
|
106
|
-
admin_show_path(options.merge(:model_name =>
|
151
|
+
admin_show_path(options.merge(:model_name => record.class.model_name.plural, :id => record.id))
|
107
152
|
end
|
108
153
|
|
109
154
|
def self.cancan_resource_class
|