ab_admin 0.8.3 → 0.9.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 (114) hide show
  1. checksums.yaml +4 -4
  2. data/MIT-LICENSE +1 -1
  3. data/README.md +11 -5
  4. data/app/assets/javascripts/ab_admin/components/admin_assets.js.coffee +0 -25
  5. data/app/assets/javascripts/ab_admin/components/google_translate.js.coffee +3 -5
  6. data/app/assets/javascripts/ab_admin/components/in_place_edit.js.coffee +5 -1
  7. data/app/assets/javascripts/ab_admin/core/columns_hider.js.coffee +24 -23
  8. data/app/assets/javascripts/ab_admin/core/init.js.coffee +6 -2
  9. data/app/assets/javascripts/ab_admin/core/search_form.js.coffee +1 -7
  10. data/app/assets/javascripts/ab_admin/core/ui_utils.js.coffee +2 -6
  11. data/app/assets/javascripts/ab_admin/core/utils.js.coffee +8 -2
  12. data/app/assets/javascripts/ab_admin/main.js +2 -2
  13. data/app/assets/stylesheets/ab_admin/bootstrap_and_overrides.scss +35 -10
  14. data/app/assets/stylesheets/ab_admin/components/_base.scss +21 -1
  15. data/app/assets/stylesheets/ab_admin/components/_form.scss +13 -17
  16. data/app/assets/stylesheets/ab_admin/components/_grid_view.scss +2 -2
  17. data/app/assets/stylesheets/ab_admin/components/_locale_tabs.scss +11 -23
  18. data/app/assets/stylesheets/ab_admin/components/_navigation.scss +0 -9
  19. data/app/assets/stylesheets/ab_admin/components/_table_view.scss +10 -2
  20. data/app/assets/stylesheets/ab_admin/components/_tooltip.scss +80 -0
  21. data/app/assets/stylesheets/ab_admin/components/_tree_view.scss +1 -1
  22. data/app/assets/stylesheets/ab_admin/devise.scss +2 -2
  23. data/app/assets/stylesheets/ab_admin/fileupload.scss +2 -9
  24. data/app/assets/stylesheets/ab_admin/main.scss +0 -1
  25. data/app/controllers/admin/base_controller.rb +67 -63
  26. data/app/controllers/admin/dashboards_controller.rb +2 -2
  27. data/app/controllers/admin/locators_controller.rb +8 -6
  28. data/app/controllers/admin/manager_controller.rb +2 -2
  29. data/app/controllers/admin/static_pages_controller.rb +0 -4
  30. data/app/controllers/admin/structures_controller.rb +2 -2
  31. data/app/views/admin/assets/batch_edit.html.slim +1 -1
  32. data/app/views/admin/base/_search_layout.html.slim +6 -5
  33. data/app/views/admin/base/create.js.erb +5 -2
  34. data/app/views/admin/base/index.html.slim +4 -4
  35. data/app/views/admin/base/update.js.erb +5 -0
  36. data/app/views/admin/fileupload/_asset_templates.html.slim +1 -2
  37. data/app/views/admin/fileupload/_image.html.slim +1 -2
  38. data/app/views/admin/locators/edit.html.slim +7 -6
  39. data/app/views/admin/manager/_map.html.slim +4 -0
  40. data/app/views/admin/manager/_table.html.slim +1 -1
  41. data/app/views/admin/shared/_content_actions.html.slim +19 -21
  42. data/app/views/admin/shared/_flash.html.slim +5 -4
  43. data/app/views/admin/shared/_locale_tabs.html.slim +2 -2
  44. data/app/views/admin/shared/_main_menu.html.slim +1 -1
  45. data/app/views/admin/structures/_form.html.slim +1 -1
  46. data/app/views/admin/users/_form.html.slim +1 -1
  47. data/app/views/admin/users/_search_form.html.slim +1 -1
  48. data/app/views/layouts/admin/_footer.html.slim +0 -1
  49. data/app/views/layouts/admin/_navigation.html.slim +1 -1
  50. data/app/views/layouts/admin/application.html.slim +2 -2
  51. data/config/locales/de.yml +1 -2
  52. data/config/locales/en.yml +1 -2
  53. data/config/locales/ru.yml +0 -1
  54. data/config/locales/uk.yml +0 -1
  55. data/lib/ab_admin.rb +34 -33
  56. data/lib/ab_admin/abstract_resource.rb +1 -1
  57. data/lib/ab_admin/carrierwave/base_uploader.rb +1 -2
  58. data/lib/ab_admin/concerns/admin_addition.rb +0 -30
  59. data/lib/ab_admin/concerns/translations_macro.rb +97 -0
  60. data/lib/ab_admin/concerns/utilities.rb +1 -1
  61. data/lib/ab_admin/config/base.rb +7 -0
  62. data/lib/ab_admin/controllers/callbacks.rb +3 -26
  63. data/lib/ab_admin/core_ext/array.rb +4 -48
  64. data/lib/ab_admin/core_ext/hash.rb +2 -31
  65. data/lib/ab_admin/core_ext/other.rb +0 -6
  66. data/lib/ab_admin/core_ext/string.rb +0 -80
  67. data/lib/ab_admin/engine.rb +1 -0
  68. data/lib/ab_admin/hooks/will_paginate_id_prefetch.rb +8 -6
  69. data/lib/ab_admin/hooks/will_paginate_no_uri.rb +1 -1
  70. data/lib/ab_admin/i18n_tools/google_translate.rb +3 -1
  71. data/lib/ab_admin/i18n_tools/model_translator.rb +1 -1
  72. data/lib/ab_admin/models/header.rb +2 -2
  73. data/lib/ab_admin/models/locator.rb +28 -2
  74. data/lib/ab_admin/models/user.rb +12 -48
  75. data/lib/ab_admin/utils/csv_document.rb +5 -3
  76. data/lib/ab_admin/utils/eval_helpers.rb +6 -3
  77. data/lib/ab_admin/utils/xls_document.rb +18 -16
  78. data/lib/ab_admin/version.rb +1 -1
  79. data/lib/ab_admin/views/admin_helpers.rb +10 -12
  80. data/lib/ab_admin/views/admin_navigation_helpers.rb +7 -8
  81. data/lib/ab_admin/views/form_builder.rb +7 -5
  82. data/lib/ab_admin/views/helpers.rb +0 -9
  83. data/lib/ab_admin/views/inputs/ckeditor_input.rb +4 -4
  84. data/lib/ab_admin/views/manager_helpers.rb +8 -5
  85. data/lib/ab_admin/views/search_form_builder.rb +2 -2
  86. data/lib/ab_admin/views/will_paginate_bootstrap_renderer.rb +60 -0
  87. data/lib/generators/ab_admin/glob/glob_generator.rb +4 -5
  88. data/lib/generators/ab_admin/glob/templates/migration.erb +10 -7
  89. data/lib/generators/ab_admin/install/templates/config/ab_admin.rb.erb +1 -1
  90. data/lib/generators/ab_admin/install/templates/models/user.rb +0 -11
  91. data/lib/generators/ab_admin/install/templates/spec/spec_helper.rb +0 -1
  92. data/lib/generators/ab_admin/install/templates/spec/support/database_cleaner.rb +8 -11
  93. data/lib/generators/ab_admin/model/model_generator.rb +3 -4
  94. data/lib/generators/ab_admin/model/templates/resource.erb +5 -2
  95. data/lib/generators/ab_admin/resource/templates/controller.erb +2 -2
  96. metadata +37 -79
  97. data/app/assets/images/admin/Jcrop.gif +0 -0
  98. data/app/assets/images/admin/flags/de.png +0 -0
  99. data/app/assets/images/admin/flags/en.png +0 -0
  100. data/app/assets/images/admin/flags/es.png +0 -0
  101. data/app/assets/images/admin/flags/fr.png +0 -0
  102. data/app/assets/images/admin/flags/it.png +0 -0
  103. data/app/assets/images/admin/flags/ja.png +0 -0
  104. data/app/assets/images/admin/flags/pl.png +0 -0
  105. data/app/assets/images/admin/flags/ru.png +0 -0
  106. data/app/assets/images/admin/flags/uk.png +0 -0
  107. data/app/assets/javascripts/ab_admin/components/croppable_image.js.coffee +0 -33
  108. data/app/assets/stylesheets/ab_admin/components/_columns_hider.scss +0 -5
  109. data/app/assets/stylesheets/ab_admin/components/_perms.scss +0 -39
  110. data/app/views/admin/shared/_columns_hider.html.slim +0 -9
  111. data/lib/ab_admin/hooks/globalize_locale_suffix_accessors.rb +0 -25
  112. data/lib/ab_admin/hooks/globalize_valid_locale.rb +0 -9
  113. data/lib/generators/ab_admin/ckeditor_assets/ckeditor_assets_generator.rb +0 -19
  114. data/lib/generators/template.rb +0 -96
