activeadmin 0.2.2 → 0.3.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.
- data/.gitignore +34 -0
- data/.travis.yml +4 -0
- data/.yardopts +8 -0
- data/CHANGELOG.md +177 -0
- data/Gemfile +21 -32
- data/Guardfile +8 -0
- data/README.rdoc +75 -14
- data/Rakefile +7 -100
- data/activeadmin.gemspec +21 -353
- data/{lib/generators/active_admin/install/templates/images → app/assets/images/active_admin}/admin_notes_icon.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
- data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
- data/{lib/generators/active_admin/install/templates/images → app/assets/images/active_admin}/loading.gif +0 -0
- data/{lib/generators/active_admin/install/templates/images → app/assets/images/active_admin}/nested_menu_arrow.gif +0 -0
- data/{lib/generators/active_admin/install/templates/images → app/assets/images/active_admin}/nested_menu_arrow_dark.gif +0 -0
- data/{lib/generators/active_admin/install/templates/images → app/assets/images/active_admin}/orderable.png +0 -0
- data/app/assets/javascripts/active_admin/base.js +12 -0
- data/{lib/generators/active_admin/install/templates/active_admin_vendor.js → app/assets/javascripts/active_admin/vendor.js} +0 -0
- data/{lib/active_admin/stylesheets/active_admin.scss → app/assets/stylesheets/active_admin/_base.css.scss} +58 -82
- data/{lib/active_admin/stylesheets/active_admin/_forms.scss → app/assets/stylesheets/active_admin/_forms.css.scss} +94 -5
- data/{lib/active_admin/stylesheets/active_admin/_header.scss → app/assets/stylesheets/active_admin/_header.css.scss} +13 -11
- data/app/assets/stylesheets/active_admin/_mixins.css.scss +1 -0
- data/{lib/active_admin/stylesheets/active_admin/_typography.scss → app/assets/stylesheets/active_admin/_typography.css.scss} +0 -0
- data/{lib/active_admin/stylesheets/active_admin/_comments.scss → app/assets/stylesheets/active_admin/components/_comments.css.scss} +0 -0
- data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +123 -0
- data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +38 -0
- data/{lib/active_admin/stylesheets/active_admin/mixins/_all.scss → app/assets/stylesheets/active_admin/mixins/_all.css.scss} +0 -0
- data/{lib/active_admin/stylesheets/active_admin/mixins/_buttons.scss → app/assets/stylesheets/active_admin/mixins/_buttons.css.scss} +0 -0
- data/{lib/active_admin/stylesheets/active_admin/mixins/_gradients.scss → app/assets/stylesheets/active_admin/mixins/_gradients.css.scss} +8 -0
- data/{lib/active_admin/stylesheets/active_admin/mixins/_icons.scss → app/assets/stylesheets/active_admin/mixins/_icons.css.scss} +0 -0
- data/{lib/active_admin/stylesheets/active_admin/mixins/_reset.scss → app/assets/stylesheets/active_admin/mixins/_reset.css.scss} +0 -0
- data/{lib/active_admin/stylesheets/active_admin/mixins/_rounded.scss → app/assets/stylesheets/active_admin/mixins/_rounded.css.scss} +0 -0
- data/{lib/active_admin/stylesheets/active_admin/mixins/_sections.scss → app/assets/stylesheets/active_admin/mixins/_sections.css.scss} +9 -2
- data/{lib/active_admin/stylesheets/active_admin/mixins/_shadows.scss → app/assets/stylesheets/active_admin/mixins/_shadows.css.scss} +1 -1
- data/{lib/active_admin/stylesheets/active_admin/mixins/_variables.scss → app/assets/stylesheets/active_admin/mixins/_variables.css.scss} +12 -3
- data/{lib/active_admin/views/templates/active_admin_dashboard → app/views/active_admin/dashboard}/index.html.arb +0 -0
- data/{lib/active_admin/views/templates → app/views}/active_admin/devise/mailer/reset_password_instructions.html.erb +0 -0
- data/{lib/active_admin/views/templates → app/views}/active_admin/devise/mailer/unlock_instructions.html.erb +0 -0
- data/{lib/active_admin/views/templates → app/views}/active_admin/devise/passwords/edit.html.erb +0 -0
- data/{lib/active_admin/views/templates → app/views}/active_admin/devise/passwords/new.html.erb +0 -0
- data/{lib/active_admin/views/templates → app/views}/active_admin/devise/sessions/new.html.erb +1 -1
- data/{lib/active_admin/views/templates → app/views}/active_admin/devise/shared/_links.erb +0 -0
- data/{lib/active_admin/views/templates → app/views}/active_admin/devise/unlocks/new.html.erb +0 -0
- data/{lib/active_admin/views/templates/active_admin_default → app/views/active_admin/resource}/edit.html.arb +0 -0
- data/app/views/active_admin/resource/index.csv.erb +20 -0
- data/{lib/active_admin/views/templates/active_admin_default → app/views/active_admin/resource}/index.html.arb +0 -0
- data/{lib/active_admin/views/templates/active_admin_default → app/views/active_admin/resource}/new.html.arb +0 -0
- data/{lib/active_admin/views/templates/active_admin_default → app/views/active_admin/resource}/show.html.arb +0 -0
- data/app/views/layouts/active_admin.html.arb +1 -0
- data/{lib/active_admin/views/templates → app/views}/layouts/active_admin_logged_out.html.erb +8 -4
- data/docs/0-installation.md +50 -0
- data/docs/1-general-configuration.md +43 -0
- data/docs/2-resource-customization.md +35 -0
- data/docs/3-index-pages.md +55 -0
- data/docs/3-index-pages/index-as-block.md +16 -0
- data/docs/3-index-pages/index-as-blog.md +61 -0
- data/docs/3-index-pages/index-as-grid.md +21 -0
- data/docs/3-index-pages/index-as-table.md +90 -0
- data/docs/4-csv-format.md +14 -0
- data/docs/5-forms.md +39 -0
- data/docs/6-show-screens.md +22 -0
- data/docs/7-sidebars.md +35 -0
- data/docs/8-custom-actions.md +123 -0
- data/features/comments/commenting.feature +31 -4
- data/features/edit_page.feature +30 -1
- data/features/index/filters.feature +35 -0
- data/features/index/format_as_csv.feature +46 -0
- data/features/index/formats.feature +2 -0
- data/features/index/index_as_block.feature +1 -1
- data/features/index/index_as_grid.feature +1 -1
- data/features/index/index_as_table.feature +2 -0
- data/features/index/index_blank_slate.feature +56 -0
- data/features/index/pagination.feature +0 -6
- data/features/registering_assets.feature +2 -2
- data/features/sidebar_sections.feature +7 -8
- data/features/specifying_actions.feature +72 -1
- data/features/step_definitions/action_item_steps.rb +2 -2
- data/features/step_definitions/additional_web_steps.rb +26 -16
- data/features/step_definitions/attribute_steps.rb +5 -7
- data/features/step_definitions/configuration_steps.rb +9 -9
- data/features/step_definitions/factory_steps.rb +4 -3
- data/features/step_definitions/format_steps.rb +29 -1
- data/features/step_definitions/layout_steps.rb +3 -0
- data/features/step_definitions/menu_steps.rb +2 -2
- data/features/step_definitions/sidebar_steps.rb +1 -5
- data/features/step_definitions/user_steps.rb +8 -2
- data/features/step_definitions/web_steps.rb +82 -90
- data/features/sti_resource.feature +12 -0
- data/features/support/env.rb +12 -10
- data/features/support/paths.rb +2 -0
- data/features/support/selectors.rb +45 -0
- data/lib/active_admin.rb +33 -263
- data/lib/active_admin/application.rb +228 -0
- data/lib/active_admin/arbre.rb +10 -10
- data/lib/active_admin/arbre/{html.rb → builder.rb} +29 -2
- data/lib/active_admin/arbre/context.rb +8 -0
- data/lib/active_admin/arbre/{attributes.rb → html/attributes.rb} +0 -0
- data/lib/active_admin/arbre/{class_list.rb → html/class_list.rb} +0 -0
- data/lib/active_admin/arbre/{collection.rb → html/collection.rb} +0 -0
- data/lib/active_admin/arbre/{document.rb → html/document.rb} +0 -0
- data/lib/active_admin/arbre/{element.rb → html/element.rb} +6 -6
- data/lib/active_admin/arbre/{html5_elements.rb → html/html5_elements.rb} +0 -0
- data/lib/active_admin/arbre/{tag.rb → html/tag.rb} +0 -0
- data/lib/active_admin/arbre/{text_node.rb → html/text_node.rb} +0 -0
- data/lib/active_admin/asset_registration.rb +1 -1
- data/lib/active_admin/callbacks.rb +5 -3
- data/lib/active_admin/comments.rb +3 -3
- data/lib/active_admin/comments/comment.rb +6 -0
- data/lib/active_admin/comments/configuration.rb +8 -6
- data/lib/active_admin/comments/namespace_helper.rb +1 -1
- data/lib/active_admin/comments/views/active_admin_comments.rb +1 -1
- data/lib/active_admin/csv_builder.rb +45 -0
- data/lib/active_admin/dashboards.rb +1 -1
- data/lib/active_admin/dashboards/dashboard_controller.rb +3 -10
- data/lib/active_admin/dependency_checker.rb +28 -0
- data/lib/active_admin/deprecation.rb +36 -0
- data/lib/active_admin/devise.rb +14 -3
- data/lib/active_admin/dsl.rb +26 -4
- data/lib/active_admin/engine.rb +4 -0
- data/lib/active_admin/form_builder.rb +18 -9
- data/lib/active_admin/helpers/scope_chain.rb +23 -0
- data/lib/active_admin/helpers/settings.rb +70 -0
- data/lib/active_admin/locales/cs.yml +34 -0
- data/lib/active_admin/locales/da.yml +28 -0
- data/lib/active_admin/locales/en.yml +40 -0
- data/lib/active_admin/locales/es.yml +40 -0
- data/lib/active_admin/locales/fr.yml +40 -0
- data/lib/active_admin/locales/it.yml +39 -0
- data/lib/active_admin/locales/pl.yml +34 -0
- data/lib/active_admin/locales/pt-BR.yml +41 -0
- data/lib/active_admin/locales/ru.yml +40 -0
- data/lib/active_admin/locales/zh_cn.yml +40 -0
- data/lib/active_admin/menu_item.rb +6 -0
- data/lib/active_admin/namespace.rb +14 -5
- data/lib/active_admin/reloader.rb +30 -0
- data/lib/active_admin/renderer.rb +1 -1
- data/lib/active_admin/resource.rb +45 -88
- data/lib/active_admin/resource/action_items.rb +88 -0
- data/lib/active_admin/resource/menu.rb +45 -0
- data/lib/active_admin/resource/naming.rb +46 -0
- data/lib/active_admin/resource/scopes.rb +33 -0
- data/lib/active_admin/resource/sidebars.rb +36 -0
- data/lib/active_admin/resource_controller.rb +32 -37
- data/lib/active_admin/resource_controller/action_builder.rb +1 -1
- data/lib/active_admin/resource_controller/actions.rb +66 -40
- data/lib/active_admin/resource_controller/callbacks.rb +1 -1
- data/lib/active_admin/resource_controller/collection.rb +9 -14
- data/lib/active_admin/resource_controller/filters.rb +1 -1
- data/lib/active_admin/resource_controller/form.rb +1 -1
- data/lib/active_admin/resource_controller/menu.rb +1 -1
- data/lib/active_admin/resource_controller/page_configurations.rb +2 -2
- data/lib/active_admin/resource_controller/scoping.rb +1 -1
- data/lib/active_admin/resource_controller/sidebars.rb +1 -21
- data/lib/active_admin/router.rb +85 -0
- data/lib/active_admin/sass/active_admin.scss +3 -0
- data/lib/active_admin/sass/css_loader.rb +16 -0
- data/lib/active_admin/sass/helpers.rb +45 -0
- data/lib/active_admin/scope.rb +16 -2
- data/lib/active_admin/sidebar_section.rb +41 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_utilities.scss +0 -0
- data/lib/active_admin/version.rb +1 -1
- data/lib/active_admin/view_factory.rb +5 -3
- data/lib/active_admin/view_helpers.rb +1 -2
- data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
- data/lib/active_admin/view_helpers/auto_link_helper.rb +2 -1
- data/lib/active_admin/view_helpers/display_helper.rb +1 -1
- data/lib/active_admin/view_helpers/filter_form_helper.rb +26 -14
- data/lib/active_admin/view_helpers/form_helper.rb +1 -0
- data/lib/active_admin/view_helpers/view_factory_helper.rb +1 -1
- data/lib/active_admin/views/components/attributes_table.rb +2 -2
- data/lib/active_admin/views/components/blank_slate.rb +17 -0
- data/lib/active_admin/views/components/columns.rb +1 -3
- data/lib/active_admin/views/components/paginated_collection.rb +26 -8
- data/lib/active_admin/views/components/scopes.rb +13 -8
- data/lib/active_admin/views/components/sidebar_section.rb +1 -3
- data/lib/active_admin/views/components/status_tag.rb +55 -0
- data/lib/active_admin/views/components/table_for.rb +25 -6
- data/lib/active_admin/views/header_renderer.rb +20 -4
- data/lib/active_admin/views/index_as_block.rb +12 -7
- data/lib/active_admin/views/index_as_blog.rb +61 -21
- data/lib/active_admin/views/index_as_grid.rb +22 -1
- data/lib/active_admin/views/index_as_table.rb +97 -6
- data/lib/active_admin/views/pages/base.rb +20 -9
- data/lib/active_admin/views/pages/dashboard.rb +7 -4
- data/lib/active_admin/views/pages/edit.rb +3 -2
- data/lib/active_admin/views/pages/index.rb +30 -5
- data/lib/active_admin/views/pages/layout.rb +26 -0
- data/lib/active_admin/views/pages/new.rb +3 -2
- data/lib/active_admin/views/pages/show.rb +1 -1
- data/lib/active_admin/views/tabbed_navigation.rb +94 -0
- data/lib/generators/active_admin/assets/assets_generator.rb +21 -0
- data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +427 -0
- data/lib/generators/active_admin/assets/templates/3.1/active_admin.css.scss +6 -0
- data/lib/generators/active_admin/assets/templates/3.1/active_admin.js +1 -0
- data/lib/generators/active_admin/assets/templates/dashboards.rb +36 -0
- data/lib/generators/active_admin/install/install_generator.rb +2 -4
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +26 -4
- data/lib/generators/active_admin/install/templates/dashboards.rb +4 -2
- data/lib/generators/active_admin/install/templates/migrations/2_move_admin_notes_to_comments.rb +2 -2
- data/script/local +44 -0
- data/script/use_rails +46 -0
- data/spec/integration/belongs_to_spec.rb +1 -1
- data/spec/integration/default_namespace.rb +77 -0
- data/spec/integration/javascript_spec.rb +20 -0
- data/spec/integration/stylesheets_spec.rb +41 -0
- data/spec/spec_helper.rb +21 -11
- data/spec/support/detect_rails_version.rb +10 -0
- data/spec/support/integration_example_group.rb +1 -1
- data/spec/support/jslint.yml +80 -0
- data/spec/support/rails_template.rb +1 -1
- data/spec/support/rails_template_with_data.rb +2 -1
- data/spec/support/templates/cucumber.rb +0 -4
- data/spec/unit/active_admin_spec.rb +8 -44
- data/spec/unit/application_spec.rb +78 -0
- data/spec/unit/arbre/context_spec.rb +22 -0
- data/spec/unit/arbre/html/element_finder_methods_spec.rb +2 -2
- data/spec/unit/arbre/html/element_spec.rb +2 -3
- data/spec/unit/arbre/html/tag_attributes_spec.rb +2 -2
- data/spec/unit/arbre/html/tag_spec.rb +2 -2
- data/spec/unit/arbre/html_spec.rb +2 -3
- data/spec/unit/auto_link_spec.rb +2 -1
- data/spec/unit/belongs_to_spec.rb +2 -1
- data/spec/unit/comments_spec.rb +43 -39
- data/spec/unit/controller_filters_spec.rb +11 -3
- data/spec/unit/csv_builder_spec.rb +83 -0
- data/spec/unit/devise_spec.rb +66 -0
- data/spec/unit/display_name_spec.rb +2 -2
- data/spec/unit/filter_form_builder_spec.rb +6 -3
- data/spec/unit/form_builder_spec.rb +20 -2
- data/spec/unit/generators/install_rails_3_1_spec.rb +16 -0
- data/spec/unit/helpers/scope_chain_spec.rb +36 -0
- data/spec/unit/helpers/settings_spec.rb +30 -0
- data/spec/unit/menu_item_spec.rb +6 -0
- data/spec/unit/namespace_spec.rb +68 -19
- data/spec/unit/rails_spec.rb +43 -0
- data/spec/unit/registration_spec.rb +18 -27
- data/spec/unit/reloader_spec.rb +28 -0
- data/spec/unit/resource/action_items_spec.rb +62 -0
- data/spec/unit/resource/menu_spec.rb +80 -0
- data/spec/unit/resource/naming_spec.rb +64 -0
- data/spec/unit/resource/scopes_spec.rb +30 -0
- data/spec/unit/resource/sidebars_spec.rb +50 -0
- data/spec/unit/resource_controller/collection_spec.rb +1 -1
- data/spec/unit/resource_controller_spec.rb +29 -24
- data/spec/unit/resource_spec.rb +78 -94
- data/spec/unit/sass/helpers_spec.rb +47 -0
- data/spec/unit/scope_spec.rb +11 -1
- data/spec/unit/view_factory_spec.rb +4 -1
- data/spec/unit/{components → views/components}/attributes_table_spec.rb +2 -2
- data/spec/unit/views/components/blank_slate_spec.rb +15 -0
- data/spec/unit/{components → views/components}/columns_spec.rb +2 -2
- data/spec/unit/{components → views/components}/panel_spec.rb +1 -3
- data/spec/unit/{components → views/components}/sidebar_section_spec.rb +3 -3
- data/spec/unit/views/components/status_tag_spec.rb +79 -0
- data/spec/unit/{components → views/components}/table_for_spec.rb +2 -1
- data/spec/unit/views/pages/layout_spec.rb +22 -0
- data/spec/unit/views/tabbed_navigation_spec.rb +125 -0
- data/tasks/docs.rake +39 -0
- data/tasks/test.rake +55 -0
- data/tasks/yard.rake +6 -0
- metadata +310 -189
- data/CHANGELOG.rdoc +0 -76
- data/lib/active_admin/action_items.rb +0 -37
- data/lib/active_admin/sidebar.rb +0 -39
- data/lib/active_admin/stylesheets/active_admin/_flash_messages.scss +0 -13
- data/lib/active_admin/view_helpers/status_tag_helper.rb +0 -13
- data/lib/active_admin/view_helpers/table_helper.rb +0 -12
- data/lib/active_admin/views/tabs_renderer.rb +0 -52
- data/lib/active_admin/views/templates/active_admin_default/index.csv.erb +0 -2
- data/lib/active_admin/views/templates/layouts/active_admin.html.erb +0 -39
- data/lib/generators/active_admin/install/templates/active_admin.js +0 -51
- data/spec/controllers/index_as_csv_spec.rb +0 -35
- data/spec/unit/action_items_spec.rb +0 -27
- data/spec/unit/tabs_renderer_spec.rb +0 -56
|
@@ -16,10 +16,16 @@ module ActiveAdmin
|
|
|
16
16
|
|
|
17
17
|
def build_scope(scope)
|
|
18
18
|
span :class => classes_for_scope(scope) do
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
begin
|
|
20
|
+
scope_name = I18n.t!("active_admin.scopes.#{scope.scope_method}")
|
|
21
|
+
rescue I18n::MissingTranslationData
|
|
22
|
+
scope_name = scope.name
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
if current_scope?(scope)
|
|
26
|
+
em(scope_name)
|
|
21
27
|
else
|
|
22
|
-
a(
|
|
28
|
+
a(scope_name, :href => url_for(params.merge(:scope => scope.id, :page => 1)))
|
|
23
29
|
end
|
|
24
30
|
text_node(" ")
|
|
25
31
|
scope_count(scope)
|
|
@@ -47,12 +53,11 @@ module ActiveAdmin
|
|
|
47
53
|
end
|
|
48
54
|
end
|
|
49
55
|
|
|
56
|
+
include ActiveAdmin::ScopeChain
|
|
57
|
+
|
|
58
|
+
# Return the count for the scope passed in.
|
|
50
59
|
def get_scope_count(scope)
|
|
51
|
-
|
|
52
|
-
scoping_class.send(scope.scope_method).count
|
|
53
|
-
else
|
|
54
|
-
instance_exec(scoping_class, &scope.scope_block).count
|
|
55
|
-
end
|
|
60
|
+
scope_chain(scope, scoping_class).count
|
|
56
61
|
end
|
|
57
62
|
|
|
58
63
|
def scoping_class
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Views
|
|
3
|
+
# Build a StatusTag
|
|
4
|
+
class StatusTag < ActiveAdmin::Component
|
|
5
|
+
builder_method :status_tag
|
|
6
|
+
|
|
7
|
+
def tag_name
|
|
8
|
+
'span'
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def default_class_name
|
|
12
|
+
'status'
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# @method status_tag(status, type = nil, options = {})
|
|
16
|
+
#
|
|
17
|
+
# @param [String] status the status to display. One of the span classes will be an underscored version of the status.
|
|
18
|
+
# @param [Symbol] type type of status. Will become a class of the span. ActiveAdmin provide style for :ok, :warning and :error.
|
|
19
|
+
# @param [Hash] options such as :class, :id etc
|
|
20
|
+
#
|
|
21
|
+
# @return [ActiveAdmin::Views::StatusTag]
|
|
22
|
+
#
|
|
23
|
+
# Examples:
|
|
24
|
+
# status_tag('In Progress')
|
|
25
|
+
# # => <span class='status in_progress'>In Progress</span>
|
|
26
|
+
#
|
|
27
|
+
# status_tag('active', :ok)
|
|
28
|
+
# # => <span class='status active ok'>Active</span>
|
|
29
|
+
#
|
|
30
|
+
# status_tag('active', :ok, :class => 'important', :id => 'status_123')
|
|
31
|
+
# # => <span class='status active ok important' id='status_123'>Active</span>
|
|
32
|
+
#
|
|
33
|
+
def build(*args)
|
|
34
|
+
options = args.extract_options!
|
|
35
|
+
status = args[0]
|
|
36
|
+
type = args[1]
|
|
37
|
+
classes = options.delete(:class)
|
|
38
|
+
|
|
39
|
+
status = status.titleize if status
|
|
40
|
+
|
|
41
|
+
super(status, options)
|
|
42
|
+
|
|
43
|
+
add_class(status_to_class(status)) if status
|
|
44
|
+
add_class(type.to_s) if type
|
|
45
|
+
add_class(classes) if classes
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
protected
|
|
49
|
+
|
|
50
|
+
def status_to_class(status)
|
|
51
|
+
status.titleize.gsub(/\s/, '').underscore
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -9,6 +9,7 @@ module ActiveAdmin
|
|
|
9
9
|
|
|
10
10
|
def build(collection, options = {})
|
|
11
11
|
@sortable = options.delete(:sortable)
|
|
12
|
+
@resource_class = options.delete(:i18n)
|
|
12
13
|
@collection = collection
|
|
13
14
|
@columns = []
|
|
14
15
|
build_table
|
|
@@ -16,7 +17,11 @@ module ActiveAdmin
|
|
|
16
17
|
end
|
|
17
18
|
|
|
18
19
|
def column(*args, &block)
|
|
19
|
-
|
|
20
|
+
options = default_options.merge(args.last.is_a?(::Hash) ? args.pop : {})
|
|
21
|
+
title = args[0]
|
|
22
|
+
data = args[1] || args[0]
|
|
23
|
+
|
|
24
|
+
col = Column.new(title, data, options, &block)
|
|
20
25
|
@columns << col
|
|
21
26
|
|
|
22
27
|
# Build our header item
|
|
@@ -69,7 +74,7 @@ module ActiveAdmin
|
|
|
69
74
|
end
|
|
70
75
|
|
|
71
76
|
th :class => classes do
|
|
72
|
-
link_to(title,
|
|
77
|
+
link_to(title, params.merge(:order => "#{sort_key}_#{order_for_sort_key(sort_key)}").except(:page))
|
|
73
78
|
end
|
|
74
79
|
end
|
|
75
80
|
|
|
@@ -102,7 +107,7 @@ module ActiveAdmin
|
|
|
102
107
|
end
|
|
103
108
|
|
|
104
109
|
# Returns the order to use for a given sort key
|
|
105
|
-
#
|
|
110
|
+
#
|
|
106
111
|
# Default is to use 'desc'. If the current sort key is
|
|
107
112
|
# 'desc' it will return 'asc'
|
|
108
113
|
def order_for_sort_key(sort_key)
|
|
@@ -111,6 +116,12 @@ module ActiveAdmin
|
|
|
111
116
|
current_order == 'desc' ? 'asc' : 'desc'
|
|
112
117
|
end
|
|
113
118
|
|
|
119
|
+
def default_options
|
|
120
|
+
{
|
|
121
|
+
:i18n => @resource_class
|
|
122
|
+
}
|
|
123
|
+
end
|
|
124
|
+
|
|
114
125
|
class Column
|
|
115
126
|
|
|
116
127
|
attr_accessor :title, :data
|
|
@@ -142,12 +153,12 @@ module ActiveAdmin
|
|
|
142
153
|
# column :username, :sortable => 'other_column_to_sort_on'
|
|
143
154
|
#
|
|
144
155
|
# If you pass a block to be rendered for this column, the column
|
|
145
|
-
# will not be sortable unless you pass a string to sortable to
|
|
156
|
+
# will not be sortable unless you pass a string to sortable to
|
|
146
157
|
# sort the column on:
|
|
147
158
|
#
|
|
148
159
|
# column('Username', :sortable => 'login'){ @user.pretty_name }
|
|
149
160
|
# # => Sort key will be 'login'
|
|
150
|
-
#
|
|
161
|
+
#
|
|
151
162
|
def sort_key
|
|
152
163
|
if @options[:sortable] == true || @options[:sortable] == false
|
|
153
164
|
@data.to_s
|
|
@@ -159,7 +170,15 @@ module ActiveAdmin
|
|
|
159
170
|
private
|
|
160
171
|
|
|
161
172
|
def pretty_title(raw)
|
|
162
|
-
raw.is_a?(Symbol)
|
|
173
|
+
if raw.is_a?(Symbol)
|
|
174
|
+
if @options[:i18n] && @options[:i18n].respond_to?(:human_attribute_name) && human_name = @options[:i18n].human_attribute_name(raw)
|
|
175
|
+
raw = human_name
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
raw.to_s.titleize
|
|
179
|
+
else
|
|
180
|
+
raw
|
|
181
|
+
end
|
|
163
182
|
end
|
|
164
183
|
|
|
165
184
|
def default_options
|
|
@@ -12,10 +12,10 @@ module ActiveAdmin
|
|
|
12
12
|
protected
|
|
13
13
|
|
|
14
14
|
def title
|
|
15
|
-
content_tag 'h1',
|
|
15
|
+
content_tag 'h1', active_admin_application.site_title, :id => 'site_title'
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
-
# Renders the global navigation returned by
|
|
18
|
+
# Renders the global navigation returned by
|
|
19
19
|
# ActiveAdmin::ResourceController#current_menu
|
|
20
20
|
#
|
|
21
21
|
# It uses the ActiveAdmin.tabs_renderer option
|
|
@@ -26,11 +26,27 @@ module ActiveAdmin
|
|
|
26
26
|
def utility_navigation
|
|
27
27
|
content_tag 'p', :id => "utility_nav" do
|
|
28
28
|
if current_active_admin_user?
|
|
29
|
-
content_tag(:span, display_name(current_active_admin_user), :class => "current_user")
|
|
30
|
-
|
|
29
|
+
html = content_tag(:span, display_name(current_active_admin_user), :class => "current_user")
|
|
30
|
+
|
|
31
|
+
if active_admin_application.logout_link_path
|
|
32
|
+
html << link_to(I18n.t('active_admin.logout'), logout_path, :method => logout_method)
|
|
33
|
+
end
|
|
31
34
|
end
|
|
32
35
|
end
|
|
33
36
|
end
|
|
37
|
+
|
|
38
|
+
# Returns the logout path from the application settings
|
|
39
|
+
def logout_path
|
|
40
|
+
if active_admin_application.logout_link_path.is_a?(Symbol)
|
|
41
|
+
send(active_admin_application.logout_link_path)
|
|
42
|
+
else
|
|
43
|
+
active_admin_application.logout_link_path
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def logout_method
|
|
48
|
+
active_admin_application.logout_link_method || :get
|
|
49
|
+
end
|
|
34
50
|
end
|
|
35
51
|
|
|
36
52
|
end
|
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
module ActiveAdmin
|
|
2
2
|
module Views
|
|
3
3
|
|
|
4
|
-
#
|
|
4
|
+
# = Index as a Block
|
|
5
5
|
#
|
|
6
|
-
#
|
|
6
|
+
# If you want to fully customize the display of your resources on the index
|
|
7
|
+
# screen, Index as a Block allows you to render a block of content for each
|
|
8
|
+
# resource.
|
|
7
9
|
#
|
|
8
|
-
#
|
|
9
|
-
#
|
|
10
|
-
#
|
|
11
|
-
#
|
|
10
|
+
# index :as => :block do |product|
|
|
11
|
+
# div :for => product do
|
|
12
|
+
# h2 auto_link(product.title)
|
|
13
|
+
# div do
|
|
14
|
+
# simple_format product.description
|
|
15
|
+
# end
|
|
16
|
+
# end
|
|
12
17
|
# end
|
|
13
|
-
#
|
|
18
|
+
#
|
|
14
19
|
class IndexAsBlock < ActiveAdmin::Component
|
|
15
20
|
|
|
16
21
|
def build(page_config, collection)
|
|
@@ -1,5 +1,66 @@
|
|
|
1
1
|
module ActiveAdmin
|
|
2
2
|
module Views
|
|
3
|
+
|
|
4
|
+
# = Index as Blog
|
|
5
|
+
#
|
|
6
|
+
# Render your index page as a set of posts. The post has two main options:
|
|
7
|
+
# title and body.
|
|
8
|
+
#
|
|
9
|
+
# index :as => :blog do
|
|
10
|
+
# title :my_title # Calls #my_title on each resource
|
|
11
|
+
# body :my_body # Calls #my_body on each resource
|
|
12
|
+
# end
|
|
13
|
+
#
|
|
14
|
+
# == Post Title
|
|
15
|
+
#
|
|
16
|
+
# The title is the content that will be rendered within a link to the
|
|
17
|
+
# resource. There are two main ways to set the content for the title
|
|
18
|
+
#
|
|
19
|
+
# First, you can pass in a method to be called on your
|
|
20
|
+
# resource. For example:
|
|
21
|
+
#
|
|
22
|
+
# index :as => :blog do
|
|
23
|
+
# title :a_method_to_call
|
|
24
|
+
# end
|
|
25
|
+
#
|
|
26
|
+
# This will result in the title of the post being the return value of
|
|
27
|
+
# Resource#a_method_to_call
|
|
28
|
+
#
|
|
29
|
+
# Second, you can pass a block to the tile option which will then be
|
|
30
|
+
# used as the contents fo the title. The resource being rendered
|
|
31
|
+
# is passed in to the block. For Example:
|
|
32
|
+
#
|
|
33
|
+
# index :as => :blog do
|
|
34
|
+
# title do |post|
|
|
35
|
+
# span post.title, :class => 'title'
|
|
36
|
+
# span post.created_at, :class => 'created_at'
|
|
37
|
+
# end
|
|
38
|
+
# end
|
|
39
|
+
#
|
|
40
|
+
# == Post Body
|
|
41
|
+
#
|
|
42
|
+
# The body is rendered underneath the title of each post. The same two
|
|
43
|
+
# style of options work as the Post Title above.
|
|
44
|
+
#
|
|
45
|
+
# Call a method on the resource as the body:
|
|
46
|
+
#
|
|
47
|
+
# index :as => :blog do
|
|
48
|
+
# title :my_title
|
|
49
|
+
# body :my_body # Return value of #my_body will be the body
|
|
50
|
+
# end
|
|
51
|
+
#
|
|
52
|
+
# Or, render a block as the body:
|
|
53
|
+
#
|
|
54
|
+
# index :as => :blog do
|
|
55
|
+
# title :my_title
|
|
56
|
+
# body do |post|
|
|
57
|
+
# div truncate(post.title)
|
|
58
|
+
# div :class => 'meta' do
|
|
59
|
+
# span "Post in #{post.categories.join(', ')}"
|
|
60
|
+
# end
|
|
61
|
+
# end
|
|
62
|
+
# end
|
|
63
|
+
#
|
|
3
64
|
class IndexAsBlog < ActiveAdmin::Component
|
|
4
65
|
|
|
5
66
|
def build(page_config, collection)
|
|
@@ -14,16 +75,6 @@ module ActiveAdmin
|
|
|
14
75
|
end
|
|
15
76
|
|
|
16
77
|
# Setter method for the configuration of the title
|
|
17
|
-
#
|
|
18
|
-
# index :as => :blog do
|
|
19
|
-
# title :a_method_to_call #=> Calls #a_method_to_call on the resource
|
|
20
|
-
#
|
|
21
|
-
# # OR
|
|
22
|
-
#
|
|
23
|
-
# title do |post|
|
|
24
|
-
# post.a_method_to_call
|
|
25
|
-
# end
|
|
26
|
-
# end
|
|
27
78
|
def title(method = nil, &block)
|
|
28
79
|
if block_given? || method
|
|
29
80
|
@title = block_given? ? block : method
|
|
@@ -33,17 +84,6 @@ module ActiveAdmin
|
|
|
33
84
|
|
|
34
85
|
# Setter method for the configuration of the body
|
|
35
86
|
#
|
|
36
|
-
# index :as => :blog do
|
|
37
|
-
# title :my_title
|
|
38
|
-
#
|
|
39
|
-
# body :a_method_to_call #=> Calls #a_method_to_call on the resource
|
|
40
|
-
#
|
|
41
|
-
# # OR
|
|
42
|
-
#
|
|
43
|
-
# title do |post|
|
|
44
|
-
# post.a_method_to_call
|
|
45
|
-
# end
|
|
46
|
-
# end
|
|
47
87
|
def body(method = nil, &block)
|
|
48
88
|
if block_given? || method
|
|
49
89
|
@body = block_given? ? block : method
|
|
@@ -1,6 +1,27 @@
|
|
|
1
1
|
module ActiveAdmin
|
|
2
2
|
module Views
|
|
3
|
-
|
|
3
|
+
|
|
4
|
+
# = Index as a Grid
|
|
5
|
+
#
|
|
6
|
+
# Sometimes you want to display the index screen for a set of resources as a grid
|
|
7
|
+
# (possibly a grid of thumbnail images). To do so, use the :grid option for the
|
|
8
|
+
# index block.
|
|
9
|
+
#
|
|
10
|
+
# index :as => :grid do |product|
|
|
11
|
+
# link_to(image_tag(product.image_path), admin_products_path(product))
|
|
12
|
+
# end
|
|
13
|
+
#
|
|
14
|
+
# The block is rendered within a cell in the grid once for each resource in the
|
|
15
|
+
# collection. The resource is passed into the block for you to use in the view.
|
|
16
|
+
#
|
|
17
|
+
# You can customize the number of colums that are rendered using the columns
|
|
18
|
+
# option:
|
|
19
|
+
#
|
|
20
|
+
# index :as => :grid, :columns => 5 do |product|
|
|
21
|
+
# link_to(image_tag(product.image_path), admin_products_path(product))
|
|
22
|
+
# end
|
|
23
|
+
#
|
|
24
|
+
class IndexAsGrid < ActiveAdmin::Component
|
|
4
25
|
|
|
5
26
|
def build(page_config, collection)
|
|
6
27
|
@page_config = page_config
|
|
@@ -1,14 +1,105 @@
|
|
|
1
1
|
module ActiveAdmin
|
|
2
2
|
module Views
|
|
3
3
|
|
|
4
|
+
# = Index as a Table
|
|
5
|
+
#
|
|
6
|
+
# By default, the index page is a table with each of the models content columns and links to
|
|
7
|
+
# show, edit and delete the object. There are many ways to customize what gets
|
|
8
|
+
# displayed.
|
|
9
|
+
#
|
|
10
|
+
# == Defining Columns
|
|
11
|
+
#
|
|
12
|
+
# To display an attribute or a method on a resource, simply pass a symbol into the
|
|
13
|
+
# column method:
|
|
14
|
+
#
|
|
15
|
+
# index do
|
|
16
|
+
# column :title
|
|
17
|
+
# end
|
|
18
|
+
#
|
|
19
|
+
# If the default title does not work for you, pass it as the first argument:
|
|
20
|
+
#
|
|
21
|
+
# index do
|
|
22
|
+
# column "My Custom Title", :title
|
|
23
|
+
# end
|
|
24
|
+
#
|
|
25
|
+
# Sometimes calling methods just isn't enough and you need to write some view
|
|
26
|
+
# specific code. For example, say we wanted a colum called Title which holds a
|
|
27
|
+
# link to the posts admin screen.
|
|
28
|
+
#
|
|
29
|
+
# The column method accepts a block as an argument which will then be rendered
|
|
30
|
+
# within the context of the view for each of the objects in the collection.
|
|
31
|
+
#
|
|
32
|
+
# index do
|
|
33
|
+
# column "Title" do |post|
|
|
34
|
+
# link_to post.title, admin_post_path(post)
|
|
35
|
+
# end
|
|
36
|
+
# end
|
|
37
|
+
#
|
|
38
|
+
# The block gets called once for each resource in the collection. The resource gets passed into
|
|
39
|
+
# the block as an argument.
|
|
40
|
+
#
|
|
41
|
+
# To setup links to View, Edit and Delete a resource, use the default_actions method:
|
|
42
|
+
#
|
|
43
|
+
# index do
|
|
44
|
+
# column :title
|
|
45
|
+
# default_actions
|
|
46
|
+
# end
|
|
47
|
+
#
|
|
48
|
+
# Alternatively, you can create a column with custom links:
|
|
49
|
+
#
|
|
50
|
+
# index do
|
|
51
|
+
# column :title
|
|
52
|
+
# column "Actions" do |post|
|
|
53
|
+
# link_to "View", admin_post_path(post)
|
|
54
|
+
# end
|
|
55
|
+
# end
|
|
56
|
+
#
|
|
57
|
+
#
|
|
58
|
+
# == Sorting
|
|
59
|
+
#
|
|
60
|
+
# When a column is generated from an Active Record attribute, the table is
|
|
61
|
+
# sortable by default. If you are creating a custom column, you may need to give
|
|
62
|
+
# Active Admin a hint for how to sort the table.
|
|
63
|
+
#
|
|
64
|
+
# If a column is defined using a block, you must pass the key to turn on sorting. The key
|
|
65
|
+
# is the attribute which gets used to sort objects using Active Record.
|
|
66
|
+
#
|
|
67
|
+
# index do
|
|
68
|
+
# column "Title", :sortable => :title do |post|
|
|
69
|
+
# link_to post.title, admin_post_path(post)
|
|
70
|
+
# end
|
|
71
|
+
# end
|
|
72
|
+
#
|
|
73
|
+
# You can turn off sorting on any column by passing false:
|
|
74
|
+
#
|
|
75
|
+
# index do
|
|
76
|
+
# column :title, :sortable => false
|
|
77
|
+
# end
|
|
78
|
+
#
|
|
79
|
+
# == Showing and Hiding Columns
|
|
80
|
+
#
|
|
81
|
+
# The entire index block is rendered within the context of the view, so you can
|
|
82
|
+
# easily do things that show or hide columns based on the current context.
|
|
83
|
+
#
|
|
84
|
+
# For example, if you were using CanCan:
|
|
85
|
+
#
|
|
86
|
+
# index do
|
|
87
|
+
# column :title, :sortable => false
|
|
88
|
+
# if can? :manage, Post
|
|
89
|
+
# column :some_secret_data
|
|
90
|
+
# end
|
|
91
|
+
# end
|
|
92
|
+
#
|
|
4
93
|
class IndexAsTable < ActiveAdmin::Component
|
|
5
94
|
|
|
6
95
|
def build(page_config, collection)
|
|
7
96
|
table_options = {
|
|
8
|
-
:id => active_admin_config.plural_resource_name.underscore,
|
|
97
|
+
:id => active_admin_config.plural_resource_name.underscore,
|
|
9
98
|
:sortable => true,
|
|
10
|
-
:class => "index_table"
|
|
99
|
+
:class => "index_table",
|
|
100
|
+
:i18n => active_admin_config.resource
|
|
11
101
|
}
|
|
102
|
+
|
|
12
103
|
table_for collection, table_options do |t|
|
|
13
104
|
instance_exec(t, &page_config.block)
|
|
14
105
|
end
|
|
@@ -35,9 +126,9 @@ module ActiveAdmin
|
|
|
35
126
|
:name => ""
|
|
36
127
|
}.merge(options)
|
|
37
128
|
column options[:name] do |resource|
|
|
38
|
-
links = link_to
|
|
39
|
-
links += link_to
|
|
40
|
-
links += link_to
|
|
129
|
+
links = link_to I18n.t('active_admin.view'), resource_path(resource), :class => "member_link view_link"
|
|
130
|
+
links += link_to I18n.t('active_admin.edit'), edit_resource_path(resource), :class => "member_link edit_link"
|
|
131
|
+
links += link_to I18n.t('active_admin.delete'), resource_path(resource), :method => :delete, :confirm => I18n.t('active_admin.delete_confirmation'), :class => "member_link delete_link"
|
|
41
132
|
links
|
|
42
133
|
end
|
|
43
134
|
end
|
|
@@ -57,7 +148,7 @@ module ActiveAdmin
|
|
|
57
148
|
# post.published? ? 'published' : 'draft'
|
|
58
149
|
# end
|
|
59
150
|
# end
|
|
60
|
-
#
|
|
151
|
+
#
|
|
61
152
|
def status_tag(*args, &block)
|
|
62
153
|
col = Column.new(*args, &block)
|
|
63
154
|
data = col.data
|