andrewroth_activeadmin 0.3.4
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/.document +5 -0
- data/.gitignore +35 -0
- data/.travis.yml +4 -0
- data/.yardopts +8 -0
- data/CHANGELOG.md +301 -0
- data/Gemfile +40 -0
- data/Guardfile +8 -0
- data/LICENSE +25 -0
- data/README.rdoc +113 -0
- data/Rakefile +18 -0
- data/activeadmin.gemspec +28 -0
- data/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/app/assets/images/active_admin/loading.gif +0 -0
- data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
- data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
- data/app/assets/images/active_admin/orderable.png +0 -0
- data/app/assets/javascripts/active_admin/base.js +12 -0
- data/app/assets/javascripts/active_admin/vendor.js +382 -0
- data/app/assets/stylesheets/active_admin/_base.css.scss +363 -0
- data/app/assets/stylesheets/active_admin/_forms.css.scss +259 -0
- data/app/assets/stylesheets/active_admin/_header.css.scss +121 -0
- data/app/assets/stylesheets/active_admin/_mixins.css.scss +1 -0
- data/app/assets/stylesheets/active_admin/_typography.css.scss +102 -0
- data/app/assets/stylesheets/active_admin/components/_comments.css.scss +43 -0
- data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +125 -0
- data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +39 -0
- data/app/assets/stylesheets/active_admin/components/_tables.css.scss +68 -0
- data/app/assets/stylesheets/active_admin/mixins/_all.css.scss +10 -0
- data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +27 -0
- data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +29 -0
- data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +20 -0
- data/app/assets/stylesheets/active_admin/mixins/_reset.css.scss +165 -0
- data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +43 -0
- data/app/assets/stylesheets/active_admin/mixins/_sections.css.scss +34 -0
- data/app/assets/stylesheets/active_admin/mixins/_shadows.css.scss +21 -0
- data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +17 -0
- data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +21 -0
- data/app/views/active_admin/dashboard/index.html.arb +1 -0
- data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
- data/app/views/active_admin/devise/passwords/edit.html.erb +16 -0
- data/app/views/active_admin/devise/passwords/new.html.erb +14 -0
- data/app/views/active_admin/devise/sessions/new.html.erb +18 -0
- data/app/views/active_admin/devise/shared/_links.erb +20 -0
- data/app/views/active_admin/devise/unlocks/new.html.erb +12 -0
- data/app/views/active_admin/resource/edit.html.arb +1 -0
- data/app/views/active_admin/resource/index.csv.erb +20 -0
- data/app/views/active_admin/resource/index.html.arb +1 -0
- data/app/views/active_admin/resource/new.html.arb +1 -0
- data/app/views/active_admin/resource/show.html.arb +1 -0
- data/app/views/layouts/active_admin.html.arb +1 -0
- data/app/views/layouts/active_admin_logged_out.html.erb +35 -0
- data/cucumber.yml +2 -0
- data/docs/0-installation.md +50 -0
- data/docs/1-general-configuration.md +43 -0
- data/docs/2-resource-customization.md +114 -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 +36 -0
- data/docs/7-sidebars.md +35 -0
- data/docs/8-custom-actions.md +123 -0
- data/features/comments/commenting.feature +112 -0
- data/features/comments/viewing_index.feature +19 -0
- data/features/dashboard.feature +26 -0
- data/features/edit_page.feature +106 -0
- data/features/first_boot.feature +16 -0
- data/features/global_navigation.feature +30 -0
- data/features/index/filters.feature +35 -0
- data/features/index/format_as_csv.feature +46 -0
- data/features/index/formats.feature +12 -0
- data/features/index/index_as_block.feature +15 -0
- data/features/index/index_as_blog.feature +50 -0
- data/features/index/index_as_grid.feature +45 -0
- data/features/index/index_as_table.feature +81 -0
- data/features/index/index_blank_slate.feature +56 -0
- data/features/index/index_scopes.feature +52 -0
- data/features/index/pagination.feature +17 -0
- data/features/menu.feature +37 -0
- data/features/new_page.feature +75 -0
- data/features/registering_assets.feature +35 -0
- data/features/registering_resources.feature +33 -0
- data/features/show/default_content.feature +43 -0
- data/features/show/page_title.feature +33 -0
- data/features/sidebar_sections.feature +127 -0
- data/features/specifying_actions.feature +87 -0
- data/features/step_definitions/action_item_steps.rb +7 -0
- data/features/step_definitions/additional_web_steps.rb +77 -0
- data/features/step_definitions/asset_steps.rb +7 -0
- data/features/step_definitions/attribute_steps.rb +13 -0
- data/features/step_definitions/comment_steps.rb +8 -0
- data/features/step_definitions/configuration_steps.rb +31 -0
- data/features/step_definitions/dashboard_steps.rb +11 -0
- data/features/step_definitions/factory_steps.rb +29 -0
- data/features/step_definitions/flash_steps.rb +3 -0
- data/features/step_definitions/format_steps.rb +35 -0
- data/features/step_definitions/index_scope_steps.rb +20 -0
- data/features/step_definitions/layout_steps.rb +3 -0
- data/features/step_definitions/menu_steps.rb +7 -0
- data/features/step_definitions/pagination_steps.rb +8 -0
- data/features/step_definitions/sidebar_steps.rb +7 -0
- data/features/step_definitions/tab_steps.rb +3 -0
- data/features/step_definitions/user_steps.rb +26 -0
- data/features/step_definitions/web_steps.rb +211 -0
- data/features/sti_resource.feature +61 -0
- data/features/support/env.rb +96 -0
- data/features/support/paths.rb +50 -0
- data/features/support/selectors.rb +45 -0
- data/features/users/logging_in.feature +34 -0
- data/features/users/logging_out.feature +13 -0
- data/lib/active_admin.rb +82 -0
- data/lib/active_admin/abstract_view_factory.rb +95 -0
- data/lib/active_admin/application.rb +231 -0
- data/lib/active_admin/arbre.rb +23 -0
- data/lib/active_admin/arbre/builder.rb +111 -0
- data/lib/active_admin/arbre/context.rb +45 -0
- data/lib/active_admin/arbre/core_extensions.rb +5 -0
- data/lib/active_admin/arbre/html/attributes.rb +20 -0
- data/lib/active_admin/arbre/html/class_list.rb +28 -0
- data/lib/active_admin/arbre/html/collection.rb +27 -0
- data/lib/active_admin/arbre/html/document.rb +42 -0
- data/lib/active_admin/arbre/html/element.rb +151 -0
- data/lib/active_admin/arbre/html/html5_elements.rb +47 -0
- data/lib/active_admin/arbre/html/tag.rb +137 -0
- data/lib/active_admin/arbre/html/text_node.rb +35 -0
- data/lib/active_admin/asset_registration.rb +34 -0
- data/lib/active_admin/callbacks.rb +89 -0
- data/lib/active_admin/comments.rb +88 -0
- data/lib/active_admin/comments/comment.rb +21 -0
- data/lib/active_admin/comments/configuration.rb +18 -0
- data/lib/active_admin/comments/namespace_helper.rb +14 -0
- data/lib/active_admin/comments/resource_helper.rb +17 -0
- data/lib/active_admin/comments/show_page_helper.rb +23 -0
- data/lib/active_admin/comments/views.rb +3 -0
- data/lib/active_admin/comments/views/active_admin_comment.rb +0 -0
- data/lib/active_admin/comments/views/active_admin_comments.rb +82 -0
- data/lib/active_admin/component.rb +22 -0
- data/lib/active_admin/controller_action.rb +12 -0
- data/lib/active_admin/csv_builder.rb +45 -0
- data/lib/active_admin/dashboards.rb +48 -0
- data/lib/active_admin/dashboards/dashboard_controller.rb +38 -0
- data/lib/active_admin/dashboards/section.rb +34 -0
- data/lib/active_admin/dependency_checker.rb +30 -0
- data/lib/active_admin/deprecation.rb +36 -0
- data/lib/active_admin/devise.rb +54 -0
- data/lib/active_admin/dsl.rb +224 -0
- data/lib/active_admin/engine.rb +4 -0
- data/lib/active_admin/event.rb +31 -0
- data/lib/active_admin/form_builder.rb +118 -0
- data/lib/active_admin/helpers/optional_display.rb +34 -0
- data/lib/active_admin/helpers/scope_chain.rb +23 -0
- data/lib/active_admin/helpers/settings.rb +70 -0
- data/lib/active_admin/iconic.rb +51 -0
- data/lib/active_admin/iconic/icons.rb +142 -0
- data/lib/active_admin/locales/bg.yml +40 -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 +40 -0
- data/lib/active_admin/locales/ja.yml +40 -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/sv-SE.yml +40 -0
- data/lib/active_admin/locales/zh_cn.yml +40 -0
- data/lib/active_admin/menu.rb +42 -0
- data/lib/active_admin/menu_item.rb +73 -0
- data/lib/active_admin/namespace.rb +206 -0
- data/lib/active_admin/page_config.rb +15 -0
- data/lib/active_admin/reloader.rb +64 -0
- data/lib/active_admin/renderer.rb +87 -0
- data/lib/active_admin/resource.rb +159 -0
- data/lib/active_admin/resource/action_items.rb +88 -0
- data/lib/active_admin/resource/belongs_to.rb +31 -0
- data/lib/active_admin/resource/menu.rb +45 -0
- data/lib/active_admin/resource/naming.rb +50 -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 +105 -0
- data/lib/active_admin/resource_controller/action_builder.rb +21 -0
- data/lib/active_admin/resource_controller/actions.rb +79 -0
- data/lib/active_admin/resource_controller/callbacks.rb +47 -0
- data/lib/active_admin/resource_controller/collection.rb +138 -0
- data/lib/active_admin/resource_controller/filters.rb +58 -0
- data/lib/active_admin/resource_controller/form.rb +42 -0
- data/lib/active_admin/resource_controller/menu.rb +29 -0
- data/lib/active_admin/resource_controller/page_configurations.rb +53 -0
- data/lib/active_admin/resource_controller/scoping.rb +36 -0
- data/lib/active_admin/resource_controller/sidebars.rb +18 -0
- 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 +31 -0
- 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 +3 -0
- data/lib/active_admin/view_factory.rb +23 -0
- data/lib/active_admin/view_helpers.rb +22 -0
- data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
- data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
- data/lib/active_admin/view_helpers/auto_link_helper.rb +42 -0
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +29 -0
- data/lib/active_admin/view_helpers/display_helper.rb +38 -0
- data/lib/active_admin/view_helpers/filter_form_helper.rb +186 -0
- data/lib/active_admin/view_helpers/form_helper.rb +13 -0
- data/lib/active_admin/view_helpers/icon_helper.rb +12 -0
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +26 -0
- data/lib/active_admin/view_helpers/renderer_helper.rb +29 -0
- data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
- data/lib/active_admin/view_helpers/title_helper.rb +11 -0
- data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
- data/lib/active_admin/views.rb +8 -0
- data/lib/active_admin/views/action_items.rb +17 -0
- data/lib/active_admin/views/components/attributes_table.rb +66 -0
- data/lib/active_admin/views/components/blank_slate.rb +17 -0
- data/lib/active_admin/views/components/columns.rb +47 -0
- data/lib/active_admin/views/components/paginated_collection.rb +92 -0
- data/lib/active_admin/views/components/panel.rb +26 -0
- data/lib/active_admin/views/components/scopes.rb +69 -0
- data/lib/active_admin/views/components/sidebar_section.rb +28 -0
- data/lib/active_admin/views/components/status_tag.rb +55 -0
- data/lib/active_admin/views/components/table_for.rb +193 -0
- data/lib/active_admin/views/dashboard_section_renderer.rb +19 -0
- data/lib/active_admin/views/header_renderer.rb +57 -0
- data/lib/active_admin/views/index_as_block.rb +29 -0
- data/lib/active_admin/views/index_as_blog.rb +129 -0
- data/lib/active_admin/views/index_as_grid.rb +70 -0
- data/lib/active_admin/views/index_as_table.rb +164 -0
- data/lib/active_admin/views/pages/base.rb +167 -0
- data/lib/active_admin/views/pages/dashboard.rb +62 -0
- data/lib/active_admin/views/pages/edit.rb +28 -0
- data/lib/active_admin/views/pages/index.rb +91 -0
- data/lib/active_admin/views/pages/layout.rb +26 -0
- data/lib/active_admin/views/pages/new.rb +28 -0
- data/lib/active_admin/views/pages/show.rb +56 -0
- data/lib/active_admin/views/tabbed_navigation.rb +94 -0
- data/lib/activeadmin.rb +1 -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/devise/devise_generator.rb +49 -0
- data/lib/generators/active_admin/install/install_generator.rb +44 -0
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +103 -0
- data/lib/generators/active_admin/install/templates/dashboards.rb +38 -0
- data/lib/generators/active_admin/install/templates/migrations/1_create_admin_notes.rb +16 -0
- data/lib/generators/active_admin/install/templates/migrations/2_move_admin_notes_to_comments.rb +25 -0
- data/lib/generators/active_admin/resource/resource_generator.rb +16 -0
- data/lib/generators/active_admin/resource/templates/admin.rb +3 -0
- data/script/local +44 -0
- data/script/use_rails +46 -0
- data/spec/integration/belongs_to_spec.rb +42 -0
- data/spec/integration/default_namespace.rb +77 -0
- data/spec/integration/javascript_spec.rb +20 -0
- data/spec/integration/memory_spec.rb +38 -0
- data/spec/integration/stylesheets_spec.rb +41 -0
- data/spec/spec_helper.rb +167 -0
- data/spec/support/detect_rails_version.rb +10 -0
- data/spec/support/integration_example_group.rb +33 -0
- data/spec/support/jslint.yml +80 -0
- data/spec/support/rails_template.rb +32 -0
- data/spec/support/rails_template_with_data.rb +33 -0
- data/spec/support/templates/cucumber.rb +24 -0
- data/spec/unit/abstract_view_factory_spec.rb +79 -0
- data/spec/unit/action_builder_spec.rb +88 -0
- data/spec/unit/active_admin_spec.rb +17 -0
- data/spec/unit/application_spec.rb +87 -0
- data/spec/unit/arbre/context_spec.rb +35 -0
- data/spec/unit/arbre/html/element_finder_methods_spec.rb +54 -0
- data/spec/unit/arbre/html/element_spec.rb +223 -0
- data/spec/unit/arbre/html/tag_attributes_spec.rb +61 -0
- data/spec/unit/arbre/html/tag_spec.rb +63 -0
- data/spec/unit/arbre/html_spec.rb +209 -0
- data/spec/unit/asset_registration_spec.rb +37 -0
- data/spec/unit/auto_link_spec.rb +39 -0
- data/spec/unit/belongs_to_spec.rb +45 -0
- data/spec/unit/breadcrumbs_spec.rb +110 -0
- data/spec/unit/comments_spec.rb +57 -0
- data/spec/unit/component_spec.rb +18 -0
- data/spec/unit/controller_filters_spec.rb +34 -0
- data/spec/unit/csv_builder_spec.rb +83 -0
- data/spec/unit/dashboard_controller_spec.rb +26 -0
- data/spec/unit/dashboard_section_spec.rb +56 -0
- data/spec/unit/dashboards_spec.rb +59 -0
- data/spec/unit/devise_spec.rb +66 -0
- data/spec/unit/display_name_spec.rb +29 -0
- data/spec/unit/event_spec.rb +41 -0
- data/spec/unit/filter_form_builder_spec.rb +182 -0
- data/spec/unit/form_builder_spec.rb +256 -0
- 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 +143 -0
- data/spec/unit/menu_spec.rb +53 -0
- data/spec/unit/namespace_spec.rb +214 -0
- data/spec/unit/pretty_format_spec.rb +35 -0
- data/spec/unit/rails_spec.rb +43 -0
- data/spec/unit/registration_spec.rb +76 -0
- data/spec/unit/reloader_spec.rb +80 -0
- data/spec/unit/renderer_spec.rb +108 -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 +75 -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 +34 -0
- data/spec/unit/resource_controller_spec.rb +152 -0
- data/spec/unit/resource_spec.rb +269 -0
- data/spec/unit/routing_spec.rb +88 -0
- data/spec/unit/sass/helpers_spec.rb +47 -0
- data/spec/unit/scope_spec.rb +41 -0
- data/spec/unit/view_factory_spec.rb +19 -0
- data/spec/unit/views/components/attributes_table_spec.rb +100 -0
- data/spec/unit/views/components/blank_slate_spec.rb +15 -0
- data/spec/unit/views/components/columns_spec.rb +75 -0
- data/spec/unit/views/components/panel_spec.rb +29 -0
- data/spec/unit/views/components/sidebar_section_spec.rb +37 -0
- data/spec/unit/views/components/status_tag_spec.rb +79 -0
- data/spec/unit/views/components/table_for_spec.rb +131 -0
- 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 +57 -0
- data/tasks/yard.rake +6 -0
- metadata +646 -0
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Views
|
|
3
|
+
class TableFor < Arbre::HTML::Table
|
|
4
|
+
builder_method :table_for
|
|
5
|
+
|
|
6
|
+
def tag_name
|
|
7
|
+
'table'
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def build(collection, options = {})
|
|
11
|
+
@sortable = options.delete(:sortable)
|
|
12
|
+
@resource_class = options.delete(:i18n)
|
|
13
|
+
@collection = collection
|
|
14
|
+
@columns = []
|
|
15
|
+
build_table
|
|
16
|
+
super(options)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def column(*args, &block)
|
|
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)
|
|
25
|
+
@columns << col
|
|
26
|
+
|
|
27
|
+
# Build our header item
|
|
28
|
+
within @header_row do
|
|
29
|
+
build_table_header(col)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Add a table cell for each item
|
|
33
|
+
@collection.each_with_index do |item, i|
|
|
34
|
+
within @tbody.children[i] do
|
|
35
|
+
build_table_cell(col, item)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def sortable?
|
|
41
|
+
@sortable
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Returns the columns to display based on the conditional block
|
|
45
|
+
def visible_columns
|
|
46
|
+
@visible_columns ||= @columns.select{|col| col.display_column? }
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
protected
|
|
50
|
+
|
|
51
|
+
def build_table
|
|
52
|
+
build_table_head
|
|
53
|
+
build_table_body
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def build_table_head
|
|
57
|
+
@thead = thead do
|
|
58
|
+
@header_row = tr
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def build_table_header(col)
|
|
63
|
+
if sortable? && col.sortable?
|
|
64
|
+
build_sortable_header_for(col.title, col.sort_key)
|
|
65
|
+
else
|
|
66
|
+
th(col.title)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def build_sortable_header_for(title, sort_key)
|
|
71
|
+
classes = Arbre::HTML::ClassList.new(["sortable"])
|
|
72
|
+
if current_sort[0] == sort_key
|
|
73
|
+
classes << "sorted-#{current_sort[1]}"
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
th :class => classes do
|
|
77
|
+
link_to(title, params.merge(:order => "#{sort_key}_#{order_for_sort_key(sort_key)}").except(:page))
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def build_table_body
|
|
82
|
+
@tbody = tbody do
|
|
83
|
+
# Build enough rows for our collection
|
|
84
|
+
@collection.each{|_| tr(:class => cycle('odd', 'even'), :id => dom_id(_)) }
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def build_table_cell(col, item)
|
|
89
|
+
td do
|
|
90
|
+
rvalue = call_method_or_proc_on(item, col.data, :exec => false)
|
|
91
|
+
if col.data.is_a?(Symbol)
|
|
92
|
+
rvalue = pretty_format(rvalue)
|
|
93
|
+
end
|
|
94
|
+
rvalue
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Returns an array for the current sort order
|
|
99
|
+
# current_sort[0] #=> sort_key
|
|
100
|
+
# current_sort[1] #=> asc | desc
|
|
101
|
+
def current_sort
|
|
102
|
+
@current_sort ||= if params[:order] && params[:order] =~ /^([\w\_\.]+)_(desc|asc)$/
|
|
103
|
+
[$1,$2]
|
|
104
|
+
else
|
|
105
|
+
[]
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# Returns the order to use for a given sort key
|
|
110
|
+
#
|
|
111
|
+
# Default is to use 'desc'. If the current sort key is
|
|
112
|
+
# 'desc' it will return 'asc'
|
|
113
|
+
def order_for_sort_key(sort_key)
|
|
114
|
+
current_key, current_order = current_sort
|
|
115
|
+
return 'desc' unless current_key == sort_key
|
|
116
|
+
current_order == 'desc' ? 'asc' : 'desc'
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def default_options
|
|
120
|
+
{
|
|
121
|
+
:i18n => @resource_class
|
|
122
|
+
}
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
class Column
|
|
126
|
+
|
|
127
|
+
attr_accessor :title, :data
|
|
128
|
+
|
|
129
|
+
def initialize(*args, &block)
|
|
130
|
+
@options = default_options.merge(args.last.is_a?(::Hash) ? args.pop : {})
|
|
131
|
+
@title = pretty_title args[0]
|
|
132
|
+
@data = args[1] || args[0]
|
|
133
|
+
@data = block if block
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def sortable?
|
|
137
|
+
if @data.is_a?(Proc)
|
|
138
|
+
[String, Symbol].include?(@options[:sortable].class)
|
|
139
|
+
else
|
|
140
|
+
@options[:sortable]
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
#
|
|
145
|
+
# Returns the key to be used for sorting this column
|
|
146
|
+
#
|
|
147
|
+
# Defaults to the column's method if its a symbol
|
|
148
|
+
# column :username
|
|
149
|
+
# # => Sort key will be set to 'username'
|
|
150
|
+
#
|
|
151
|
+
# You can set the sort key by passing a string or symbol
|
|
152
|
+
# to the sortable option:
|
|
153
|
+
# column :username, :sortable => 'other_column_to_sort_on'
|
|
154
|
+
#
|
|
155
|
+
# If you pass a block to be rendered for this column, the column
|
|
156
|
+
# will not be sortable unless you pass a string to sortable to
|
|
157
|
+
# sort the column on:
|
|
158
|
+
#
|
|
159
|
+
# column('Username', :sortable => 'login'){ @user.pretty_name }
|
|
160
|
+
# # => Sort key will be 'login'
|
|
161
|
+
#
|
|
162
|
+
def sort_key
|
|
163
|
+
if @options[:sortable] == true || @options[:sortable] == false
|
|
164
|
+
@data.to_s
|
|
165
|
+
else
|
|
166
|
+
@options[:sortable].to_s
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
private
|
|
171
|
+
|
|
172
|
+
def pretty_title(raw)
|
|
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
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def default_options
|
|
185
|
+
{
|
|
186
|
+
:sortable => true
|
|
187
|
+
}
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Views
|
|
3
|
+
class DashboardSection < ActiveAdmin::Views::Panel
|
|
4
|
+
|
|
5
|
+
def build(section)
|
|
6
|
+
@section = section
|
|
7
|
+
super(title, :icon => @section.icon)
|
|
8
|
+
instance_eval &@section.block
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
protected
|
|
12
|
+
|
|
13
|
+
def title
|
|
14
|
+
@section.name.to_s.titleize
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Views
|
|
3
|
+
|
|
4
|
+
# Renderer for the header of the application. Includes the page
|
|
5
|
+
# title, global navigation and utility navigation.
|
|
6
|
+
class HeaderRenderer < ::ActiveAdmin::Renderer
|
|
7
|
+
|
|
8
|
+
def to_html
|
|
9
|
+
title + global_navigation + utility_navigation
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
protected
|
|
13
|
+
|
|
14
|
+
def title
|
|
15
|
+
if !active_admin_application.site_title_link || active_admin_application.site_title_link == ""
|
|
16
|
+
content_tag 'h1', active_admin_application.site_title, :id => 'site_title'
|
|
17
|
+
else
|
|
18
|
+
content_tag 'h1', link_to(active_admin_application.site_title, active_admin_application.site_title_link), :id => 'site_title'
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Renders the global navigation returned by
|
|
23
|
+
# ActiveAdmin::ResourceController#current_menu
|
|
24
|
+
#
|
|
25
|
+
# It uses the ActiveAdmin.tabs_renderer option
|
|
26
|
+
def global_navigation
|
|
27
|
+
render view_factory.global_navigation, current_menu
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def utility_navigation
|
|
31
|
+
content_tag 'p', :id => "utility_nav" do
|
|
32
|
+
if current_active_admin_user?
|
|
33
|
+
html = content_tag(:span, display_name(current_active_admin_user), :class => "current_user")
|
|
34
|
+
|
|
35
|
+
if active_admin_application.logout_link_path
|
|
36
|
+
html << link_to(I18n.t('active_admin.logout'), logout_path, :method => logout_method)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Returns the logout path from the application settings
|
|
43
|
+
def logout_path
|
|
44
|
+
if active_admin_application.logout_link_path.is_a?(Symbol)
|
|
45
|
+
send(active_admin_application.logout_link_path)
|
|
46
|
+
else
|
|
47
|
+
active_admin_application.logout_link_path
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def logout_method
|
|
52
|
+
active_admin_application.logout_link_method || :get
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Views
|
|
3
|
+
|
|
4
|
+
# = Index as a Block
|
|
5
|
+
#
|
|
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.
|
|
9
|
+
#
|
|
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
|
|
17
|
+
# end
|
|
18
|
+
#
|
|
19
|
+
class IndexAsBlock < ActiveAdmin::Component
|
|
20
|
+
|
|
21
|
+
def build(page_config, collection)
|
|
22
|
+
collection.each do |obj|
|
|
23
|
+
instance_exec(obj, &page_config.block)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
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
|
+
#
|
|
64
|
+
class IndexAsBlog < ActiveAdmin::Component
|
|
65
|
+
|
|
66
|
+
def build(page_config, collection)
|
|
67
|
+
@page_config = page_config
|
|
68
|
+
@collection = collection
|
|
69
|
+
|
|
70
|
+
# Call the block passed in. This will set the
|
|
71
|
+
# title and body methods
|
|
72
|
+
instance_eval &page_config.block if page_config.block
|
|
73
|
+
|
|
74
|
+
build_posts
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# Setter method for the configuration of the title
|
|
78
|
+
def title(method = nil, &block)
|
|
79
|
+
if block_given? || method
|
|
80
|
+
@title = block_given? ? block : method
|
|
81
|
+
end
|
|
82
|
+
@title
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Setter method for the configuration of the body
|
|
86
|
+
#
|
|
87
|
+
def body(method = nil, &block)
|
|
88
|
+
if block_given? || method
|
|
89
|
+
@body = block_given? ? block : method
|
|
90
|
+
end
|
|
91
|
+
@body
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
private
|
|
95
|
+
|
|
96
|
+
def build_posts
|
|
97
|
+
@collection.each do |post|
|
|
98
|
+
build_post(post)
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def build_post(post)
|
|
103
|
+
div :for => post do
|
|
104
|
+
build_title(post)
|
|
105
|
+
build_body(post)
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def build_title(post)
|
|
110
|
+
if @title
|
|
111
|
+
h3 do
|
|
112
|
+
link_to(call_method_or_proc_on(post, @title), resource_path(post))
|
|
113
|
+
end
|
|
114
|
+
else
|
|
115
|
+
h3 do
|
|
116
|
+
auto_link(post)
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def build_body(post)
|
|
122
|
+
if @body
|
|
123
|
+
div(call_method_or_proc_on(post, @body), :class => 'content')
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
end # Posts
|
|
128
|
+
end
|
|
129
|
+
end
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
module ActiveAdmin
|
|
2
|
+
module Views
|
|
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
|
|
25
|
+
|
|
26
|
+
def build(page_config, collection)
|
|
27
|
+
@page_config = page_config
|
|
28
|
+
@collection = collection
|
|
29
|
+
build_table
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def number_of_columns
|
|
33
|
+
@page_config[:columns] || default_number_of_columns
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
protected
|
|
37
|
+
|
|
38
|
+
def build_table
|
|
39
|
+
table :class => "index_grid" do
|
|
40
|
+
collection.in_groups_of(number_of_columns).each do |group|
|
|
41
|
+
build_row(group)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def build_row(group)
|
|
47
|
+
tr do
|
|
48
|
+
group.each do |item|
|
|
49
|
+
item ? build_item(item) : build_empty_cell
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def build_item(item)
|
|
55
|
+
td :for => item do
|
|
56
|
+
instance_exec(item, &@page_config.block)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def build_empty_cell
|
|
61
|
+
td ' '.html_safe
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def default_number_of_columns
|
|
65
|
+
3
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|