@@ -1,5 +1,5 @@
1
1
  .grid_view {
2
- #columns_hider_show, .pagination .pagination, .per_page {
2
+ #columns_hider_wrap, .pagination .pagination, .per_page {
3
3
  display: none;
4
4
  }
5
5
  .pagination_info {
@@ -21,7 +21,7 @@
21
21
 
22
22
  #main {
23
23
  .grid_view {
24
- #columns_hider_show {
24
+ #columns_hider_wrap {
25
25
  display: none;
26
26
  }
27
27
  .content_actions {
@@ -3,43 +3,31 @@
3
3
  }
4
4
 
5
5
  .locale_tabs {
6
- @each $locale in ru, uk, en, it, de, fr, es, pl {
7
- li {
8
- a.ico_#{$locale} {
9
- opacity: 0.5;
10
- padding-left: 12px;
11
- }
12
- &.active a.ico_#{$locale} {
13
- opacity: 1;
14
- }
6
+ .nav-tabs li {
7
+ a {
8
+ opacity: 0.5;
9
+ font-size: 28px;
10
+ padding: 8px 12px;
15
11
  }
16
-
17
- .t_locale_#{$locale} {
18
- background: image-url("admin/flags/#{$locale}.png") 10px center no-repeat;
19
- }
20
- ##{$locale} {
21
- .t_locale_#{$locale} {
22
- display: none;
23
- }
12
+ &.active a {
13
+ opacity: 1;
14
+ padding: 14px 12px 2px;
24
15
  }
25
16
  }
