super-sharp-tool 0.0.1
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.
- checksums.yaml +7 -0
- data/activeadmin-3.5.1/CHANGELOG.md +1153 -0
- data/activeadmin-3.5.1/CODE_OF_CONDUCT.md +74 -0
- data/activeadmin-3.5.1/CONTRIBUTING.md +187 -0
- data/activeadmin-3.5.1/LICENSE +20 -0
- data/activeadmin-3.5.1/README.md +117 -0
- data/activeadmin-3.5.1/app/assets/javascripts/active_admin/base.js +520 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/_base.scss +57 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/_forms.scss +315 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/_header.scss +188 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/_mixins.scss +1 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/_normalize.scss +349 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/_print.scss +287 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/_typography.scss +100 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_batch_actions.scss +6 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_blank_slates.scss +30 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +20 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_buttons.scss +6 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_columns.scss +3 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_comments.scss +41 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_date_picker.scss +148 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +154 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_flash_messages.scss +37 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_grid.scss +9 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_index_list.scss +12 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_links.scss +5 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +34 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_pagination.scss +58 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_panels.scss +6 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_scopes.scss +13 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_status_tags.scss +12 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_table_tools.scss +70 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_tables.scss +112 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_tabs.scss +68 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +16 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_buttons.scss +65 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_gradients.scss +28 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_rounded.scss +22 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_sections.scss +41 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_shadows.scss +15 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_typography.scss +3 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_utilities.scss +17 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/mixins/_variables.scss +51 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/pages/_logged_out.scss +44 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/structure/_footer.scss +19 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/structure/_main_structure.scss +29 -0
- data/activeadmin-3.5.1/app/assets/stylesheets/active_admin/structure/_title_bar.scss +43 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/base.js +28 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/ext/jquery-ui.js +7 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/ext/jquery.js +9 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/initializers/batch-actions.js +61 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/initializers/checkbox-toggler.js +3 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/initializers/datepicker.js +19 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/initializers/dropdown-menu.js +9 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/initializers/filters.js +10 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/initializers/has-many.js +98 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/initializers/per-page.js +13 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/initializers/table-checkbox-toggler.js +3 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/initializers/tabs.js +6 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/lib/checkbox-toggler.js +49 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/lib/dropdown-menu.js +116 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/lib/filters.js +39 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/lib/modal-dialog.js +63 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/lib/per-page.js +38 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/lib/table-checkbox-toggler.js +38 -0
- data/activeadmin-3.5.1/app/javascript/active_admin/lib/utils.js +40 -0
- data/activeadmin-3.5.1/app/views/active_admin/devise/confirmations/new.html.erb +15 -0
- data/activeadmin-3.5.1/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/activeadmin-3.5.1/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
- data/activeadmin-3.5.1/app/views/active_admin/devise/passwords/edit.html.erb +18 -0
- data/activeadmin-3.5.1/app/views/active_admin/devise/passwords/new.html.erb +15 -0
- data/activeadmin-3.5.1/app/views/active_admin/devise/registrations/new.html.erb +21 -0
- data/activeadmin-3.5.1/app/views/active_admin/devise/sessions/new.html.erb +20 -0
- data/activeadmin-3.5.1/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
- data/activeadmin-3.5.1/app/views/active_admin/devise/shared/_links.erb +33 -0
- data/activeadmin-3.5.1/app/views/active_admin/devise/unlocks/new.html.erb +15 -0
- data/activeadmin-3.5.1/app/views/active_admin/page/index.html.arb +2 -0
- data/activeadmin-3.5.1/app/views/active_admin/resource/edit.html.arb +2 -0
- data/activeadmin-3.5.1/app/views/active_admin/resource/index.html.arb +2 -0
- data/activeadmin-3.5.1/app/views/active_admin/resource/new.html.arb +2 -0
- data/activeadmin-3.5.1/app/views/active_admin/resource/show.html.arb +2 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin/_first_page.html.erb +11 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin/_gap.html.erb +8 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin/_last_page.html.erb +11 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin/_next_page.html.erb +11 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin/_page.html.erb +12 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin/_paginator.html.erb +25 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin/_prev_page.html.erb +11 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin_countless/_first_page.html.erb +11 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin_countless/_gap.html.erb +8 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin_countless/_next_page.html.erb +11 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin_countless/_page.html.erb +12 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin_countless/_paginator.html.erb +24 -0
- data/activeadmin-3.5.1/app/views/kaminari/active_admin_countless/_prev_page.html.erb +11 -0
- data/activeadmin-3.5.1/app/views/layouts/active_admin.html.arb +2 -0
- data/activeadmin-3.5.1/app/views/layouts/active_admin_logged_out.html.erb +50 -0
- data/activeadmin-3.5.1/config/locales/ar.yml +128 -0
- data/activeadmin-3.5.1/config/locales/az.yml +131 -0
- data/activeadmin-3.5.1/config/locales/bg.yml +112 -0
- data/activeadmin-3.5.1/config/locales/bs.yml +114 -0
- data/activeadmin-3.5.1/config/locales/ca.yml +98 -0
- data/activeadmin-3.5.1/config/locales/cs.yml +102 -0
- data/activeadmin-3.5.1/config/locales/da.yml +130 -0
- data/activeadmin-3.5.1/config/locales/de-CH.yml +94 -0
- data/activeadmin-3.5.1/config/locales/de.yml +154 -0
- data/activeadmin-3.5.1/config/locales/el.yml +119 -0
- data/activeadmin-3.5.1/config/locales/en-CA.yml +132 -0
- data/activeadmin-3.5.1/config/locales/en-GB.yml +132 -0
- data/activeadmin-3.5.1/config/locales/en.yml +154 -0
- data/activeadmin-3.5.1/config/locales/eo.yml +137 -0
- data/activeadmin-3.5.1/config/locales/es-MX.yml +90 -0
- data/activeadmin-3.5.1/config/locales/es.yml +154 -0
- data/activeadmin-3.5.1/config/locales/fa.yml +112 -0
- data/activeadmin-3.5.1/config/locales/fi.yml +105 -0
- data/activeadmin-3.5.1/config/locales/fr.yml +133 -0
- data/activeadmin-3.5.1/config/locales/he.yml +132 -0
- data/activeadmin-3.5.1/config/locales/hr.yml +116 -0
- data/activeadmin-3.5.1/config/locales/hu.yml +94 -0
- data/activeadmin-3.5.1/config/locales/id.yml +128 -0
- data/activeadmin-3.5.1/config/locales/it.yml +154 -0
- data/activeadmin-3.5.1/config/locales/ja.yml +133 -0
- data/activeadmin-3.5.1/config/locales/ko.yml +113 -0
- data/activeadmin-3.5.1/config/locales/lt.yml +134 -0
- data/activeadmin-3.5.1/config/locales/lv.yml +85 -0
- data/activeadmin-3.5.1/config/locales/mk.yml +126 -0
- data/activeadmin-3.5.1/config/locales/nb.yml +122 -0
- data/activeadmin-3.5.1/config/locales/nl.yml +136 -0
- data/activeadmin-3.5.1/config/locales/pl.yml +160 -0
- data/activeadmin-3.5.1/config/locales/pt-BR.yml +135 -0
- data/activeadmin-3.5.1/config/locales/pt-PT.yml +85 -0
- data/activeadmin-3.5.1/config/locales/ro.yml +90 -0
- data/activeadmin-3.5.1/config/locales/ru.yml +135 -0
- data/activeadmin-3.5.1/config/locales/sk.yml +160 -0
- data/activeadmin-3.5.1/config/locales/sv-SE.yml +154 -0
- data/activeadmin-3.5.1/config/locales/tr.yml +133 -0
- data/activeadmin-3.5.1/config/locales/uk.yml +132 -0
- data/activeadmin-3.5.1/config/locales/vi.yml +154 -0
- data/activeadmin-3.5.1/config/locales/zh-CN.yml +154 -0
- data/activeadmin-3.5.1/config/locales/zh-TW.yml +128 -0
- data/activeadmin-3.5.1/lib/active_admin/abstract_view_factory.rb +48 -0
- data/activeadmin-3.5.1/lib/active_admin/application.rb +234 -0
- data/activeadmin-3.5.1/lib/active_admin/application_settings.rb +43 -0
- data/activeadmin-3.5.1/lib/active_admin/asset_registration.rb +30 -0
- data/activeadmin-3.5.1/lib/active_admin/authorization_adapter.rb +132 -0
- data/activeadmin-3.5.1/lib/active_admin/base_controller/authorization.rb +129 -0
- data/activeadmin-3.5.1/lib/active_admin/base_controller/menu.rb +35 -0
- data/activeadmin-3.5.1/lib/active_admin/base_controller.rb +82 -0
- data/activeadmin-3.5.1/lib/active_admin/batch_actions/controller.rb +41 -0
- data/activeadmin-3.5.1/lib/active_admin/batch_actions/resource_extension.rb +157 -0
- data/activeadmin-3.5.1/lib/active_admin/batch_actions/views/batch_action_form.rb +39 -0
- data/activeadmin-3.5.1/lib/active_admin/batch_actions/views/batch_action_selector.rb +59 -0
- data/activeadmin-3.5.1/lib/active_admin/batch_actions/views/selection_cells.rb +39 -0
- data/activeadmin-3.5.1/lib/active_admin/batch_actions.rb +17 -0
- data/activeadmin-3.5.1/lib/active_admin/callbacks.rb +89 -0
- data/activeadmin-3.5.1/lib/active_admin/cancan_adapter.rb +37 -0
- data/activeadmin-3.5.1/lib/active_admin/collection_decorator.rb +32 -0
- data/activeadmin-3.5.1/lib/active_admin/component.rb +6 -0
- data/activeadmin-3.5.1/lib/active_admin/controller_action.rb +14 -0
- data/activeadmin-3.5.1/lib/active_admin/csv_builder.rb +144 -0
- data/activeadmin-3.5.1/lib/active_admin/dependency.rb +97 -0
- data/activeadmin-3.5.1/lib/active_admin/devise.rb +91 -0
- data/activeadmin-3.5.1/lib/active_admin/dsl.rb +161 -0
- data/activeadmin-3.5.1/lib/active_admin/dynamic_setting.rb +39 -0
- data/activeadmin-3.5.1/lib/active_admin/dynamic_settings_node.rb +29 -0
- data/activeadmin-3.5.1/lib/active_admin/engine.rb +29 -0
- data/activeadmin-3.5.1/lib/active_admin/error.rb +63 -0
- data/activeadmin-3.5.1/lib/active_admin/filters/active.rb +30 -0
- data/activeadmin-3.5.1/lib/active_admin/filters/active_filter.rb +124 -0
- data/activeadmin-3.5.1/lib/active_admin/filters/active_sidebar.rb +28 -0
- data/activeadmin-3.5.1/lib/active_admin/filters/dsl.rb +22 -0
- data/activeadmin-3.5.1/lib/active_admin/filters/forms.rb +86 -0
- data/activeadmin-3.5.1/lib/active_admin/filters/formtastic_addons.rb +75 -0
- data/activeadmin-3.5.1/lib/active_admin/filters/resource_extension.rb +180 -0
- data/activeadmin-3.5.1/lib/active_admin/filters.rb +12 -0
- data/activeadmin-3.5.1/lib/active_admin/form_builder.rb +186 -0
- data/activeadmin-3.5.1/lib/active_admin/generators/boilerplate.rb +54 -0
- data/activeadmin-3.5.1/lib/active_admin/helpers/collection.rb +21 -0
- data/activeadmin-3.5.1/lib/active_admin/helpers/i18n.rb +8 -0
- data/activeadmin-3.5.1/lib/active_admin/helpers/optional_display.rb +39 -0
- data/activeadmin-3.5.1/lib/active_admin/helpers/routes/url_helpers.rb +16 -0
- data/activeadmin-3.5.1/lib/active_admin/helpers/scope_chain.rb +25 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/datepicker_input.rb +28 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/filters/base/search_method_select.rb +76 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/filters/base.rb +45 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/filters/boolean_input.rb +25 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/filters/check_boxes_input.rb +51 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/filters/date_picker_input.rb +14 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/filters/date_range_input.rb +53 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/filters/numeric_input.rb +13 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/filters/select_input.rb +59 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/filters/string_input.rb +27 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs/filters/text_input.rb +26 -0
- data/activeadmin-3.5.1/lib/active_admin/inputs.rb +22 -0
- data/activeadmin-3.5.1/lib/active_admin/localizers/resource_localizer.rb +36 -0
- data/activeadmin-3.5.1/lib/active_admin/localizers.rb +12 -0
- data/activeadmin-3.5.1/lib/active_admin/menu.rb +107 -0
- data/activeadmin-3.5.1/lib/active_admin/menu_collection.rb +92 -0
- data/activeadmin-3.5.1/lib/active_admin/menu_item.rb +70 -0
- data/activeadmin-3.5.1/lib/active_admin/namespace.rb +267 -0
- data/activeadmin-3.5.1/lib/active_admin/namespace_settings.rb +127 -0
- data/activeadmin-3.5.1/lib/active_admin/order_clause.rb +49 -0
- data/activeadmin-3.5.1/lib/active_admin/orm/active_record/comments/comment.rb +40 -0
- data/activeadmin-3.5.1/lib/active_admin/orm/active_record/comments/namespace_helper.rb +15 -0
- data/activeadmin-3.5.1/lib/active_admin/orm/active_record/comments/resource_helper.rb +18 -0
- data/activeadmin-3.5.1/lib/active_admin/orm/active_record/comments/show_page_helper.rb +24 -0
- data/activeadmin-3.5.1/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +101 -0
- data/activeadmin-3.5.1/lib/active_admin/orm/active_record/comments/views.rb +3 -0
- data/activeadmin-3.5.1/lib/active_admin/orm/active_record/comments.rb +102 -0
- data/activeadmin-3.5.1/lib/active_admin/orm/active_record.rb +6 -0
- data/activeadmin-3.5.1/lib/active_admin/orm/mongoid.rb +2 -0
- data/activeadmin-3.5.1/lib/active_admin/page.rb +112 -0
- data/activeadmin-3.5.1/lib/active_admin/page_controller.rb +30 -0
- data/activeadmin-3.5.1/lib/active_admin/page_dsl.rb +33 -0
- data/activeadmin-3.5.1/lib/active_admin/page_presenter.rb +34 -0
- data/activeadmin-3.5.1/lib/active_admin/pundit_adapter.rb +123 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/action_items.rb +121 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/attributes.rb +55 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/belongs_to.rb +53 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/controllers.rb +20 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/includes.rb +13 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/menu.rb +68 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/model.rb +16 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/naming.rb +63 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/ordering.rb +12 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/page_presenters.rb +83 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/pagination.rb +24 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/routes.rb +146 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/scope_to.rb +75 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/scopes.rb +53 -0
- data/activeadmin-3.5.1/lib/active_admin/resource/sidebars.rb +29 -0
- data/activeadmin-3.5.1/lib/active_admin/resource.rb +227 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_collection.rb +73 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_controller/action_builder.rb +32 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_controller/data_access.rb +348 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_controller/decorators.rb +81 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_controller/polymorphic_routes.rb +38 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_controller/resource_class_methods.rb +27 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_controller/scoping.rb +32 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_controller/sidebars.rb +19 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_controller/streaming.rb +45 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_controller.rb +68 -0
- data/activeadmin-3.5.1/lib/active_admin/resource_dsl.rb +210 -0
- data/activeadmin-3.5.1/lib/active_admin/router.rb +115 -0
- data/activeadmin-3.5.1/lib/active_admin/scope.rb +65 -0
- data/activeadmin-3.5.1/lib/active_admin/settings_node.rb +20 -0
- data/activeadmin-3.5.1/lib/active_admin/sidebar_section.rb +40 -0
- data/activeadmin-3.5.1/lib/active_admin/version.rb +4 -0
- data/activeadmin-3.5.1/lib/active_admin/view_factory.rb +28 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/active_admin_application_helper.rb +13 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/auto_link_helper.rb +46 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/breadcrumb_helper.rb +34 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/display_helper.rb +119 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/download_format_links_helper.rb +60 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/fields_for.rb +51 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/flash_helper.rb +15 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/form_helper.rb +21 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/method_or_proc_helper.rb +101 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/scope_name_helper.rb +17 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/sidebar_helper.rb +16 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/title_helper.rb +12 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers/view_factory_helper.rb +12 -0
- data/activeadmin-3.5.1/lib/active_admin/view_helpers.rb +21 -0
- data/activeadmin-3.5.1/lib/active_admin/views/action_items.rb +18 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/active_admin_form.rb +164 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/active_filters_sidebar_content.rb +59 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/attributes_table.rb +95 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/blank_slate.rb +18 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/columns.rb +162 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/dropdown_menu.rb +69 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/index_list.rb +70 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/menu.rb +33 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/menu_item.rb +59 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/paginated_collection.rb +164 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/panel.rb +39 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/scopes.rb +75 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/sidebar.rb +14 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/sidebar_section.rb +35 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/site_title.rb +55 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/status_tag.rb +76 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/table_for.rb +211 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/tabs.rb +41 -0
- data/activeadmin-3.5.1/lib/active_admin/views/components/unsupported_browser.rb +12 -0
- data/activeadmin-3.5.1/lib/active_admin/views/footer.rb +32 -0
- data/activeadmin-3.5.1/lib/active_admin/views/header.rb +20 -0
- data/activeadmin-3.5.1/lib/active_admin/views/index_as_block.rb +37 -0
- data/activeadmin-3.5.1/lib/active_admin/views/index_as_blog.rb +156 -0
- data/activeadmin-3.5.1/lib/active_admin/views/index_as_grid.rb +81 -0
- data/activeadmin-3.5.1/lib/active_admin/views/index_as_table.rb +401 -0
- data/activeadmin-3.5.1/lib/active_admin/views/pages/base.rb +134 -0
- data/activeadmin-3.5.1/lib/active_admin/views/pages/form.rb +65 -0
- data/activeadmin-3.5.1/lib/active_admin/views/pages/index.rb +166 -0
- data/activeadmin-3.5.1/lib/active_admin/views/pages/layout.rb +27 -0
- data/activeadmin-3.5.1/lib/active_admin/views/pages/page.rb +31 -0
- data/activeadmin-3.5.1/lib/active_admin/views/pages/show.rb +60 -0
- data/activeadmin-3.5.1/lib/active_admin/views/tabbed_navigation.rb +12 -0
- data/activeadmin-3.5.1/lib/active_admin/views/title_bar.rb +56 -0
- data/activeadmin-3.5.1/lib/active_admin/views.rb +9 -0
- data/activeadmin-3.5.1/lib/active_admin.rb +135 -0
- data/activeadmin-3.5.1/lib/activeadmin.rb +2 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/assets/assets_generator.rb +15 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/assets/templates/active_admin.scss +17 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/devise/devise_generator.rb +69 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/install/install_generator.rb +56 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/install/templates/active_admin.rb.erb +352 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/install/templates/admin_users.rb.erb +28 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/install/templates/dashboard.rb +33 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +16 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/page/USAGE +8 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/page/page_generator.rb +13 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/page/templates/page.rb +6 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/resource/resource_generator.rb +21 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/resource/templates/admin.rb.erb +46 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/webpacker/plugins/jquery.js +7 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/webpacker/templates/active_admin.js +5 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/webpacker/templates/active_admin.scss +17 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/webpacker/templates/print.scss +2 -0
- data/activeadmin-3.5.1/lib/generators/active_admin/webpacker/webpacker_generator.rb +27 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/data.js +39 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/disable-selection.js +51 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/focusable.js +79 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +81 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/keycode.js +51 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/labels.js +70 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/plugin.js +49 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/position.js +513 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/scroll-parent.js +50 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/tabbable.js +41 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/unique-id.js +54 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/version.js +20 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widget.js +761 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/button.js +454 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +294 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/controlgroup.js +304 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/datepicker.js +2240 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/dialog.js +957 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/draggable.js +1264 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/mouse.js +226 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/resizable.js +1281 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/sortable.js +1614 -0
- data/activeadmin-3.5.1/vendor/assets/javascripts/jquery-ui/widgets/tabs.js +918 -0
- data/super-sharp-tool.gemspec +12 -0
- metadata +383 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module ActiveAdmin
|
|
3
|
+
module Filters
|
|
4
|
+
|
|
5
|
+
class Disabled < RuntimeError
|
|
6
|
+
def initialize(action)
|
|
7
|
+
super "Cannot #{action} a filter when filters are disabled. Enable filters with 'config.filters = true'"
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
module ResourceExtension
|
|
12
|
+
|
|
13
|
+
def initialize(*)
|
|
14
|
+
super
|
|
15
|
+
add_filters_sidebar_section
|
|
16
|
+
add_search_status_sidebar_section
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Returns the filters for this resource. If filters are not enabled,
|
|
20
|
+
# it will always return an empty hash.
|
|
21
|
+
#
|
|
22
|
+
# @return [Hash] Filters that apply for this resource
|
|
23
|
+
def filters
|
|
24
|
+
filters_enabled? ? filter_lookup : {}
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Setter to enable / disable filters on this resource.
|
|
28
|
+
#
|
|
29
|
+
# Set to `nil` to inherit the setting from the namespace
|
|
30
|
+
def filters=(bool)
|
|
31
|
+
@filters_enabled = bool
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Setter to enable/disable showing current filters on this resource.
|
|
35
|
+
#
|
|
36
|
+
# Set to `nil` to inherit the setting from the namespace
|
|
37
|
+
def current_filters=(bool)
|
|
38
|
+
@current_filters_enabled = bool
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# @return [Boolean] If filters are enabled for this resource
|
|
42
|
+
def filters_enabled?
|
|
43
|
+
@filters_enabled.nil? ? namespace.filters : @filters_enabled
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# @return [Boolean] If show current filters are enabled for this resource
|
|
47
|
+
def current_filters_enabled?
|
|
48
|
+
@current_filters_enabled.nil? ? namespace.current_filters : @current_filters_enabled
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def preserve_default_filters!
|
|
52
|
+
@preserve_default_filters = true
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def preserve_default_filters?
|
|
56
|
+
@preserve_default_filters == true
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Remove a filter for this resource. If filters are not enabled, this method
|
|
60
|
+
# will raise a RuntimeError
|
|
61
|
+
#
|
|
62
|
+
# @param [Symbol] attributes The attributes to not filter on
|
|
63
|
+
def remove_filter(*attributes)
|
|
64
|
+
raise Disabled, "remove" unless filters_enabled?
|
|
65
|
+
|
|
66
|
+
attributes.each { |attribute| (@filters_to_remove ||= []) << attribute.to_sym }
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Add a filter for this resource. If filters are not enabled, this method
|
|
70
|
+
# will raise a RuntimeError
|
|
71
|
+
#
|
|
72
|
+
# @param [Symbol] attribute The attribute to filter on
|
|
73
|
+
# @param [Hash] options The set of options that are passed through to
|
|
74
|
+
# ransack for the field definition.
|
|
75
|
+
def add_filter(attribute, options = {})
|
|
76
|
+
raise Disabled, "add" unless filters_enabled?
|
|
77
|
+
|
|
78
|
+
(@filters ||= {})[attribute.to_sym] = options
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Reset the filters to use defaults
|
|
82
|
+
def reset_filters!
|
|
83
|
+
@filters = nil
|
|
84
|
+
@filters_to_remove = nil
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
private
|
|
88
|
+
|
|
89
|
+
# Collapses the waveform, if you will, of which filters should be displayed.
|
|
90
|
+
# Removes filters and adds in default filters as desired.
|
|
91
|
+
def filter_lookup
|
|
92
|
+
filters = @filters.try(:dup) || {}
|
|
93
|
+
|
|
94
|
+
if filters.empty? || preserve_default_filters?
|
|
95
|
+
default_filters.each do |f|
|
|
96
|
+
filters[f] ||= {}
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
if @filters_to_remove
|
|
101
|
+
@filters_to_remove.each &filters.method(:delete)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
filters
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# @return [Array] The array of default filters for this resource
|
|
108
|
+
def default_filters
|
|
109
|
+
result = []
|
|
110
|
+
result.concat default_association_filters if namespace.include_default_association_filters
|
|
111
|
+
result.concat content_columns
|
|
112
|
+
result.concat custom_ransack_filters
|
|
113
|
+
result
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def custom_ransack_filters
|
|
117
|
+
if resource_class.respond_to?(:_ransackers)
|
|
118
|
+
resource_class._ransackers.keys.map(&:to_sym)
|
|
119
|
+
else
|
|
120
|
+
[]
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# Returns a default set of filters for the associations
|
|
125
|
+
def default_association_filters
|
|
126
|
+
if resource_class.respond_to?(:reflect_on_all_associations)
|
|
127
|
+
poly, not_poly = resource_class.reflect_on_all_associations.partition { |r| r.macro == :belongs_to && r.options[:polymorphic] }
|
|
128
|
+
|
|
129
|
+
# remove deeply nested associations
|
|
130
|
+
not_poly.reject! { |r| r.chain.length > 2 }
|
|
131
|
+
|
|
132
|
+
filters = poly.map(&:foreign_type) + not_poly.map(&:name)
|
|
133
|
+
|
|
134
|
+
# Check high-arity associations for filterable columns
|
|
135
|
+
max = namespace.maximum_association_filter_arity
|
|
136
|
+
if max != :unlimited
|
|
137
|
+
high_arity, low_arity = not_poly.partition do |r|
|
|
138
|
+
r.klass.reorder(nil).limit(max + 1).count > max
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# Remove high-arity associations with no searchable column
|
|
142
|
+
high_arity = high_arity.select(&method(:searchable_column_for))
|
|
143
|
+
|
|
144
|
+
high_arity = high_arity.map { |r| r.name.to_s + "_" + searchable_column_for(r) + namespace.filter_method_for_large_association }
|
|
145
|
+
|
|
146
|
+
filters = poly.map(&:foreign_type) + low_arity.map(&:name) + high_arity
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
filters.map &:to_sym
|
|
150
|
+
else
|
|
151
|
+
[]
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def search_columns
|
|
156
|
+
@search_columns ||= namespace.filter_columns_for_large_association.map(&:to_s)
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def searchable_column_for(relation)
|
|
160
|
+
relation.klass.column_names.find { |name| search_columns.include?(name) }
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def add_filters_sidebar_section
|
|
164
|
+
self.sidebar_sections << filters_sidebar_section
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def filters_sidebar_section
|
|
168
|
+
ActiveAdmin::SidebarSection.new :filters, only: :index, if: -> { active_admin_config.filters.any? } do
|
|
169
|
+
active_admin_filters_form_for assigns[:search], **active_admin_config.filters
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def add_search_status_sidebar_section
|
|
174
|
+
self.sidebar_sections << ActiveAdmin::Filters::ActiveSidebar.new
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
end
|
|
180
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "active_admin/filters/dsl"
|
|
3
|
+
require "active_admin/filters/resource_extension"
|
|
4
|
+
require "active_admin/filters/formtastic_addons"
|
|
5
|
+
require "active_admin/filters/forms"
|
|
6
|
+
require "active_admin/helpers/optional_display"
|
|
7
|
+
require "active_admin/filters/active_sidebar"
|
|
8
|
+
|
|
9
|
+
# Add our Extensions
|
|
10
|
+
ActiveAdmin::ResourceDSL.send :include, ActiveAdmin::Filters::DSL
|
|
11
|
+
ActiveAdmin::Resource.send :include, ActiveAdmin::Filters::ResourceExtension
|
|
12
|
+
ActiveAdmin::ViewHelpers.send :include, ActiveAdmin::Filters::ViewHelper
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# Provides an intuitive way to build has_many associated records in the same form.
|
|
3
|
+
module Formtastic
|
|
4
|
+
module Inputs
|
|
5
|
+
module Base
|
|
6
|
+
def input_wrapping(&block)
|
|
7
|
+
html = super
|
|
8
|
+
template.concat(html) if template.output_buffer && template.assigns[:has_many_block]
|
|
9
|
+
html
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
module ActiveAdmin
|
|
16
|
+
class FormBuilder < ::Formtastic::FormBuilder
|
|
17
|
+
|
|
18
|
+
self.input_namespaces = [::Object, ::ActiveAdmin::Inputs, ::Formtastic::Inputs]
|
|
19
|
+
|
|
20
|
+
# TODO: remove both class finders after formtastic 4 (where it will be default)
|
|
21
|
+
self.input_class_finder = ::Formtastic::InputClassFinder
|
|
22
|
+
self.action_class_finder = ::Formtastic::ActionClassFinder
|
|
23
|
+
|
|
24
|
+
def cancel_link(url = { action: "index" }, html_options = {}, li_attrs = {})
|
|
25
|
+
li_attrs[:class] ||= "cancel"
|
|
26
|
+
li_content = template.link_to I18n.t("active_admin.cancel"), url, html_options
|
|
27
|
+
template.content_tag(:li, li_content, li_attrs)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
attr_accessor :already_in_an_inputs_block
|
|
31
|
+
|
|
32
|
+
def has_many(assoc, options = {}, &block)
|
|
33
|
+
HasManyBuilder.new(self, assoc, options).render(&block)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Decorates a FormBuilder with the additional attributes and methods
|
|
38
|
+
# to build a has_many block. Nested has_many blocks are handled by
|
|
39
|
+
# nested decorators.
|
|
40
|
+
class HasManyBuilder < SimpleDelegator
|
|
41
|
+
attr_reader :assoc
|
|
42
|
+
attr_reader :options
|
|
43
|
+
attr_reader :heading, :sortable_column, :sortable_start
|
|
44
|
+
attr_reader :new_record, :destroy_option, :remove_record
|
|
45
|
+
|
|
46
|
+
def initialize(has_many_form, assoc, options)
|
|
47
|
+
super has_many_form
|
|
48
|
+
@assoc = assoc
|
|
49
|
+
@options = extract_custom_settings!(options.dup)
|
|
50
|
+
@options.reverse_merge!(for: assoc)
|
|
51
|
+
@options[:class] = [options[:class], "inputs has_many_fields"].compact.join(" ")
|
|
52
|
+
|
|
53
|
+
if sortable_column
|
|
54
|
+
@options[:for] = [assoc, sorted_children(sortable_column)]
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def render(&block)
|
|
59
|
+
html = "".html_safe
|
|
60
|
+
html << template.content_tag(:h3) { heading } if heading.present?
|
|
61
|
+
html << template.capture { content_has_many(&block) }
|
|
62
|
+
html = wrap_div_or_li(html)
|
|
63
|
+
template.concat(html) if template.output_buffer
|
|
64
|
+
html
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
protected
|
|
68
|
+
|
|
69
|
+
# remove options that should not render as attributes
|
|
70
|
+
def extract_custom_settings!(options)
|
|
71
|
+
@heading = options.key?(:heading) ? options.delete(:heading) : default_heading
|
|
72
|
+
@sortable_column = options.delete(:sortable)
|
|
73
|
+
@sortable_start = options.delete(:sortable_start) || 0
|
|
74
|
+
@new_record = options.key?(:new_record) ? options.delete(:new_record) : true
|
|
75
|
+
@destroy_option = options.delete(:allow_destroy)
|
|
76
|
+
@remove_record = options.delete(:remove_record)
|
|
77
|
+
options
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def default_heading
|
|
81
|
+
assoc_klass.model_name.
|
|
82
|
+
human(count: ::ActiveAdmin::Helpers::I18n::PLURAL_MANY_COUNT)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def assoc_klass
|
|
86
|
+
@assoc_klass ||= __getobj__.object.class.reflect_on_association(assoc).klass
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def content_has_many(&block)
|
|
90
|
+
form_block = proc do |form_builder|
|
|
91
|
+
render_has_many_form(form_builder, options[:parent], &block)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
template.assigns[:has_many_block] = true
|
|
95
|
+
contents = without_wrapper { inputs(options, &form_block) }
|
|
96
|
+
contents ||= "".html_safe
|
|
97
|
+
|
|
98
|
+
js = new_record ? js_for_has_many(&form_block) : ""
|
|
99
|
+
contents << js
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# Renders the Formtastic inputs then appends ActiveAdmin delete and sort actions.
|
|
103
|
+
def render_has_many_form(form_builder, parent, &block)
|
|
104
|
+
index = parent && form_builder.send(:parent_child_index, parent)
|
|
105
|
+
template.concat template.capture { yield(form_builder, index) }
|
|
106
|
+
template.concat has_many_actions(form_builder, "".html_safe)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def has_many_actions(form_builder, contents)
|
|
110
|
+
if form_builder.object.new_record?
|
|
111
|
+
contents << template.content_tag(:li) do
|
|
112
|
+
remove_text = remove_record.is_a?(String) ? remove_record : I18n.t("active_admin.has_many_remove")
|
|
113
|
+
template.link_to remove_text, "#", class: "button has_many_remove"
|
|
114
|
+
end
|
|
115
|
+
elsif allow_destroy?(form_builder.object)
|
|
116
|
+
form_builder.input(
|
|
117
|
+
:_destroy, as: :boolean,
|
|
118
|
+
wrapper_html: { class: "has_many_delete" },
|
|
119
|
+
label: I18n.t("active_admin.has_many_delete"))
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
if sortable_column
|
|
123
|
+
form_builder.input sortable_column, as: :hidden
|
|
124
|
+
|
|
125
|
+
contents << template.content_tag(:li, class: "handle") do
|
|
126
|
+
I18n.t("active_admin.move")
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
contents
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def allow_destroy?(form_object)
|
|
134
|
+
!! case destroy_option
|
|
135
|
+
when Symbol, String
|
|
136
|
+
form_object.public_send destroy_option
|
|
137
|
+
when Proc
|
|
138
|
+
destroy_option.call form_object
|
|
139
|
+
else
|
|
140
|
+
destroy_option
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def sorted_children(column)
|
|
145
|
+
__getobj__.object.public_send(assoc).sort_by do |o|
|
|
146
|
+
attribute = o.public_send column
|
|
147
|
+
[attribute.nil? ? Float::INFINITY : attribute, o.id || Float::INFINITY]
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
def without_wrapper
|
|
152
|
+
is_being_wrapped = already_in_an_inputs_block
|
|
153
|
+
self.already_in_an_inputs_block = false
|
|
154
|
+
|
|
155
|
+
html = yield
|
|
156
|
+
|
|
157
|
+
self.already_in_an_inputs_block = is_being_wrapped
|
|
158
|
+
html
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
# Capture the ADD JS
|
|
162
|
+
def js_for_has_many(&form_block)
|
|
163
|
+
assoc_name = assoc_klass.model_name
|
|
164
|
+
placeholder = "NEW_#{assoc_name.to_s.underscore.upcase.tr('/', '_')}_RECORD"
|
|
165
|
+
opts = options.merge(
|
|
166
|
+
for: [assoc, assoc_klass.new],
|
|
167
|
+
for_options: { child_index: placeholder }
|
|
168
|
+
)
|
|
169
|
+
html = template.capture { __getobj__.send(:inputs_for_nested_attributes, opts, &form_block) }
|
|
170
|
+
text = new_record.is_a?(String) ? new_record : I18n.t("active_admin.has_many_new", model: assoc_name.human)
|
|
171
|
+
|
|
172
|
+
template.link_to text, "#", class: "button has_many_add", data: {
|
|
173
|
+
html: CGI.escapeHTML(html).html_safe, placeholder: placeholder
|
|
174
|
+
}
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
def wrap_div_or_li(html)
|
|
178
|
+
template.content_tag(
|
|
179
|
+
already_in_an_inputs_block ? :li : :div,
|
|
180
|
+
html,
|
|
181
|
+
class: "has_many_container #{assoc}",
|
|
182
|
+
"data-sortable" => sortable_column,
|
|
183
|
+
"data-sortable-start" => sortable_start)
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module ActiveAdmin
|
|
3
|
+
module Generators
|
|
4
|
+
class Boilerplate
|
|
5
|
+
def initialize(class_name)
|
|
6
|
+
@class_name = class_name
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def attributes
|
|
10
|
+
@class_name.constantize.new.attributes.keys
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def assignable_attributes
|
|
14
|
+
attributes - %w(id created_at updated_at)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def permit_params
|
|
18
|
+
assignable_attributes.map { |a| a.to_sym.inspect }.join(", ")
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def rows
|
|
22
|
+
attributes.map { |a| row(a) }.join("\n ")
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def row(name)
|
|
26
|
+
"# row :#{name.gsub(/_id$/, '')}"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def columns
|
|
30
|
+
attributes.map { |a| column(a) }.join("\n ")
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def column(name)
|
|
34
|
+
"# column :#{name.gsub(/_id$/, '')}"
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def filters
|
|
38
|
+
attributes.map { |a| filter(a) }.join("\n ")
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def filter(name)
|
|
42
|
+
"# filter :#{name.gsub(/_id$/, '')}"
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def form_inputs
|
|
46
|
+
assignable_attributes.map { |a| form_input(a) }.join("\n ")
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def form_input(name)
|
|
50
|
+
"# f.input :#{name.gsub(/_id$/, '')}"
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module ActiveAdmin
|
|
3
|
+
module Helpers
|
|
4
|
+
module Collection
|
|
5
|
+
# 1. removes `select` and `order` to prevent invalid SQL
|
|
6
|
+
# 2. correctly handles the Hash returned when `group by` is used
|
|
7
|
+
def collection_size(c = collection)
|
|
8
|
+
return c.count if c.is_a?(Array)
|
|
9
|
+
return c.length if c.limit_value
|
|
10
|
+
|
|
11
|
+
c = c.except :select, :order
|
|
12
|
+
|
|
13
|
+
c.group_values.present? ? c.count.count : c.count
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def collection_is_empty?(c = collection)
|
|
17
|
+
collection_size(c) == 0
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module ActiveAdmin
|
|
3
|
+
|
|
4
|
+
# Shareable module to give a #display_on?(action) method
|
|
5
|
+
# which returns true or false depending on an options hash.
|
|
6
|
+
#
|
|
7
|
+
# The options hash accepts:
|
|
8
|
+
#
|
|
9
|
+
# only: :index
|
|
10
|
+
# only: [:index, :show]
|
|
11
|
+
# except: :index
|
|
12
|
+
# except: [:index, :show]
|
|
13
|
+
#
|
|
14
|
+
# call #normalize_display_options! after @options has been set
|
|
15
|
+
# to ensure that the display options are setup correctly
|
|
16
|
+
|
|
17
|
+
module OptionalDisplay
|
|
18
|
+
def display_on?(action, render_context = self)
|
|
19
|
+
return false if @options[:only] && !@options[:only].include?(action.to_sym)
|
|
20
|
+
return false if @options[:except] && @options[:except].include?(action.to_sym)
|
|
21
|
+
|
|
22
|
+
case condition = @options[:if]
|
|
23
|
+
when Symbol, String
|
|
24
|
+
render_context.public_send condition
|
|
25
|
+
when Proc
|
|
26
|
+
render_context.instance_exec &condition
|
|
27
|
+
else
|
|
28
|
+
true
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
def normalize_display_options!
|
|
35
|
+
@options[:only] = Array(@options[:only]) if @options[:only]
|
|
36
|
+
@options[:except] = Array(@options[:except]) if @options[:except]
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module ActiveAdmin
|
|
3
|
+
module Helpers
|
|
4
|
+
module Routes
|
|
5
|
+
module UrlHelpers
|
|
6
|
+
include Rails.application.routes.url_helpers
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
extend UrlHelpers
|
|
10
|
+
|
|
11
|
+
def self.default_url_options
|
|
12
|
+
Rails.application.routes.default_url_options || {}
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module ActiveAdmin
|
|
3
|
+
module ScopeChain
|
|
4
|
+
private
|
|
5
|
+
# Scope an ActiveRecord::Relation chain
|
|
6
|
+
#
|
|
7
|
+
# Example:
|
|
8
|
+
# scope_chain(Scope.new(:published), Article)
|
|
9
|
+
# # => Article.published
|
|
10
|
+
#
|
|
11
|
+
# @param scope The <ActiveAdmin::Scope> we want to scope on
|
|
12
|
+
# @param chain The ActiveRecord::Relation chain or ActiveRecord::Base class to scope
|
|
13
|
+
# @return <ActiveRecord::Relation or ActiveRecord::Base> The scoped relation chain
|
|
14
|
+
#
|
|
15
|
+
def scope_chain(scope, chain)
|
|
16
|
+
if scope.scope_method
|
|
17
|
+
chain.public_send scope.scope_method
|
|
18
|
+
elsif scope.scope_block
|
|
19
|
+
instance_exec chain, &scope.scope_block
|
|
20
|
+
else
|
|
21
|
+
chain
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module ActiveAdmin
|
|
3
|
+
module Inputs
|
|
4
|
+
class DatepickerInput < ::Formtastic::Inputs::StringInput
|
|
5
|
+
def input_html_options
|
|
6
|
+
super.tap do |options|
|
|
7
|
+
options[:class] = [options[:class], "datepicker"].compact.join(" ")
|
|
8
|
+
options[:data] ||= {}
|
|
9
|
+
options[:data].merge! datepicker_options
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Can pass proc to filter label option
|
|
14
|
+
def label_from_options
|
|
15
|
+
res = super
|
|
16
|
+
res = res.call if res.is_a? Proc
|
|
17
|
+
res
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
private
|
|
21
|
+
def datepicker_options
|
|
22
|
+
options = self.options.fetch(:datepicker_options, {})
|
|
23
|
+
options = Hash[options.map { |k, v| [k.to_s.camelcase(:lower), v] }]
|
|
24
|
+
{ datepicker_options: options }
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# This is a common set of Formtastic overrides needed to build a filter form
|
|
3
|
+
# that lets you select from a set of search methods for a given attribute.
|
|
4
|
+
#
|
|
5
|
+
# Your class must declare available filters for this module to work.
|
|
6
|
+
# Those filters must be recognizable by Ransack. For example:
|
|
7
|
+
#
|
|
8
|
+
# class NumericInput < ::Formtastic::Inputs::NumberInput
|
|
9
|
+
# include Base
|
|
10
|
+
# include Base::SearchMethodSelect
|
|
11
|
+
#
|
|
12
|
+
# filter :eq, :gt, :lt
|
|
13
|
+
# end
|
|
14
|
+
#
|
|
15
|
+
module ActiveAdmin
|
|
16
|
+
module Inputs
|
|
17
|
+
module Filters
|
|
18
|
+
module Base
|
|
19
|
+
module SearchMethodSelect
|
|
20
|
+
|
|
21
|
+
def self.included(base)
|
|
22
|
+
base.extend ClassMethods
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
module ClassMethods
|
|
26
|
+
attr_reader :filters
|
|
27
|
+
|
|
28
|
+
def filter(*filters)
|
|
29
|
+
(@filters ||= []).push *filters
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def wrapper_html_options
|
|
34
|
+
opts = super
|
|
35
|
+
(opts[:class] ||= "") << " select_and_search" unless seems_searchable?
|
|
36
|
+
opts
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def to_html
|
|
40
|
+
input_wrapping do
|
|
41
|
+
label_html << # your label
|
|
42
|
+
select_html << # the dropdown that holds the available search methods
|
|
43
|
+
input_html # your input field
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def input_html
|
|
48
|
+
builder.text_field current_filter, input_html_options
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def select_html
|
|
52
|
+
template.select_tag "", template.options_for_select(filter_options, current_filter)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def filters
|
|
56
|
+
options[:filters] || self.class.filters
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def current_filter
|
|
60
|
+
@current_filter ||= begin
|
|
61
|
+
methods = filters.map { |f| "#{method}_#{f}" }
|
|
62
|
+
methods.detect { |m| @object.public_send m } || methods.first
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def filter_options
|
|
67
|
+
filters.collect do |filter|
|
|
68
|
+
[I18n.t("ransack.predicates.#{filter}").capitalize, "#{method}_#{filter}"]
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module ActiveAdmin
|
|
3
|
+
module Inputs
|
|
4
|
+
module Filters
|
|
5
|
+
module Base
|
|
6
|
+
include ::Formtastic::Inputs::Base
|
|
7
|
+
include ::ActiveAdmin::Filters::FormtasticAddons
|
|
8
|
+
|
|
9
|
+
extend ::ActiveSupport::Autoload
|
|
10
|
+
autoload :SearchMethodSelect
|
|
11
|
+
|
|
12
|
+
def input_wrapping(&block)
|
|
13
|
+
template.content_tag :div, template.capture(&block), wrapper_html_options
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def required?
|
|
17
|
+
false
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Can pass proc to filter label option
|
|
21
|
+
def label_from_options
|
|
22
|
+
res = super
|
|
23
|
+
res = res.call if res.is_a? Proc
|
|
24
|
+
res
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def wrapper_html_options
|
|
28
|
+
opts = super
|
|
29
|
+
(opts[:class] ||= "") << " filter_form_field filter_#{as}"
|
|
30
|
+
opts
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Override the standard finder to accept a proc
|
|
34
|
+
def collection_from_options
|
|
35
|
+
if options[:collection].is_a?(Proc)
|
|
36
|
+
template.instance_exec(&options[:collection])
|
|
37
|
+
else
|
|
38
|
+
super
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|