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
@@ -68,8 +68,12 @@ module ActiveAdmin
|
|
68
68
|
# column("Author") { |post| post.author.full_name }
|
69
69
|
# end
|
70
70
|
#
|
71
|
-
|
72
|
-
|
71
|
+
# csv :separator => ";" do
|
72
|
+
# column :name
|
73
|
+
# end
|
74
|
+
#
|
75
|
+
def csv(options={}, &block)
|
76
|
+
config.csv_builder = CSVBuilder.new(options, &block)
|
73
77
|
end
|
74
78
|
|
75
79
|
# Member Actions give you the functionality of defining both the
|
@@ -93,14 +97,20 @@ module ActiveAdmin
|
|
93
97
|
#
|
94
98
|
def member_action(name, options = {}, &block)
|
95
99
|
config.member_actions << ControllerAction.new(name, options)
|
100
|
+
title = options.delete(:title)
|
101
|
+
|
96
102
|
controller do
|
103
|
+
before_filter(:only => [name]) { @page_title = title } if title
|
97
104
|
define_method(name, &block || Proc.new{})
|
98
105
|
end
|
99
106
|
end
|
100
107
|
|
101
108
|
def collection_action(name, options = {}, &block)
|
102
109
|
config.collection_actions << ControllerAction.new(name, options)
|
110
|
+
title = options.delete(:title)
|
111
|
+
|
103
112
|
controller do
|
113
|
+
before_filter(:only => [name]){ @page_title = title } if title
|
104
114
|
define_method(name, &block || Proc.new{})
|
105
115
|
end
|
106
116
|
end
|
@@ -135,10 +145,6 @@ module ActiveAdmin
|
|
135
145
|
delegate :before_save, :after_save, :to => :controller
|
136
146
|
delegate :before_destroy, :after_destroy, :to => :controller
|
137
147
|
|
138
|
-
# Filters
|
139
|
-
delegate :filter, :to => :controller
|
140
|
-
|
141
|
-
|
142
148
|
# Standard rails filters
|
143
149
|
delegate :before_filter, :skip_before_filter, :after_filter, :around_filter, :to => :controller
|
144
150
|
|
data/lib/active_admin/router.rb
CHANGED
@@ -14,14 +14,22 @@ module ActiveAdmin
|
|
14
14
|
# end
|
15
15
|
#
|
16
16
|
def apply(router)
|
17
|
-
# Define any necessary dashboard routes
|
17
|
+
# Define any necessary dashboard routes and root
|
18
18
|
router.instance_exec(@application.namespaces.values) do |namespaces|
|
19
19
|
namespaces.each do |namespace|
|
20
|
+
root_and_dashboard_routes = Proc.new do
|
21
|
+
root :to => (namespace.root_to || "dashboard#index")
|
22
|
+
if ActiveAdmin::Dashboards.built?
|
23
|
+
match '/dashboard' => 'dashboard#index', :as => 'dashboard'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
20
27
|
if namespace.root?
|
21
|
-
|
28
|
+
instance_eval &root_and_dashboard_routes
|
22
29
|
else
|
23
|
-
|
24
|
-
|
30
|
+
namespace(namespace.name) do
|
31
|
+
instance_eval &root_and_dashboard_routes
|
32
|
+
end
|
25
33
|
end
|
26
34
|
end
|
27
35
|
end
|
@@ -35,7 +43,7 @@ module ActiveAdmin
|
|
35
43
|
route_definition_block = Proc.new do
|
36
44
|
case config
|
37
45
|
when Resource
|
38
|
-
resources config.
|
46
|
+
resources config.resource_name.route_key, :only => config.defined_actions do
|
39
47
|
# Define any member actions
|
40
48
|
member do
|
41
49
|
config.member_actions.each do |action|
|
@@ -49,9 +57,12 @@ module ActiveAdmin
|
|
49
57
|
config.collection_actions.each do |action|
|
50
58
|
send(action.http_verb, action.name)
|
51
59
|
end
|
60
|
+
|
61
|
+
post :batch_action
|
52
62
|
end
|
53
63
|
end
|
54
64
|
when Page
|
65
|
+
|
55
66
|
match "/#{config.underscored_resource_name}" => "#{config.underscored_resource_name}#index"
|
56
67
|
config.page_actions.each do |action|
|
57
68
|
match "/#{config.underscored_resource_name}/#{action.name}" => "#{config.underscored_resource_name}##{action.name}", :via => action.http_verb
|
@@ -70,14 +81,23 @@ module ActiveAdmin
|
|
70
81
|
|
71
82
|
# Make the nested belongs_to routes
|
72
83
|
# :only is set to nothing so that we don't clobber any existing routes on the resource
|
73
|
-
resources config.belongs_to_config.target.
|
84
|
+
resources config.belongs_to_config.target.resource_name.plural, :only => [] do
|
74
85
|
instance_eval &routes_for_belongs_to
|
75
86
|
end
|
87
|
+
|
88
|
+
# Batch action path is not nested.
|
89
|
+
if config.is_a?(Resource)
|
90
|
+
resources config.resource_name.route_key, :only => config.defined_actions do
|
91
|
+
collection do
|
92
|
+
post :batch_action
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
76
96
|
end
|
77
97
|
end
|
78
98
|
|
79
99
|
# Add on the namespace if required
|
80
|
-
|
100
|
+
unless config.namespace.root?
|
81
101
|
routes_in_namespace = route_definition_block.dup
|
82
102
|
route_definition_block = Proc.new do
|
83
103
|
namespace config.namespace.name do
|
@@ -90,6 +110,5 @@ module ActiveAdmin
|
|
90
110
|
end
|
91
111
|
end
|
92
112
|
end
|
93
|
-
|
94
113
|
end
|
95
114
|
end
|
data/lib/active_admin/scope.rb
CHANGED
@@ -24,6 +24,7 @@ module ActiveAdmin
|
|
24
24
|
@scope_method = method
|
25
25
|
# Scope ':all' means no scoping
|
26
26
|
@scope_method ||= name.to_sym unless name.to_sym == :all
|
27
|
+
@scope_method = nil if method && method.to_s == 'all'
|
27
28
|
@id = @name.gsub(' ', '').underscore
|
28
29
|
if block_given?
|
29
30
|
@scope_method = nil
|
@@ -12,7 +12,7 @@ module ActiveAdmin
|
|
12
12
|
|
13
13
|
# The id gets used for the div in the view
|
14
14
|
def id
|
15
|
-
name.to_s.downcase.underscore
|
15
|
+
"#{name.to_s.downcase.underscore}_sidebar_section".parameterize
|
16
16
|
end
|
17
17
|
|
18
18
|
def icon?
|
@@ -25,11 +25,7 @@ module ActiveAdmin
|
|
25
25
|
|
26
26
|
# The title gets displayed within the section in the view
|
27
27
|
def title
|
28
|
-
|
29
|
-
I18n.t!("active_admin.sidebars.#{name.to_s}")
|
30
|
-
rescue I18n::MissingTranslationData
|
31
|
-
name.to_s.titlecase
|
32
|
-
end
|
28
|
+
I18n.t("active_admin.sidebars.#{name.to_s}", :default => name.to_s.titlecase)
|
33
29
|
end
|
34
30
|
|
35
31
|
# If a block is not passed in, the name of the partial to render
|
data/lib/active_admin/version.rb
CHANGED
@@ -4,21 +4,26 @@ module ActiveAdmin
|
|
4
4
|
class ViewFactory < AbstractViewFactory
|
5
5
|
|
6
6
|
# Register Helper Renderers
|
7
|
-
register :global_navigation
|
8
|
-
:
|
9
|
-
:
|
10
|
-
:
|
11
|
-
:
|
12
|
-
:
|
7
|
+
register :global_navigation => ActiveAdmin::Views::TabbedNavigation,
|
8
|
+
:site_title => ActiveAdmin::Views::SiteTitle,
|
9
|
+
:utility_navigation => ActiveAdmin::Views::UtilityNav,
|
10
|
+
:action_items => ActiveAdmin::Views::ActionItems,
|
11
|
+
:title_bar => ActiveAdmin::Views::TitleBar,
|
12
|
+
:header => ActiveAdmin::Views::Header,
|
13
|
+
:footer => ActiveAdmin::Views::Footer,
|
14
|
+
:dashboard_section => ActiveAdmin::Views::DashboardSection,
|
15
|
+
:index_scopes => ActiveAdmin::Views::Scopes,
|
16
|
+
:blank_slate => ActiveAdmin::Views::BlankSlate,
|
17
|
+
:action_list_popover => ActiveAdmin::Views::ActionListPopover
|
13
18
|
|
14
19
|
# Register All The Pages
|
15
|
-
register :dashboard_page
|
16
|
-
:index_page
|
17
|
-
:show_page
|
18
|
-
:new_page
|
19
|
-
:edit_page
|
20
|
-
:layout
|
21
|
-
:page
|
20
|
+
register :dashboard_page => ActiveAdmin::Views::Pages::Dashboard,
|
21
|
+
:index_page => ActiveAdmin::Views::Pages::Index,
|
22
|
+
:show_page => ActiveAdmin::Views::Pages::Show,
|
23
|
+
:new_page => ActiveAdmin::Views::Pages::Form,
|
24
|
+
:edit_page => ActiveAdmin::Views::Pages::Form,
|
25
|
+
:layout => ActiveAdmin::Views::Pages::Layout,
|
26
|
+
:page => ActiveAdmin::Views::Pages::Page
|
22
27
|
|
23
28
|
end
|
24
29
|
end
|
@@ -6,7 +6,6 @@ module ActiveAdmin
|
|
6
6
|
|
7
7
|
include AssignsWithIndifferentAccessHelper
|
8
8
|
include ActiveAdminApplicationHelper
|
9
|
-
include RendererHelper
|
10
9
|
include AutoLinkHelper
|
11
10
|
include BreadcrumbHelper
|
12
11
|
include DisplayHelper
|
@@ -14,7 +13,6 @@ module ActiveAdmin
|
|
14
13
|
include MethodOrProcHelper
|
15
14
|
include SidebarHelper
|
16
15
|
include FormHelper
|
17
|
-
include FilterFormHelper
|
18
16
|
include TitleHelper
|
19
17
|
include ViewFactoryHelper
|
20
18
|
|
@@ -13,10 +13,11 @@ module ActiveAdmin
|
|
13
13
|
#
|
14
14
|
def auto_link(resource, link_content = nil)
|
15
15
|
content = link_content || display_name(resource)
|
16
|
-
if registration = active_admin_resource_for(resource.class)
|
16
|
+
if (registration = active_admin_resource_for(resource.class))
|
17
17
|
begin
|
18
18
|
content = link_to(content, send(registration.route_instance_path, resource))
|
19
19
|
rescue
|
20
|
+
# ignored
|
20
21
|
end
|
21
22
|
end
|
22
23
|
content
|
@@ -2,31 +2,30 @@ module ActiveAdmin
|
|
2
2
|
module ViewHelpers
|
3
3
|
module BreadcrumbHelper
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
end
|
5
|
+
# Returns an array of links to use in a breadcrumb
|
6
|
+
def breadcrumb_links(path = nil)
|
7
|
+
path ||= request.fullpath
|
8
|
+
parts = path.gsub(/^\//, '').split('/')
|
9
|
+
parts.pop unless %w{ create update }.include?(params[:action])
|
10
|
+
crumbs = []
|
11
|
+
parts.each_with_index do |part, index|
|
12
|
+
name = nil
|
13
|
+
if part =~ /^\d|^[a-f0-9]{24}$/ && (parent = parts[index - 1])
|
14
|
+
begin
|
15
|
+
parent_class = parent.singularize.camelcase.constantize
|
16
|
+
obj = parent_class.find(part[/^[a-f0-9]{24}$/] ? part : part.to_i)
|
17
|
+
name = display_name(obj)
|
18
|
+
rescue
|
19
|
+
# ignored
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
name ||= I18n.t("activerecord.models.#{part.singularize}", :count => 1.1, :default => part.titlecase)
|
24
|
+
|
25
|
+
crumbs << link_to( name, "/" + parts[0..index].join('/'))
|
26
|
+
end
|
27
|
+
crumbs
|
28
|
+
end
|
30
29
|
|
31
30
|
end
|
32
31
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module ActiveAdmin
|
2
|
+
module ViewHelpers
|
3
|
+
module FormHelper
|
4
|
+
|
5
|
+
# Flatten a params Hash to an array of fields.
|
6
|
+
#
|
7
|
+
# @param params [Hash]
|
8
|
+
# @param options [Hash] :namespace and :except
|
9
|
+
#
|
10
|
+
# @return [Array] of [Hash] with one element.
|
11
|
+
#
|
12
|
+
# @example
|
13
|
+
# fields_for_params(scope: "all", users: ["greg"])
|
14
|
+
# => [ {"scope" => "all"} , {"users[]" => "greg"} ]
|
15
|
+
#
|
16
|
+
def fields_for_params(params, options = {})
|
17
|
+
namespace = options[:namespace]
|
18
|
+
except = options[:except].is_a?(Array) ? options[:except] : [options[:except]]
|
19
|
+
|
20
|
+
params.map do |k, v|
|
21
|
+
next if namespace.nil? && %w(controller action commit utf8).include?(k.to_s)
|
22
|
+
next if except.map(&:to_s).include?(k.to_s)
|
23
|
+
|
24
|
+
if namespace
|
25
|
+
k = "#{namespace}[#{k}]"
|
26
|
+
end
|
27
|
+
|
28
|
+
case v
|
29
|
+
when String
|
30
|
+
{ k => v }
|
31
|
+
when Hash
|
32
|
+
fields_for_params(v, :namespace => k)
|
33
|
+
when Array
|
34
|
+
v.map do |v|
|
35
|
+
{ "#{k}[]" => v }
|
36
|
+
end
|
37
|
+
else
|
38
|
+
raise "I don't know what to do with #{v.class} params: #{v.inspect}"
|
39
|
+
end
|
40
|
+
end.flatten.compact
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -8,6 +8,12 @@ module ActiveAdmin
|
|
8
8
|
semantic_form_for resource, options, &block
|
9
9
|
end
|
10
10
|
|
11
|
+
def hidden_field_tags_for(params, options={})
|
12
|
+
fields_for_params(params, options).map do |kv|
|
13
|
+
k, v = kv.first
|
14
|
+
hidden_field_tag k, v
|
15
|
+
end.join("\n").html_safe
|
16
|
+
end
|
11
17
|
end
|
12
18
|
end
|
13
19
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'active_admin/views/components/popover'
|
2
|
+
|
3
|
+
module ActiveAdmin
|
4
|
+
module Views
|
5
|
+
# Build an ActionListPopover
|
6
|
+
class ActionListPopover < ActiveAdmin::Views::Popover
|
7
|
+
builder_method :action_list_popover
|
8
|
+
|
9
|
+
|
10
|
+
def build(*args, &block)
|
11
|
+
@contents = ul :class => "popover_contents"
|
12
|
+
|
13
|
+
options = args.extract_options!
|
14
|
+
|
15
|
+
super(options)
|
16
|
+
end
|
17
|
+
|
18
|
+
def action(title, url, *args)
|
19
|
+
options = args.extract_options!
|
20
|
+
within @contents do
|
21
|
+
li do
|
22
|
+
text_node link_to( title, url, options )
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -35,7 +35,11 @@ module ActiveAdmin
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def header_content_for(attr)
|
38
|
-
@record.class.respond_to?(:human_attribute_name)
|
38
|
+
if @record.class.respond_to?(:human_attribute_name)
|
39
|
+
@record.class.human_attribute_name(attr, :default => attr.to_s.titleize)
|
40
|
+
else
|
41
|
+
attr.to_s.titleize
|
42
|
+
end
|
39
43
|
end
|
40
44
|
|
41
45
|
def empty_value
|
@@ -50,7 +54,7 @@ module ActiveAdmin
|
|
50
54
|
content_for_attribute(attr_or_proc)
|
51
55
|
end
|
52
56
|
value = pretty_format(value)
|
53
|
-
value == "" || value
|
57
|
+
value == "" || value.nil? ? empty_value : value
|
54
58
|
end
|
55
59
|
|
56
60
|
def content_for_attribute(attr)
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'active_admin/views/components/popover'
|
2
|
+
|
3
|
+
module ActiveAdmin
|
4
|
+
module Views
|
5
|
+
|
6
|
+
# Action List - A button with a drop down menu of links
|
7
|
+
#
|
8
|
+
# Creating a new action list:
|
9
|
+
#
|
10
|
+
# dropdown_menu "Administration" do
|
11
|
+
# item "Edit Details", edit_details_path
|
12
|
+
# item "Edit My Account", edit_my_acccount_path
|
13
|
+
# end
|
14
|
+
#
|
15
|
+
# This will create a button with the label "Administration" and
|
16
|
+
# a drop down once clicked with 2 options.
|
17
|
+
#
|
18
|
+
class DropdownMenu < ActiveAdmin::Component
|
19
|
+
builder_method :dropdown_menu
|
20
|
+
|
21
|
+
# Build a new action list
|
22
|
+
#
|
23
|
+
# @param [String] name The name to display in the button
|
24
|
+
#
|
25
|
+
# @param [Hash] options A set of options that get passed along to
|
26
|
+
# to the parent dom element.
|
27
|
+
def build(name, options = {})
|
28
|
+
options = options.dup
|
29
|
+
|
30
|
+
# Easily set options for the button or menu
|
31
|
+
button_options = options.delete(:button) || {}
|
32
|
+
menu_options = options.delete(:menu) || {}
|
33
|
+
|
34
|
+
@button = build_button(name, button_options)
|
35
|
+
@menu = build_menu(menu_options)
|
36
|
+
|
37
|
+
super(options)
|
38
|
+
end
|
39
|
+
|
40
|
+
def item(*args)
|
41
|
+
within @menu do
|
42
|
+
li link_to(*args)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def build_button(name, button_options)
|
49
|
+
button_options[:class] ||= ""
|
50
|
+
button_options[:class] << " dropdown_menu_button"
|
51
|
+
|
52
|
+
button_options[:href] = "#"
|
53
|
+
|
54
|
+
a name, button_options
|
55
|
+
end
|
56
|
+
|
57
|
+
def build_menu(options)
|
58
|
+
options[:class] ||= ""
|
59
|
+
options[:class] << " dropdown_menu_list"
|
60
|
+
|
61
|
+
menu_list = nil
|
62
|
+
|
63
|
+
div :class => "dropdown_menu_list_wrapper", :style => "display:none;" do
|
64
|
+
menu_list = ul(options)
|
65
|
+
end
|
66
|
+
|
67
|
+
menu_list
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
end
|