26
17
  }
27
18
 
28
19
  .t_locales {
29
20
  position: absolute;
30
- top: 0;
31
- left: -5px;
32
- height: 60px;
33
- width: 40px;
21
+ top: 25px;
22
+ left: 2px;
34
23
  margin-left: 5px;
35
24
  }
36
25
 
37
26
  .t_locale {
38
27
  cursor: pointer;
39
- width: 30px;
40
- height: 19px;
41
28
  padding: 5px;
42
29
  opacity: 0.6;
30
+ font-size: 26px;
43
31
  &:hover {
44
32
  opacity: 1;
45
33
  }
@@ -74,15 +74,6 @@
74
74
  }
75
75
  }
76
76
 
77
- #columns_hider {
78
- width: 60%;
79
- margin-left: -30%;
80
- }
81
-
82
- #columns_hider_show {
83
- margin-left: 10px;
84
- }
85
-
86
77
  #lang_bar img {
87
78
  height: 16px;
88
79
  width: 24px;
@@ -93,8 +93,8 @@ table.index_table {
93
93
  border: none;
94
94
  .actions_panel-wrap_outer {
95
95
  position: relative;
96
- top: 0px;
97
- bottom: 0px;
96
+ top: 0;
97
+ bottom: 0;
98
98
  height: 100%;
99
99
  padding: 0 0 20px 0
100
100
  }
@@ -134,3 +134,11 @@ table.index_table {
134
134
  margin-bottom: 10px;
135
135
  }
136
136
 
137
+ #columns_hider_wrap {
138
+ .dropdown-menu {
139
+ margin-top: 60px;
140
+ }
141
+ label {
142
+ margin: 0 10px;
143
+ }
144
+ }
@@ -0,0 +1,80 @@
1
+ .tool {
2
+ position: relative;
3
+ }
4
+
5
+ .tool::before,
6
+ .tool::after {
7
+ left: 50%;
8
+ position: absolute;
9
+ color: white;
10
+ opacity: 0;
11
+ z-index: -100;
12
+ }
13
+
14
+ //.tool::before,
15
+ //.tool::after,
16
+ .tool:hover::before,
17
+ .tool:focus::before,
18
+ .tool:hover::after,
19
+ .tool:focus::after {
20
+ opacity: 0.8;
21
+ z-index: 100;
22
+ }
23
+
24
+ .tool::before {
25
+ border-style: solid;
26
+ border-width: 4px 3px 0 3px;
27
+ border-color: black transparent transparent transparent;
28
+ bottom: 100%;
29
+ content: "";
30
+ transform: translateX(-50%);
31
+ }
32
+
33
+ .tool::after {
34
+ background: black;
35
+ border-radius: 5px;
36
+ bottom: calc(100% + 4px);;
37
+ color: white;
38
+ content: attr(title);
39
+ padding: 5px 10px;
40
+ transform: translateX(-50%);
41
+ }
42
+
43
+ .tool-left::before, .tool-left::after {
44
+ right: 100%;
45
+ left: auto;
46
+ bottom: 50%;
47
+ margin-bottom: 2px;
48
+ transform: none;
49
+ }
50
+
51
+ .tool-left::before {
52
+ border-width: 3px 2px 3px 4px;
53
+ border-color: transparent transparent transparent black;
54
+ transform: translateY(50%);
55
+ }
56
+
57
+ .tool-left::after {
58
+ white-space: nowrap;
59
+ margin-right: 6px;
60
+ transform: translateY(50%);
61
+ }
62
+
63
+ .tool-bottom::before, .tool-bottom::after {
64
+ bottom: auto;
65
+ top: 100%;
66
+ left: 50%;
67
+ margin-bottom: 2px;
68
+ }
69
+
70
+ .tool-bottom::before {
71
+ border-width: 0 3px 4px 3px;
72
+ border-color: transparent transparent black transparent;
73
+ transform: translateX(-50%);
74
+ }
75
+
76
+ .tool-bottom::after {
77
+ white-space: nowrap;
78
+ margin-top: 4px;
79
+ transform: translateX(-50%);
80
+ }
@@ -46,7 +46,7 @@ ol.sortable_tree {
46
46
 
47
47
  #main {
48
48
  .tree_view {
49
- #columns_hider_show {
49
+ #columns_hider_wrap {
50
50
  display: none;
51
51
  }
52
52
  .content_actions {
@@ -1,5 +1,5 @@
1
- @import "bootstrap";
2
- @import "bootstrap-responsive";
1
+ @import "bootstrap_2_3_2/bootstrap";
2
+ @import "bootstrap_2_3_2/bootstrap-responsive";
3
3
 
4
4
  $element_width: 280px;
5
5
  $element_font_size: 16px;
@@ -1,5 +1,3 @@
1
- //q= require ab_admin/jquery.Jcrop.min
2
-
3
1
  .fileupload {
4
2
  overflow: hidden;
5
3
  position: relative;
@@ -48,7 +46,7 @@
48
46
  margin: 3px;
49
47
  position: relative;
50
48
  z-index: 3;
51
- .destroy_asset, .main_image, .crop_image, .rotate_image {
49
+ .destroy_asset, .main_image, .rotate_image {
52
50
  position: absolute;
53
51
  cursor: pointer;
54
52
  background: rgba(100, 131, 137, 0.6);
@@ -63,14 +61,9 @@
63
61
  right: 0;
64
62
  bottom: 0;
65
63
  }
66
- .crop_image {
67
- display: none;
68
- left: 0;
69
- bottom: 0;
70
- }
71
64
  .rotate_image {
72
65
  left: 0;
73
- bottm: 0;
66
+ bottom: 0;
74
67
  }
75
68
  }
76
69
  &.fileupload-single .main_image {
@@ -1,6 +1,5 @@
1
1
  //= require bootstrap-wysihtml5
2
2
  //= require select2
3
- //= require fancybox
4
3
  //= require ab_admin/bootstrap_and_overrides
5
4
  //= require ab_admin/bootstrap-editable
6
5
  //= require ab_admin/bootstrap-datetimepicker
@@ -8,7 +8,7 @@ class Admin::BaseController < ::InheritedResources::Base
8
8
 
9
9
  define_admin_callbacks :save, :create
10
10
 
11
- before_action :authenticate_user!, :require_require_admin_access, :set_user_vars
11
+ before_action :authenticate_user!, :require_admin_access, :build_settings, :set_user_vars
12
12
  before_action :add_breadcrumbs, :set_title, unless: :xhr?
13
13
 
14
14
  class_attribute :export_builder, :batch_action_list, :button_scopes, instance_reader: false, instance_writer: false
@@ -19,9 +19,10 @@ class Admin::BaseController < ::InheritedResources::Base
19
19
 
20
20
  helper_method :admin?, :moderator?
21
21
 
22
+ attr_reader :settings
22
23
  helper_method :button_scopes, :collection_action?, :action_items, :resource_action_items, :query_params,
23
24
  :preview_resource_path, :get_subject, :settings, :batch_action_list, :tree_node_renderer,
24
- :normalized_index_views, :current_index_view, :pjax?, :xhr?, :max_per_page, :params_for_links
25
+ :pjax?, :xhr?, :params_for_links, :resource_list_id, :ransack_collection, :search_collection
25
26
 
26
27
  rescue_from ::CanCan::AccessDenied, with: :render_unauthorized
27
28
 
@@ -31,13 +32,13 @@ class Admin::BaseController < ::InheritedResources::Base
31
32
  format.csv do
32
33
  authorize! :export, resource_class
33
34
  doc = AbAdmin::Utils::CsvDocument.new(collection, export_options)
34
- send_data(doc.render, filename: doc.filename, type: Mime[:csv], disposition: 'attachment')
35
+ send_data(doc.render(self, locale: params[:locale]), filename: doc.filename, type: Mime[:csv], disposition: 'attachment')
35
36
  end
36
37
  if Mime[:xlsx]
37
38
  format.xlsx do
38
39
  authorize! :export, resource_class
39
40
  doc = AbAdmin::Utils::XlsDocument.new(collection, export_options)
40
- send_data(doc.render, filename: doc.filename, type: Mime[:xlsx], disposition: 'attachment')
41
+ send_data(doc.render(self, locale: params[:locale]), filename: doc.filename, type: Mime[:xlsx], disposition: 'attachment')
41
42
  end
42
43
  end
43
44
  end
@@ -66,7 +67,7 @@ class Admin::BaseController < ::InheritedResources::Base
66
67
 
67
68
  def destroy
68
69
  destroy! do
69
- track_action! if settings[:history]
70
+ track_action! if @settings[:history]
70
71
  redirect_to_on_success
71
72
  end
72
73
  end
@@ -96,7 +97,7 @@ class Admin::BaseController < ::InheritedResources::Base
96
97
  if batch_action.to_s.end_with?('_collection')
97
98
  count = collection.size
98
99
  resource_class.public_send(batch_action, collection, *[params[:batch_params]].compact)
99
- if settings[:history]
100
+ if @settings[:history]
100
101
  if Object.const_defined?('ActiveRecord::Import') && Track.respond_to?(:import)
101
102
  tracks = collection.map { |item| track_action("batch_#{batch_action}", item) }
102
103
  Track.import_from_batch_collection_action(tracks)
@@ -132,13 +133,13 @@ class Admin::BaseController < ::InheritedResources::Base
132
133
  def default_url_options
133
134
  options = {format: nil}
134
135
  options.update instance_exec(&AbAdmin.default_url_options) if AbAdmin.default_url_options
135
- options.update instance_exec(&settings[:default_url_options]) if settings[:default_url_options]
136
+ options.update instance_exec(&@settings[:default_url_options]) if @settings[:default_url_options]
136
137
  options
137
138
  end
138
139
 
139
140
  def apply_batch_action(item, batch_action, *batch_params)
140
141
  success = item.send(batch_action, *batch_params)
141
- track_action!("batch_#{batch_action}", item) if settings[:history]
142
+ track_action!("batch_#{batch_action}", item) if @settings[:history]
142
143
  success
143
144
  end
144
145
 
@@ -181,7 +182,7 @@ class Admin::BaseController < ::InheritedResources::Base
181
182
  end
182
183
 
183
184
  def track_current_action(*)
184
- track_action if settings[:history]
185
+ track_action if @settings[:history]
185
186
  end
186
187
 
187
188
  def flash_interpolation_options
@@ -205,8 +206,22 @@ class Admin::BaseController < ::InheritedResources::Base
205
206
  nil
206
207
  end
207
208
 
208
- def settings
209
- {sidebar: collection_action?, well: (collection_action? || %w(show history).include?(action_name))}.update(AbAdmin.default_resource_settings)
209
+ def custom_settings
210
+ {}
211
+ end
212
+
213
+ def build_settings
214
+ @settings = AbAdmin.default_resource_settings.deep_dup.merge!(custom_settings)
215
+ @settings[:index_views] = Array(@settings[:index_views]).map(&:to_sym)
216
+ if collection_action?
217
+ @settings[:current_index_view] = current_index_view
218
+ @settings[:button_scopes] = @settings[:current_index_view] != :stats
219
+ @settings[:per_page] ||= per_page
220
+ @settings[:per_page_variants] ||= @settings[:per_page_variants].find_all{|n| n <= @settings[:max_per_page] }
221
+ @settings[:sidebar] = true unless @settings.key?(:sidebar)
222
+ @settings[:pagination] = @settings[:pagination_index_views].include?(@settings[:current_index_view])
223
+ end
224
+ @settings[:well] = (collection_action? || %w(show history).include?(action_name)) && @settings[:current_index_view] != :tree unless @settings.key?(:well)
210
225
  end
211
226
 
212
227
  def action_items
@@ -225,7 +240,7 @@ class Admin::BaseController < ::InheritedResources::Base
225
240
  end
226
241
 
227
242
  def collection_action?
228
- %w(index search batch rebuild).include?(action_name)
243
+ @settings[:collection_actions].include?(action_name)
229
244
  end
230
245
 
231
246
  def self.scope(name, options={}, &block)
@@ -271,57 +286,38 @@ class Admin::BaseController < ::InheritedResources::Base
271
286
  @tree_node_renderer ||= lambda { |r| link_to AbAdmin.display_name(r), resource_path(r), class: 'tree-item_link' }
272
287
  end
273
288
 
274
- def search_collection
275
- @search_collection ||= begin
276
- @search = end_of_association_chain.accessible_by(current_ability).ransack(query_params)
277
- with_scopes(@search.result(distinct: @search.object.joins_values.present?)).admin(current_user)
278
- end
279
- end
280
-
281
- def query_params
282
- query = params[:q].try! {|q| q.permit!.to_h} || {}
283
- nested = resource_class.respond_to?(:acts_as_nested_set_options) && current_index_view == 'tree'
284
- query[:s] ||= settings[:default_order] || ('id desc' unless nested)
285
- query.reject_blank
286
- end
287
-
288
- def with_scopes(relation)
289
- relation
290
- end
291
-
292
289
  def collection
290
+ return unless collection_action?
293
291
  @collection ||= begin
294
292
  result = search_collection
295
- result = result.paginate(page: params[:page], per_page: per_page, large: true) if action_name != 'batch' && !settings[:skip_pagination]
293
+ result = result.paginate(page: params[:page], per_page: @settings[:per_page], large: true) if @settings[:pagination]
296
294
  result
297
295
  end
298
296
  end
299
297
 
300
- def per_page
301
- request_per_page = (params[:per_page].presence || cookies[:pp].presence).to_i.nonzero?
302
- params[:per_page] = [request_per_page || AbAdmin.view_default_per_page[current_index_view.to_sym], max_per_page].min
298
+ def search_collection
299
+ return unless collection_action?
300
+ @search_collection ||= with_scopes(ransack_collection.result(distinct: ransack_collection.object.joins_values.present?)).admin(current_user)
303
301
  end
304
302
 
305
- def max_per_page
306
- settings[:max_per_page] || AbAdmin.max_per_page
303
+ def ransack_collection
304
+ return unless collection_action?
305
+ @ransack_collection ||= end_of_association_chain.accessible_by(current_ability).ransack(query_params)
307
306
  end
308
307
 
309
- def set_layout
310
- pjax? ? false : 'admin/application'
308
+ def query_params
309
+ query = params[:q].try! {|q| q.permit!.to_h} || {}
310
+ nested = resource_class.respond_to?(:acts_as_nested_set_options) && @settings[:current_index_view] == :tree
311
+ query[:s] ||= @settings[:default_order] || ('id desc' unless nested)
312
+ query.reject_blank
311
313
  end
312
314
 
313
- def normalized_index_views
314
- Array(settings[:index_view])
315
+ def with_scopes(relation)
316
+ relation
315
317
  end
316
318
 
317
- def current_index_view
318
- index_view = params[:index_view].presence || cookies[:iv].presence
319
- if index_view && normalized_index_views.include?(index_view)
320
- cookies[:iv] = index_view
321
- index_view
322
- else
323
- normalized_index_views.first
324
- end
319
+ def set_layout
320
+ pjax? ? false : 'admin/application'
325
321
  end
326
322
 
327
323
  def back_or_collection
@@ -356,8 +352,8 @@ class Admin::BaseController < ::InheritedResources::Base
356
352
  fv.locale = I18n.locale
357
353
  fv.bg_color = current_user.bg_color
358
354
  fv.admin = admin?
359
- fv.hotkeys = settings[:hotkeys]
360
- fv.list_dblclick = settings[:list_dblclick]
355
+ fv.hotkeys = @settings[:hotkeys]
356
+ fv.list_dblclick = @settings[:list_dblclick]
361
357
  fv.env = Rails.env
362
358
  if resource_class.respond_to?(:model_name)
363
359
  fv.resource_plural = resource_class.model_name.plural
@@ -378,31 +374,23 @@ class Admin::BaseController < ::InheritedResources::Base
378
374
  end
379
375
 
380
376
  def moderator?
381
- user_signed_in? && current_user.moderator?
377
+ current_user.try!(:moderator?)
382
378
  end
383
379
 
384
380
  def admin?
385
- user_signed_in? && current_user.admin?
381
+ current_user.try!(:admin?)
386
382
  end
387
383
 
388
- def require_require_admin_access
384
+ def require_admin_access
389
385
  raise CanCan::AccessDenied unless current_user.admin_access?
390
386
  end
391
387
 
392
- def require_moderator
393
- raise CanCan::AccessDenied unless moderator?
394
- end
395
-
396
- def require_admin
397
- raise CanCan::AccessDenied unless admin?
398
- end
399
-
400
388
  def bind_current_user(*)
401
- resource.user_id = current_user.id if !settings[:skip_bind_current_user] && resource.respond_to?(:user_id)
389
+ resource.user_id = current_user.id if !@settings[:skip_bind_current_user] && resource.respond_to?(:user_id)
402
390
  end
403
391
 
404
392
  def bind_current_updater(*)
405
- resource.updater_id = current_user.id if !settings[:skip_bind_current_updater] && resource.respond_to?(:updater_id)
393
+ resource.updater_id = current_user.id if !@settings[:skip_bind_current_updater] && resource.respond_to?(:updater_id)
406
394
  end
407
395
 
408
396
  def get_subject
@@ -428,4 +416,20 @@ class Admin::BaseController < ::InheritedResources::Base
428
416
  {root: false}
429
417
  end
430
418
  end
419
+
420
+ def resource_list_id
421
+ "list_#{resource_instance_name}_#{resource.id}"
422
+ end
423
+
424
+ private
425
+
426
+ def per_page
427
+ request_per_page = (params[:per_page].presence || cookies[:pp].presence).to_i.nonzero?
428
+ params[:per_page] = [request_per_page || @settings[:view_default_per_page][@settings[:current_index_view]], @settings[:max_per_page]].min
429
+ end
430
+
431
+ def current_index_view
432
+ index_view = params[:index_view].presence.try!(:to_sym)
433
+ @settings[:index_views].include?(index_view) ? index_view : @settings[:index_views].first
434
+ end
431
435
  end