activeadmin 0.4.4 → 0.5.0.pre
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of activeadmin might be problematic. Click here for more details.
- data/.gitignore +3 -0
- data/.travis.yml +5 -0
- data/CHANGELOG.md +50 -0
- data/CONTRIBUTING.md +2 -4
- data/Gemfile +10 -4
- data/Guardfile +0 -1
- data/LICENSE +1 -1
- data/README.rdoc +19 -8
- data/Rakefile +10 -1
- data/activeadmin.gemspec +2 -1
- data/app/assets/javascripts/active_admin/application.js +3 -9
- data/app/assets/javascripts/active_admin/base.js +1 -0
- data/app/assets/javascripts/active_admin/components/jquery.aa.checkbox-toggler.js.coffee +64 -0
- data/app/assets/javascripts/active_admin/components/jquery.aa.dropdown-menu.js.coffee +107 -0
- data/app/assets/javascripts/active_admin/components/jquery.aa.popover.js.coffee +100 -0
- data/app/assets/javascripts/active_admin/components/jquery.aa.table-checkbox-toggler.js.coffee +27 -0
- data/app/assets/javascripts/active_admin/lib/namespace.js.coffee +3 -0
- data/app/assets/javascripts/active_admin/pages/application.js.coffee +13 -0
- data/app/assets/javascripts/active_admin/pages/batch_actions.js.coffee +26 -0
- data/app/assets/stylesheets/active_admin/_base.css.scss +32 -26
- data/app/assets/stylesheets/active_admin/_forms.css.scss +12 -5
- data/app/assets/stylesheets/active_admin/_header.css.scss +1 -2
- data/app/assets/stylesheets/active_admin/_typography.css.scss +1 -1
- data/app/assets/stylesheets/active_admin/components/_batch_actions.css.scss +11 -0
- data/app/assets/stylesheets/active_admin/components/_buttons.scss +1 -2
- data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +151 -0
- data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +3 -3
- data/app/assets/stylesheets/active_admin/components/_popovers.css.scss +123 -0
- data/app/assets/stylesheets/active_admin/components/_status_tags.scss +1 -1
- data/app/assets/stylesheets/active_admin/components/_table_tools.css.scss +20 -27
- data/app/assets/stylesheets/active_admin/components/_tables.css.scss +1 -0
- data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +38 -36
- data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +5 -5
- data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +7 -3
- data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +19 -17
- data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +2 -2
- data/app/assets/stylesheets/active_admin/print.css.scss +290 -0
- data/app/views/active_admin/dashboard/index.html.arb +1 -1
- data/app/views/active_admin/devise/passwords/edit.html.erb +17 -14
- data/app/views/active_admin/devise/passwords/new.html.erb +4 -4
- data/app/views/active_admin/devise/sessions/new.html.erb +6 -6
- data/app/views/active_admin/devise/shared/_links.erb +6 -6
- data/app/views/active_admin/page/index.html.arb +1 -1
- data/app/views/active_admin/resource/edit.html.arb +1 -1
- data/app/views/active_admin/resource/index.csv.erb +1 -1
- data/app/views/active_admin/resource/index.html.arb +1 -1
- data/app/views/active_admin/resource/new.html.arb +1 -1
- data/app/views/active_admin/resource/show.html.arb +1 -1
- data/app/views/layouts/active_admin.html.arb +1 -1
- data/app/views/layouts/active_admin_logged_out.html.erb +2 -2
- data/cucumber.yml +1 -1
- data/docs/0-installation.md +10 -1
- data/docs/{9-custom-pages.md → 10-custom-pages.md} +0 -0
- data/docs/2-resource-customization.md +19 -1
- data/docs/3-index-pages.md +31 -0
- data/docs/4-csv-format.md +9 -0
- data/docs/6-show-screens.md +1 -1
- data/docs/9-batch-actions.md +161 -0
- data/features/dashboard.feature +31 -8
- data/features/development_reloading.feature +1 -1
- data/features/edit_page.feature +3 -3
- data/features/i18n.feature +35 -0
- data/features/index/batch_actions.feature +98 -0
- data/features/index/filters.feature +26 -0
- data/features/index/format_as_csv.feature +35 -0
- data/features/index/index_as_table.feature +30 -2
- data/features/index/index_blank_slate.feature +8 -3
- data/features/index/index_scopes.feature +130 -24
- data/features/index/page_title.feature +12 -0
- data/features/new_page.feature +3 -3
- data/features/registering_pages.feature +61 -0
- data/features/root_to.feature +17 -0
- data/features/show/default_content.feature +1 -1
- data/features/show/page_title.feature +14 -0
- data/features/sidebar_sections.feature +26 -0
- data/features/site_title.feature +1 -1
- data/features/specifying_actions.feature +7 -6
- data/features/step_definitions/action_link_steps.rb +1 -1
- data/features/step_definitions/additional_web_steps.rb +7 -1
- data/features/step_definitions/batch_action_steps.rb +94 -0
- data/features/step_definitions/configuration_steps.rb +30 -8
- data/features/step_definitions/factory_steps.rb +12 -0
- data/features/step_definitions/format_steps.rb +6 -2
- data/features/step_definitions/i18n_steps.rb +3 -0
- data/features/step_definitions/table_steps.rb +114 -0
- data/features/step_definitions/user_steps.rb +30 -4
- data/features/support/env.rb +54 -15
- data/features/support/paths.rb +2 -0
- data/features/users/logging_in.feature +1 -1
- data/features/users/logging_out.feature +2 -1
- data/features/users/resetting_password.feature +34 -0
- data/lib/active_admin.rb +46 -7
- data/lib/active_admin/application.rb +30 -15
- data/lib/active_admin/base_controller/menu.rb +3 -3
- data/lib/active_admin/batch_actions.rb +17 -0
- data/lib/active_admin/batch_actions/controller.rb +25 -0
- data/lib/active_admin/batch_actions/resource_extension.rb +126 -0
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +35 -0
- data/lib/active_admin/batch_actions/views/batch_action_popover.rb +28 -0
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +63 -0
- data/lib/active_admin/batch_actions/views/selection_cells.rb +37 -0
- data/lib/active_admin/comments.rb +5 -2
- data/lib/active_admin/comments/comment.rb +4 -3
- data/lib/active_admin/comments/views/active_admin_comments.rb +5 -5
- data/lib/active_admin/component.rb +1 -18
- data/lib/active_admin/csv_builder.rb +8 -3
- data/lib/active_admin/dashboards.rb +21 -4
- data/lib/active_admin/dashboards/dashboard_controller.rb +1 -5
- data/lib/active_admin/dependency_checker.rb +1 -1
- data/lib/active_admin/dsl.rb +61 -4
- data/lib/active_admin/engine.rb +1 -1
- data/lib/active_admin/filters.rb +8 -0
- data/lib/active_admin/filters/dsl.rb +12 -0
- data/lib/active_admin/filters/forms.rb +93 -0
- data/lib/active_admin/filters/resource_extension.rb +92 -0
- data/lib/active_admin/form_builder.rb +88 -33
- data/lib/active_admin/helpers/collection.rb +23 -0
- data/lib/active_admin/helpers/optional_display.rb +1 -1
- data/lib/active_admin/inputs/filter_select_input.rb +1 -1
- data/lib/active_admin/locales/bg.yml +37 -1
- data/lib/active_admin/locales/ca.yml +36 -0
- data/lib/active_admin/locales/cs.yml +36 -0
- data/lib/active_admin/locales/da.yml +36 -0
- data/lib/active_admin/locales/de.yml +42 -0
- data/lib/active_admin/locales/en.yml +27 -2
- data/lib/active_admin/locales/es.yml +45 -4
- data/lib/active_admin/locales/fr.yml +22 -0
- data/lib/active_admin/locales/{he_il.yml → he.yml} +37 -2
- data/lib/active_admin/locales/hr.yml +49 -5
- data/lib/active_admin/locales/hu.yml +21 -0
- data/lib/active_admin/locales/it.yml +36 -1
- data/lib/active_admin/locales/ja.yml +36 -0
- data/lib/active_admin/locales/ko.yml +36 -1
- data/lib/active_admin/locales/lv.yml +28 -2
- data/lib/active_admin/locales/nl.yml +42 -1
- data/lib/active_admin/locales/no-NB.yml +15 -0
- data/lib/active_admin/locales/pl.yml +45 -1
- data/lib/active_admin/locales/pt-BR.yml +36 -1
- data/lib/active_admin/locales/ro.yml +67 -0
- data/lib/active_admin/locales/ru.yml +43 -3
- data/lib/active_admin/locales/sv-SE.yml +41 -1
- data/lib/active_admin/locales/tr.yml +80 -0
- data/lib/active_admin/locales/vi.yml +80 -0
- data/lib/active_admin/locales/{zh_cn.yml → zh-CN.yml} +42 -2
- data/lib/active_admin/locales/zh-TW.yml +36 -1
- data/lib/active_admin/menu.rb +55 -30
- data/lib/active_admin/menu_builder.rb +65 -0
- data/lib/active_admin/menu_item.rb +55 -14
- data/lib/active_admin/namespace.rb +25 -55
- data/lib/active_admin/page.rb +15 -10
- data/lib/active_admin/resource.rb +9 -0
- data/lib/active_admin/resource/action_items.rb +4 -4
- data/lib/active_admin/resource/controllers.rb +1 -1
- data/lib/active_admin/resource/menu.rb +19 -21
- data/lib/active_admin/resource/naming.rb +55 -45
- data/lib/active_admin/resource/sidebars.rb +0 -13
- data/lib/active_admin/resource_collection.rb +10 -10
- data/lib/active_admin/resource_controller.rb +5 -5
- data/lib/active_admin/resource_controller/actions.rb +2 -0
- data/lib/active_admin/resource_controller/collection.rb +13 -4
- data/lib/active_admin/resource_dsl.rb +12 -6
- data/lib/active_admin/router.rb +27 -8
- data/lib/active_admin/scope.rb +1 -0
- data/lib/active_admin/sidebar_section.rb +2 -6
- data/lib/active_admin/version.rb +1 -1
- data/lib/active_admin/view_factory.rb +18 -13
- data/lib/active_admin/view_helpers.rb +0 -2
- data/lib/active_admin/view_helpers/auto_link_helper.rb +2 -1
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +24 -25
- data/lib/active_admin/view_helpers/display_helper.rb +1 -1
- data/lib/active_admin/view_helpers/fields_for.rb +44 -0
- data/lib/active_admin/view_helpers/form_helper.rb +6 -0
- data/lib/active_admin/view_helpers/view_factory_helper.rb +1 -1
- data/lib/active_admin/views/components/action_list_popover.rb +29 -0
- data/lib/active_admin/views/components/attributes_table.rb +6 -2
- data/lib/active_admin/views/components/dropdown_menu.rb +73 -0
- data/lib/active_admin/views/components/paginated_collection.rb +13 -14
- data/lib/active_admin/views/components/popover.rb +27 -0
- data/lib/active_admin/views/components/scopes.rb +8 -13
- data/lib/active_admin/views/components/sidebar_section.rb +1 -1
- data/lib/active_admin/views/components/site_title.rb +55 -0
- data/lib/active_admin/views/components/status_tag.rb +4 -4
- data/lib/active_admin/views/components/table_for.rb +18 -18
- data/lib/active_admin/views/dashboard_section_renderer.rb +1 -1
- data/lib/active_admin/views/footer.rb +18 -0
- data/lib/active_admin/views/header.rb +31 -0
- data/lib/active_admin/views/index_as_block.rb +3 -0
- data/lib/active_admin/views/index_as_blog.rb +4 -0
- data/lib/active_admin/views/index_as_grid.rb +2 -0
- data/lib/active_admin/views/index_as_table.rb +19 -6
- data/lib/active_admin/views/pages/base.rb +14 -48
- data/lib/active_admin/views/pages/form.rb +3 -3
- data/lib/active_admin/views/pages/index.rb +56 -24
- data/lib/active_admin/views/pages/layout.rb +2 -2
- data/lib/active_admin/views/pages/page.rb +10 -4
- data/lib/active_admin/views/pages/show.rb +11 -8
- data/lib/active_admin/views/tabbed_navigation.rb +3 -3
- data/lib/active_admin/views/title_bar.rb +50 -0
- data/lib/active_admin/views/utility_nav.rb +41 -0
- data/lib/generators/active_admin/assets/assets_generator.rb +1 -1
- data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +1 -0
- data/lib/generators/active_admin/assets/templates/3.1/active_admin.css.scss +26 -3
- data/lib/generators/active_admin/devise/devise_generator.rb +2 -2
- data/lib/generators/active_admin/install/install_generator.rb +10 -10
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +21 -1
- data/lib/generators/active_admin/install/templates/admin_user.rb.erb +20 -0
- data/lib/generators/active_admin/install/templates/dashboard.rb +33 -0
- data/lib/generators/active_admin/resource/templates/admin.rb +1 -1
- data/spec/integration/memory_spec.rb +1 -11
- data/spec/javascripts/coffeescripts/jquery.aa.checkbox-toggler-spec.js.coffee +50 -0
- data/spec/javascripts/coffeescripts/jquery.aa.popover-spec.js.coffee +82 -0
- data/spec/javascripts/coffeescripts/jquery.aa.table-checkbox-toggler-spec.js.coffee +34 -0
- data/spec/javascripts/compiled/jquery.aa.checkbox-toggler-spec.js +60 -0
- data/spec/javascripts/compiled/jquery.aa.popover-spec.js +106 -0
- data/spec/javascripts/compiled/jquery.aa.table-checkbox-toggler-spec.js +37 -0
- data/spec/javascripts/fixtures/checkboxes.html +9 -0
- data/spec/javascripts/fixtures/table_checkboxes.html +17 -0
- data/spec/javascripts/helpers/SpecHelper.js +3 -0
- data/spec/javascripts/helpers/vendor/jasmine-fixture-0.0.5.js +108 -0
- data/spec/javascripts/helpers/vendor/jasmine-jquery.js +288 -0
- data/spec/javascripts/helpers/vendor/sinon-1.2.0.js +2915 -0
- data/spec/javascripts/support/jasmine.yml +74 -0
- data/spec/javascripts/support/jasmine_config.rb +23 -0
- data/spec/javascripts/support/jasmine_runner.rb +32 -0
- data/spec/javascripts/support/jquery-ui-1.8.16.custom.min.js +34 -0
- data/spec/javascripts/support/jquery.min.js +4 -0
- data/spec/spec_helper.rb +13 -13
- data/spec/spec_helper_without_rails.rb +2 -3
- data/spec/support/detect_rails_version.rb +16 -10
- data/spec/support/rails_template.rb +13 -1
- data/spec/support/templates/admin/stores.rb +1 -0
- data/spec/support/templates/en.yml +6 -0
- data/spec/unit/action_builder_spec.rb +38 -0
- data/spec/unit/application_spec.rb +12 -16
- data/spec/unit/base_controller_shared_examples.rb +3 -6
- data/spec/unit/batch_actions/resource_spec.rb +91 -0
- data/spec/unit/batch_actions/settings_spec.rb +61 -0
- data/spec/unit/breadcrumbs_spec.rb +33 -0
- data/spec/unit/comments_spec.rb +6 -0
- data/spec/unit/config_shared_examples.rb +17 -64
- data/spec/unit/csv_builder_spec.rb +12 -2
- data/spec/unit/dashboard_controller_spec.rb +11 -5
- data/spec/unit/dsl_include_spec.rb +20 -0
- data/spec/unit/{filter_form_builder_spec.rb → filters/filter_form_builder_spec.rb} +10 -7
- data/spec/unit/filters/resource_spec.rb +60 -0
- data/spec/unit/form_builder_spec.rb +180 -28
- data/spec/unit/helpers/collection_spec.rb +65 -0
- data/spec/unit/menu_item_spec.rb +48 -53
- data/spec/unit/menu_spec.rb +46 -32
- data/spec/unit/namespace/register_page_spec.rb +0 -6
- data/spec/unit/namespace/register_resource_spec.rb +1 -8
- data/spec/unit/namespace_spec.rb +8 -2
- data/spec/unit/page_spec.rb +20 -8
- data/spec/unit/resource/naming_spec.rb +27 -26
- data/spec/unit/resource/sidebars_spec.rb +0 -7
- data/spec/unit/resource_collection_spec.rb +11 -11
- data/spec/unit/resource_controller/collection_spec.rb +23 -1
- data/spec/unit/resource_controller/sidebars_spec.rb +46 -0
- data/spec/unit/resource_controller_spec.rb +43 -0
- data/spec/unit/resource_registration_spec.rb +2 -13
- data/spec/unit/resource_spec.rb +0 -42
- data/spec/unit/routing_spec.rb +60 -14
- data/spec/unit/scope_spec.rb +7 -0
- data/spec/unit/view_factory_spec.rb +9 -6
- data/spec/unit/view_helpers/fields_for_spec.rb +41 -0
- data/spec/unit/view_helpers/form_helper_spec.rb +18 -0
- data/spec/unit/views/components/action_list_popover_spec.rb +30 -0
- data/spec/unit/views/components/attributes_table_spec.rb +32 -20
- data/spec/unit/views/components/batch_action_popover_spec.rb +33 -0
- data/spec/unit/views/components/blank_slate_spec.rb +5 -3
- data/spec/unit/views/components/columns_spec.rb +32 -22
- data/spec/unit/views/components/paginated_collection_spec.rb +54 -12
- data/spec/unit/views/components/panel_spec.rb +11 -6
- data/spec/unit/views/components/popover_spec.rb +33 -0
- data/spec/unit/views/components/sidebar_section_spec.rb +6 -6
- data/spec/unit/views/components/site_title_spec.rb +78 -0
- data/spec/unit/views/components/status_tag_spec.rb +17 -10
- data/spec/unit/views/components/table_for_spec.rb +37 -17
- data/spec/unit/views/pages/layout_spec.rb +51 -10
- data/spec/unit/views/tabbed_navigation_spec.rb +44 -23
- data/tasks/js.rake +32 -0
- data/tasks/test.rake +1 -1
- metadata +233 -200
- data/lib/active_admin/arbre.rb +0 -22
- data/lib/active_admin/arbre/builder.rb +0 -125
- data/lib/active_admin/arbre/context.rb +0 -45
- data/lib/active_admin/arbre/html/attributes.rb +0 -20
- data/lib/active_admin/arbre/html/class_list.rb +0 -24
- data/lib/active_admin/arbre/html/collection.rb +0 -27
- data/lib/active_admin/arbre/html/document.rb +0 -42
- data/lib/active_admin/arbre/html/element.rb +0 -161
- data/lib/active_admin/arbre/html/html5_elements.rb +0 -47
- data/lib/active_admin/arbre/html/tag.rb +0 -145
- data/lib/active_admin/arbre/html/text_node.rb +0 -35
- data/lib/active_admin/filter_form_builder.rb +0 -53
- data/lib/active_admin/renderer.rb +0 -87
- data/lib/active_admin/resource_controller/filters.rb +0 -58
- data/lib/active_admin/stylesheets/active_admin/mixins/_utilities.scss +0 -0
- data/lib/active_admin/view_helpers/filter_form_helper.rb +0 -36
- data/lib/active_admin/view_helpers/renderer_helper.rb +0 -29
- data/lib/active_admin/views/header_renderer.rb +0 -82
- data/lib/generators/active_admin/assets/templates/dashboards.rb +0 -36
- data/lib/generators/active_admin/install/templates/dashboards.rb +0 -44
- data/spec/unit/arbre/context_spec.rb +0 -35
- data/spec/unit/arbre/html/element_finder_methods_spec.rb +0 -110
- data/spec/unit/arbre/html/element_spec.rb +0 -236
- data/spec/unit/arbre/html/tag_attributes_spec.rb +0 -61
- data/spec/unit/arbre/html/tag_spec.rb +0 -63
- data/spec/unit/arbre/html_spec.rb +0 -228
- data/spec/unit/renderer_spec.rb +0 -126
@@ -57,6 +57,18 @@ module ActiveAdmin
|
|
57
57
|
# The method to use when generating the link for user logout
|
58
58
|
inheritable_setting :logout_link_method, :get
|
59
59
|
|
60
|
+
# Whether the batch actions are enabled or not
|
61
|
+
inheritable_setting :batch_actions, false
|
62
|
+
|
63
|
+
# Whether filters are enabled
|
64
|
+
inheritable_setting :filters, true
|
65
|
+
|
66
|
+
# The namespace root.
|
67
|
+
inheritable_setting :root_to, 'dashboard#index'
|
68
|
+
|
69
|
+
# Default CSV separator
|
70
|
+
inheritable_setting :csv_column_separator, ','
|
71
|
+
|
60
72
|
# Active Admin makes educated guesses when displaying objects, this is
|
61
73
|
# the list of methods it tries calling in order
|
62
74
|
setting :display_name_methods, [ :display_name,
|
@@ -80,7 +92,8 @@ module ActiveAdmin
|
|
80
92
|
include AssetRegistration
|
81
93
|
|
82
94
|
# Event that gets triggered on load of Active Admin
|
83
|
-
|
95
|
+
BeforeLoadEvent = 'active_admin.application.before_load'.freeze
|
96
|
+
AfterLoadEvent = 'active_admin.application.after_load'.freeze
|
84
97
|
|
85
98
|
def setup!
|
86
99
|
register_default_assets
|
@@ -106,11 +119,17 @@ module ActiveAdmin
|
|
106
119
|
# @returns [Namespace] the new or existing namespace
|
107
120
|
def find_or_create_namespace(name)
|
108
121
|
name ||= :root
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
122
|
+
|
123
|
+
if namespaces[name]
|
124
|
+
namespace = namespaces[name]
|
125
|
+
else
|
126
|
+
namespace = Namespace.new(self, name)
|
127
|
+
namespaces[name] = namespace
|
128
|
+
ActiveAdmin::Event.dispatch ActiveAdmin::Namespace::RegisterEvent, namespace
|
129
|
+
end
|
130
|
+
|
113
131
|
yield(namespace) if block_given?
|
132
|
+
|
114
133
|
namespace
|
115
134
|
end
|
116
135
|
|
@@ -157,17 +176,16 @@ module ActiveAdmin
|
|
157
176
|
# No work to do if we've already loaded
|
158
177
|
return false if loaded?
|
159
178
|
|
179
|
+
ActiveAdmin::Event.dispatch BeforeLoadEvent, self
|
180
|
+
|
160
181
|
# Load files
|
161
182
|
files_in_load_path.each{|file| load file }
|
162
183
|
|
163
184
|
# If no configurations, let's make sure you can still login
|
164
185
|
load_default_namespace if namespaces.values.empty?
|
165
186
|
|
166
|
-
# Load Menus
|
167
|
-
namespaces.values.each{|namespace| namespace.load_menu! }
|
168
|
-
|
169
187
|
# Dispatch an ActiveAdmin::Application::LoadEvent with the Application
|
170
|
-
ActiveAdmin::Event.dispatch
|
188
|
+
ActiveAdmin::Event.dispatch AfterLoadEvent, self
|
171
189
|
|
172
190
|
@@loaded = true
|
173
191
|
end
|
@@ -224,9 +242,10 @@ module ActiveAdmin
|
|
224
242
|
private
|
225
243
|
|
226
244
|
def register_default_assets
|
227
|
-
register_stylesheet 'active_admin.css', :media => '
|
245
|
+
register_stylesheet 'active_admin.css', :media => 'screen'
|
246
|
+
register_stylesheet 'active_admin/print.css', :media => 'print'
|
228
247
|
|
229
|
-
|
248
|
+
unless ActiveAdmin.use_asset_pipeline?
|
230
249
|
register_javascript 'jquery.min.js'
|
231
250
|
register_javascript 'jquery-ui.min.js'
|
232
251
|
register_javascript 'jquery_ujs.js'
|
@@ -255,10 +274,6 @@ module ActiveAdmin
|
|
255
274
|
end
|
256
275
|
|
257
276
|
def generate_stylesheets
|
258
|
-
# This must be required after initialization
|
259
|
-
require 'sass/plugin'
|
260
|
-
require 'active_admin/sass/helpers'
|
261
|
-
|
262
277
|
# Create our own asset pipeline in Rails 3.0
|
263
278
|
if ActiveAdmin.use_asset_pipeline?
|
264
279
|
# Add our mixins to the load path for SASS
|
@@ -18,11 +18,11 @@ module ActiveAdmin
|
|
18
18
|
# Get's called through a before filter
|
19
19
|
def set_current_tab
|
20
20
|
@current_tab = if active_admin_config.belongs_to? && parent?
|
21
|
-
active_admin_config.belongs_to_config.target.
|
21
|
+
active_admin_config.belongs_to_config.target.menu_item
|
22
22
|
else
|
23
|
-
|
23
|
+
active_admin_config.menu_item
|
24
24
|
end
|
25
|
-
end
|
25
|
+
end
|
26
26
|
|
27
27
|
end
|
28
28
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
ActiveAdmin.before_load do |app|
|
2
|
+
require "active_admin/batch_actions/resource_extension"
|
3
|
+
require "active_admin/batch_actions/controller"
|
4
|
+
|
5
|
+
# Add our Extensions
|
6
|
+
ActiveAdmin::Resource.send :include, ActiveAdmin::BatchActions::ResourceExtension
|
7
|
+
ActiveAdmin::ResourceController.send :include, ActiveAdmin::BatchActions::Controller
|
8
|
+
|
9
|
+
# Require all the views
|
10
|
+
require "active_admin/batch_actions/views/batch_action_form"
|
11
|
+
require "active_admin/batch_actions/views/batch_action_popover"
|
12
|
+
require "active_admin/batch_actions/views/selection_cells"
|
13
|
+
require "active_admin/batch_actions/views/batch_action_selector"
|
14
|
+
|
15
|
+
# Register the views with the view factory
|
16
|
+
app.view_factory.register :batch_action_selector => ActiveAdmin::BatchActions::BatchActionSelector
|
17
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module ActiveAdmin
|
2
|
+
module BatchActions
|
3
|
+
module Controller
|
4
|
+
|
5
|
+
# Controller Action that get's called when submitting the batch action form
|
6
|
+
def batch_action
|
7
|
+
if selected_batch_action
|
8
|
+
selected_ids = params[:collection_selection]
|
9
|
+
selected_ids ||= []
|
10
|
+
instance_exec selected_ids, &selected_batch_action.block
|
11
|
+
else
|
12
|
+
raise "Couldn't find batch action \"#{params[:batch_action]}\""
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
protected
|
17
|
+
|
18
|
+
def selected_batch_action
|
19
|
+
return unless params[:batch_action].present?
|
20
|
+
active_admin_config.batch_actions.select { |action| action.sym == params[:batch_action].to_sym }.first
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,126 @@
|
|
1
|
+
module ActiveAdmin
|
2
|
+
|
3
|
+
module BatchActions
|
4
|
+
module ResourceExtension
|
5
|
+
def initialize(*)
|
6
|
+
super
|
7
|
+
@batch_actions = {}
|
8
|
+
add_default_batch_actions
|
9
|
+
end
|
10
|
+
|
11
|
+
# @return [Array] The set of batch actions for this resource
|
12
|
+
def batch_actions
|
13
|
+
batch_actions_enabled? ? @batch_actions.values.sort : []
|
14
|
+
end
|
15
|
+
|
16
|
+
# @return [Boolean] If batch actions are enabled for this resource
|
17
|
+
def batch_actions_enabled?
|
18
|
+
# If the resource config has been set, use it. Otherwise
|
19
|
+
# return the namespace setting
|
20
|
+
@batch_actions_enabled.nil? ? namespace.batch_actions : @batch_actions_enabled
|
21
|
+
end
|
22
|
+
|
23
|
+
# Disable or Enable batch actions for this resource
|
24
|
+
# Set to `nil` to inherit the setting from the namespace
|
25
|
+
def batch_actions=(bool)
|
26
|
+
@batch_actions_enabled = bool
|
27
|
+
end
|
28
|
+
|
29
|
+
# Add a new batch item to a resource
|
30
|
+
# @param [String] title
|
31
|
+
# @param [Hash] options
|
32
|
+
# => :if is a proc that will be called to determine if the BatchAction should be displayed
|
33
|
+
# => :sort_order is used to sort the batch actions ascending
|
34
|
+
# => :confirm is a string which the user will have to accept in order to process the action
|
35
|
+
#
|
36
|
+
def add_batch_action(sym, title, options = {}, &block)
|
37
|
+
@batch_actions[sym] = ActiveAdmin::BatchAction.new(sym, title, options, &block)
|
38
|
+
end
|
39
|
+
|
40
|
+
# Remove a batch action
|
41
|
+
# @param [Symbol] sym
|
42
|
+
# @returns [ActiveAdmin::BatchAction] the batch action, if it was present
|
43
|
+
#
|
44
|
+
def remove_batch_action(sym)
|
45
|
+
@batch_actions.delete(sym.to_sym)
|
46
|
+
end
|
47
|
+
|
48
|
+
# Clears all the existing batch actions for this resource
|
49
|
+
def clear_batch_actions!
|
50
|
+
@batch_actions = {}
|
51
|
+
end
|
52
|
+
|
53
|
+
# Path to the batch action itself
|
54
|
+
def batch_action_path
|
55
|
+
"batch_action_#{route_collection_path}".to_sym
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
# @return [ActiveAdmin::BatchAction] The default "delete" action
|
61
|
+
def add_default_batch_actions
|
62
|
+
destroy_options = {
|
63
|
+
:priority => 100,
|
64
|
+
:confirm => I18n.t('active_admin.batch_actions.delete_confirmation', :plural_model => plural_resource_label.downcase),
|
65
|
+
:if => proc{ controller.action_methods.include?('destroy') }
|
66
|
+
}
|
67
|
+
|
68
|
+
add_batch_action :destroy, I18n.t('active_admin.delete'), destroy_options do |selected_ids|
|
69
|
+
active_admin_config.resource_class.find(selected_ids).each { |r| r.destroy }
|
70
|
+
|
71
|
+
redirect_to collection_path, :notice => I18n.t("active_admin.batch_actions.succesfully_destroyed",
|
72
|
+
:count => selected_ids.count,
|
73
|
+
:model => active_admin_config.resource_label.downcase,
|
74
|
+
:plural_model => active_admin_config.plural_resource_label.downcase)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
class BatchAction
|
82
|
+
|
83
|
+
include Comparable
|
84
|
+
|
85
|
+
attr_reader :block, :title, :sym, :confirm
|
86
|
+
|
87
|
+
# Create a Batch Action
|
88
|
+
#
|
89
|
+
# Examples:
|
90
|
+
#
|
91
|
+
# BatchAction.new :flag
|
92
|
+
# => Will create an action that appears in the action list popover
|
93
|
+
#
|
94
|
+
# BatchAction.new( :flag ) { |selection| redirect_to collection_path, :notice => "#{selection.length} users flagged" }
|
95
|
+
# => Will create an action that uses a block to process the request (which receives one paramater of the selected objects)
|
96
|
+
#
|
97
|
+
# BatchAction.new( "Perform Long Operation on the" ) { |selection| }
|
98
|
+
# => You can create batch actions with a title instead of a Symbol
|
99
|
+
#
|
100
|
+
# BatchAction.new( :flag, :if => proc { can? :flag, AdminUser } ) { |selection| }
|
101
|
+
# => You can provide an optional :if proc to optionally display the batch action
|
102
|
+
#
|
103
|
+
def initialize(sym, title, options = {}, &block)
|
104
|
+
@sym, @title, @options, @block, @confirm = sym, title, options, block, options[:confirm]
|
105
|
+
@block ||= proc {}
|
106
|
+
end
|
107
|
+
|
108
|
+
# Returns the display if block. If the block was not explicitly defined
|
109
|
+
# a default block always returning true will be returned.
|
110
|
+
def display_if_block
|
111
|
+
@options[:if] || proc { true }
|
112
|
+
end
|
113
|
+
|
114
|
+
# Used for sorting
|
115
|
+
def priority
|
116
|
+
@options[:priority] || 10
|
117
|
+
end
|
118
|
+
|
119
|
+
# sort operator
|
120
|
+
def <=>(other)
|
121
|
+
self.priority <=> other.priority
|
122
|
+
end
|
123
|
+
|
124
|
+
end
|
125
|
+
|
126
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'active_admin/component'
|
2
|
+
|
3
|
+
module ActiveAdmin
|
4
|
+
module BatchActions
|
5
|
+
|
6
|
+
# Build an BatchActionForm
|
7
|
+
class BatchActionForm < ActiveAdmin::Component
|
8
|
+
builder_method :batch_action_form
|
9
|
+
|
10
|
+
attr_reader :prefix_html
|
11
|
+
|
12
|
+
def build(options = {}, &block)
|
13
|
+
options[:id] ||= "collection_selection"
|
14
|
+
|
15
|
+
# Open a form
|
16
|
+
text_node form_tag(send(active_admin_config.batch_action_path), :id => options[:id])
|
17
|
+
input(:name => :batch_action, :id => :batch_action, :type => :hidden)
|
18
|
+
|
19
|
+
super(options)
|
20
|
+
end
|
21
|
+
|
22
|
+
# Override the default to_s to include a closing form tag
|
23
|
+
def to_s
|
24
|
+
content + closing_form_tag
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def closing_form_tag
|
30
|
+
'</form>'.html_safe
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'active_admin/views/components/action_list_popover'
|
2
|
+
|
3
|
+
module ActiveAdmin
|
4
|
+
module BatchActions
|
5
|
+
# Build an BatchActionPopover
|
6
|
+
class BatchActionPopover < ActiveAdmin::Views::ActionListPopover
|
7
|
+
builder_method :batch_action_popover
|
8
|
+
|
9
|
+
def build(options = {}, &block)
|
10
|
+
options[:id] ||= "batch_actions_popover"
|
11
|
+
super(options)
|
12
|
+
end
|
13
|
+
|
14
|
+
def action(batch_action, options = {})
|
15
|
+
options[:class] ||= []
|
16
|
+
options[:class] += %w(batch_action)
|
17
|
+
options.merge! "data-action" => batch_action.sym,
|
18
|
+
"data-confirm" => batch_action.confirm
|
19
|
+
|
20
|
+
title = I18n.t("active_admin.batch_actions.labels.#{batch_action.sym}", :default => batch_action.title)
|
21
|
+
label = I18n.t("active_admin.batch_actions.action_label", :title => title)
|
22
|
+
|
23
|
+
super(label, "#", options)
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'active_admin/component'
|
2
|
+
|
3
|
+
module ActiveAdmin
|
4
|
+
module BatchActions
|
5
|
+
|
6
|
+
class BatchActionSelector < ActiveAdmin::Component
|
7
|
+
builder_method :batch_action_selector
|
8
|
+
|
9
|
+
# Build a new batch actions selector
|
10
|
+
#
|
11
|
+
# @param [Array] batch_actions An array of batch actions
|
12
|
+
def build(batch_actions)
|
13
|
+
@batch_actions = Array(batch_actions)
|
14
|
+
@drop_down = build_drop_down
|
15
|
+
end
|
16
|
+
|
17
|
+
# We don't want to wrap the action list (or any other children) in
|
18
|
+
# an unecessary div, so instead we just return the children
|
19
|
+
def to_s
|
20
|
+
children.to_s
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def build_drop_down
|
26
|
+
dropdown_menu I18n.t("active_admin.batch_actions.button_label"),
|
27
|
+
:id => "batch_actions_selector",
|
28
|
+
:button => { :class => "disabled" } do
|
29
|
+
batch_actions_to_display.each do |batch_action|
|
30
|
+
options = {
|
31
|
+
:class => "batch_action",
|
32
|
+
"data-action" => batch_action.sym,
|
33
|
+
"data-confirm" => batch_action.confirm
|
34
|
+
}
|
35
|
+
|
36
|
+
title = I18n.t("active_admin.batch_actions.labels.#{batch_action.sym}", :default => batch_action.title)
|
37
|
+
label = I18n.t("active_admin.batch_actions.action_label", :title => title)
|
38
|
+
|
39
|
+
item label, "#", options
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# Return the set of batch actions that should be displayed
|
45
|
+
def batch_actions_to_display
|
46
|
+
@batch_actions.select do |batch_action|
|
47
|
+
call_method_or_proc_on(self, batch_action.display_if_block)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# def build_batch_action_button
|
52
|
+
# a :class => 'table_tools_button dropdown_button disabled', :href => "#batch_actions_popover", :id => "batch_actions_button" do
|
53
|
+
# text_node I18n.t("active_admin.batch_actions.button_label")
|
54
|
+
# end
|
55
|
+
# end
|
56
|
+
|
57
|
+
# def build_batch_action_popover
|
58
|
+
# end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'active_admin/component'
|
2
|
+
|
3
|
+
module ActiveAdmin
|
4
|
+
module BatchActions
|
5
|
+
|
6
|
+
# Creates the toggle checkbox used to toggle the collection selection on/off
|
7
|
+
class ResourceSelectionToggleCell < ActiveAdmin::Component
|
8
|
+
builder_method :resource_selection_toggle_cell
|
9
|
+
|
10
|
+
def build
|
11
|
+
input( :type => "checkbox", :id => "collection_selection_toggle_all", :name => "collection_selection_toggle_all", :class => "toggle_all" )
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# Creates the checkbox used to select a resource in the collection selection
|
16
|
+
class ResourceSelectionCell < ActiveAdmin::Component
|
17
|
+
builder_method :resource_selection_cell
|
18
|
+
|
19
|
+
def build(resource)
|
20
|
+
input :type => "checkbox", :id => "batch_action_item_#{resource.id}", :value => resource.id, :class => "collection_selection", :name => "collection_selection[]"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# Creates a wrapper panel for all index pages, except for the table, as the table has the checkbox in the thead
|
25
|
+
class ResourceSelectionTogglePanel < ActiveAdmin::Component
|
26
|
+
builder_method :resource_selection_toggle_panel
|
27
|
+
|
28
|
+
def build
|
29
|
+
super(:id => "collection_selection_toggle_panel")
|
30
|
+
resource_selection_toggle_cell
|
31
|
+
div(:id => "collection_selection_toggle_explaination" ) { I18n.t('active_admin.batch_actions.selection_toggle_explanation', :default => "(Toggle Selection)") }
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|