activeadmin 1.4.3 → 2.9.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of activeadmin might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +359 -25
- data/CONTRIBUTING.md +53 -74
- data/README.md +44 -11
- data/app/assets/javascripts/active_admin/base.js +517 -0
- data/app/assets/stylesheets/active_admin/_base.scss +29 -29
- data/app/assets/stylesheets/active_admin/_forms.scss +2 -14
- data/app/assets/stylesheets/active_admin/_header.scss +40 -8
- data/app/assets/stylesheets/active_admin/_mixins.scss +1 -1
- data/{vendor → app}/assets/stylesheets/active_admin/_normalize.scss +0 -0
- data/app/assets/stylesheets/active_admin/components/_comments.scss +2 -2
- data/app/assets/stylesheets/active_admin/components/_status_tags.scss +0 -5
- data/app/assets/stylesheets/active_admin/components/_tables.scss +1 -2
- data/app/assets/stylesheets/active_admin/components/_tabs.scss +1 -1
- data/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -8
- data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +1 -1
- data/app/assets/stylesheets/active_admin/mixins/_variables.scss +8 -0
- data/app/assets/stylesheets/active_admin/print.scss +2 -2
- data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +1 -1
- data/app/javascript/active_admin/base.js +28 -0
- data/app/javascript/active_admin/ext/jquery-ui.js +7 -0
- data/app/javascript/active_admin/ext/jquery.js +9 -0
- data/app/javascript/active_admin/initializers/batch-actions.js +61 -0
- data/app/javascript/active_admin/initializers/checkbox-toggler.js +3 -0
- data/app/javascript/active_admin/initializers/datepicker.js +16 -0
- data/app/javascript/active_admin/initializers/dropdown-menu.js +9 -0
- data/app/javascript/active_admin/initializers/filters.js +10 -0
- data/app/javascript/active_admin/initializers/has-many.js +95 -0
- data/app/javascript/active_admin/initializers/per-page.js +13 -0
- data/app/javascript/active_admin/initializers/table-checkbox-toggler.js +3 -0
- data/app/javascript/active_admin/initializers/tabs.js +6 -0
- data/app/javascript/active_admin/lib/checkbox-toggler.js +49 -0
- data/app/javascript/active_admin/lib/dropdown-menu.js +116 -0
- data/app/javascript/active_admin/lib/filters.js +39 -0
- data/app/javascript/active_admin/lib/modal-dialog.js +63 -0
- data/app/javascript/active_admin/lib/per-page.js +38 -0
- data/app/javascript/active_admin/lib/table-checkbox-toggler.js +38 -0
- data/app/javascript/active_admin/lib/utils.js +40 -0
- data/app/views/active_admin/devise/confirmations/new.html.erb +1 -1
- data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
- data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +2 -2
- data/app/views/active_admin/devise/passwords/edit.html.erb +1 -1
- data/app/views/active_admin/devise/passwords/new.html.erb +1 -1
- data/app/views/active_admin/devise/registrations/new.html.erb +1 -2
- data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
- data/app/views/active_admin/devise/unlocks/new.html.erb +1 -1
- data/app/views/kaminari/active_admin_countless/_first_page.html.erb +11 -0
- data/app/views/kaminari/active_admin_countless/_gap.html.erb +8 -0
- data/app/views/kaminari/active_admin_countless/_next_page.html.erb +11 -0
- data/app/views/kaminari/active_admin_countless/_page.html.erb +12 -0
- data/app/views/kaminari/active_admin_countless/_paginator.html.erb +24 -0
- data/app/views/kaminari/active_admin_countless/_prev_page.html.erb +11 -0
- data/app/views/layouts/active_admin_logged_out.html.erb +16 -6
- data/config/locales/ar.yml +9 -8
- data/config/locales/az.yml +138 -0
- data/config/locales/bg.yml +1 -1
- data/config/locales/bs.yml +1 -0
- data/config/locales/ca.yml +1 -1
- data/config/locales/cs.yml +1 -0
- data/config/locales/da.yml +1 -0
- data/config/locales/de-CH.yml +1 -0
- data/config/locales/de.yml +19 -0
- data/config/locales/el.yml +1 -0
- data/config/locales/en-CA.yml +4 -3
- data/config/locales/en-GB.yml +4 -3
- data/config/locales/en.yml +4 -3
- data/config/locales/eo.yml +1 -0
- data/config/locales/es-MX.yml +3 -1
- data/config/locales/es.yml +6 -5
- data/config/locales/fa.yml +1 -0
- data/config/locales/fi.yml +1 -0
- data/config/locales/fr.yml +6 -5
- data/config/locales/he.yml +1 -1
- data/config/locales/hr.yml +1 -0
- data/config/locales/hu.yml +5 -0
- data/config/locales/id.yml +1 -0
- data/config/locales/it.yml +19 -0
- data/config/locales/ja.yml +4 -3
- data/config/locales/ko.yml +1 -0
- data/config/locales/lt.yml +3 -2
- data/config/locales/lv.yml +3 -2
- data/config/locales/mk.yml +134 -0
- data/config/locales/nb.yml +1 -0
- data/config/locales/nl.yml +1 -0
- data/config/locales/pl.yml +1 -0
- data/config/locales/pt-BR.yml +1 -0
- data/config/locales/pt-PT.yml +1 -0
- data/config/locales/ro.yml +1 -0
- data/config/locales/ru.yml +1 -0
- data/config/locales/sk.yml +60 -0
- data/config/locales/sv-SE.yml +1 -0
- data/config/locales/tr.yml +1 -0
- data/config/locales/uk.yml +3 -0
- data/config/locales/vi.yml +7 -5
- data/config/locales/zh-CN.yml +1 -0
- data/config/locales/zh-TW.yml +1 -0
- data/docs/0-installation.md +28 -4
- data/docs/1-general-configuration.md +20 -0
- data/docs/11-decorators.md +16 -5
- data/docs/12-arbre-components.md +13 -0
- data/docs/13-authorization-adapter.md +6 -6
- data/docs/2-resource-customization.md +11 -2
- data/docs/3-index-pages.md +1 -1
- data/docs/3-index-pages/index-as-table.md +7 -0
- data/docs/5-forms.md +6 -1
- data/docs/6-show-pages.md +12 -0
- data/docs/9-batch-actions.md +2 -2
- data/docs/CNAME +1 -1
- data/docs/Gemfile +2 -3
- data/docs/Gemfile.lock +126 -116
- data/docs/_config.yml +2 -0
- data/docs/_includes/top-menu.html +2 -2
- data/docs/documentation.md +1 -1
- data/docs/index.html +110 -9
- data/docs/stylesheets/main.css +29 -0
- data/lib/active_admin.rb +67 -63
- data/lib/active_admin/application.rb +20 -27
- data/lib/active_admin/application_settings.rb +6 -3
- data/lib/active_admin/asset_registration.rb +0 -8
- data/lib/active_admin/authorization_adapter.rb +3 -3
- data/lib/active_admin/base_controller.rb +10 -10
- data/lib/active_admin/base_controller/authorization.rb +15 -15
- data/lib/active_admin/batch_actions/controller.rb +4 -4
- data/lib/active_admin/batch_actions/resource_extension.rb +15 -10
- data/lib/active_admin/batch_actions/views/batch_action_form.rb +3 -3
- data/lib/active_admin/batch_actions/views/batch_action_selector.rb +6 -6
- data/lib/active_admin/batch_actions/views/selection_cells.rb +3 -3
- data/lib/active_admin/callbacks.rb +1 -1
- data/lib/active_admin/cancan_adapter.rb +1 -1
- data/lib/active_admin/collection_decorator.rb +31 -0
- data/lib/active_admin/controller_action.rb +2 -1
- data/lib/active_admin/csv_builder.rb +14 -9
- data/lib/active_admin/dependency.rb +13 -85
- data/lib/active_admin/devise.rb +5 -5
- data/lib/active_admin/dsl.rb +2 -9
- data/lib/active_admin/dynamic_settings_node.rb +2 -2
- data/lib/active_admin/engine.rb +10 -8
- data/lib/active_admin/error.rb +4 -4
- data/lib/active_admin/filters.rb +7 -7
- data/lib/active_admin/filters/active.rb +1 -1
- data/lib/active_admin/filters/active_filter.rb +10 -10
- data/lib/active_admin/filters/active_sidebar.rb +9 -5
- data/lib/active_admin/filters/forms.rb +7 -7
- data/lib/active_admin/filters/formtastic_addons.rb +2 -7
- data/lib/active_admin/filters/resource_extension.rb +28 -4
- data/lib/active_admin/form_builder.rb +26 -22
- data/lib/active_admin/generators/boilerplate.rb +12 -4
- data/lib/active_admin/helpers/optional_display.rb +2 -2
- data/lib/active_admin/helpers/scope_chain.rb +1 -0
- data/lib/active_admin/inputs/datepicker_input.rb +2 -2
- data/lib/active_admin/inputs/filters/base.rb +1 -1
- data/lib/active_admin/inputs/filters/base/search_method_select.rb +6 -6
- data/lib/active_admin/inputs/filters/boolean_input.rb +1 -1
- data/lib/active_admin/inputs/filters/check_boxes_input.rb +1 -1
- data/lib/active_admin/inputs/filters/date_range_input.rb +15 -12
- data/lib/active_admin/inputs/filters/select_input.rb +2 -2
- data/lib/active_admin/localizers.rb +1 -1
- data/lib/active_admin/localizers/resource_localizer.rb +3 -3
- data/lib/active_admin/menu.rb +6 -3
- data/lib/active_admin/menu_item.rb +7 -7
- data/lib/active_admin/namespace.rb +12 -12
- data/lib/active_admin/namespace_settings.rb +27 -8
- data/lib/active_admin/order_clause.rb +2 -2
- data/lib/active_admin/orm/active_record.rb +1 -1
- data/lib/active_admin/orm/active_record/comments.rb +23 -23
- data/lib/active_admin/orm/active_record/comments/comment.rb +4 -4
- data/lib/active_admin/orm/active_record/comments/views.rb +2 -2
- data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +29 -24
- data/lib/active_admin/page.rb +1 -1
- data/lib/active_admin/page_dsl.rb +1 -1
- data/lib/active_admin/page_presenter.rb +2 -1
- data/lib/active_admin/pundit_adapter.rb +22 -9
- data/lib/active_admin/resource.rb +34 -20
- data/lib/active_admin/resource/action_items.rb +5 -5
- data/lib/active_admin/resource/attributes.rb +8 -5
- data/lib/active_admin/resource/belongs_to.rb +8 -3
- data/lib/active_admin/resource/controllers.rb +1 -1
- data/lib/active_admin/resource/menu.rb +5 -5
- data/lib/active_admin/resource/model.rb +15 -0
- data/lib/active_admin/resource/naming.rb +5 -5
- data/lib/active_admin/resource/routes.rb +25 -14
- data/lib/active_admin/resource/scope_to.rb +7 -7
- data/lib/active_admin/resource/scopes.rb +3 -3
- data/lib/active_admin/resource/sidebars.rb +2 -2
- data/lib/active_admin/resource_collection.rb +2 -2
- data/lib/active_admin/resource_controller.rb +13 -10
- data/lib/active_admin/resource_controller/action_builder.rb +10 -0
- data/lib/active_admin/resource_controller/data_access.rb +1 -1
- data/lib/active_admin/resource_controller/decorators.rb +7 -29
- data/lib/active_admin/resource_controller/polymorphic_routes.rb +37 -0
- data/lib/active_admin/resource_controller/resource_class_methods.rb +2 -0
- data/lib/active_admin/resource_controller/streaming.rb +7 -6
- data/lib/active_admin/resource_dsl.rb +11 -9
- data/lib/active_admin/router.rb +3 -2
- data/lib/active_admin/scope.rb +15 -11
- data/lib/active_admin/settings_node.rb +1 -1
- data/lib/active_admin/sidebar_section.rb +3 -1
- data/lib/active_admin/version.rb +1 -1
- data/lib/active_admin/view_factory.rb +17 -17
- data/lib/active_admin/view_helpers.rb +1 -1
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +5 -5
- data/lib/active_admin/view_helpers/display_helper.rb +16 -7
- data/lib/active_admin/view_helpers/download_format_links_helper.rb +2 -1
- data/lib/active_admin/view_helpers/fields_for.rb +2 -2
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +2 -0
- data/lib/active_admin/views.rb +1 -1
- data/lib/active_admin/views/components/active_admin_form.rb +12 -6
- data/lib/active_admin/views/components/attributes_table.rb +8 -8
- data/lib/active_admin/views/components/blank_slate.rb +1 -1
- data/lib/active_admin/views/components/dropdown_menu.rb +8 -8
- data/lib/active_admin/views/components/index_list.rb +3 -3
- data/lib/active_admin/views/components/menu.rb +1 -1
- data/lib/active_admin/views/components/menu_item.rb +4 -4
- data/lib/active_admin/views/components/paginated_collection.rb +21 -20
- data/lib/active_admin/views/components/panel.rb +1 -1
- data/lib/active_admin/views/components/scopes.rb +7 -5
- data/lib/active_admin/views/components/sidebar_section.rb +0 -3
- data/lib/active_admin/views/components/site_title.rb +1 -1
- data/lib/active_admin/views/components/status_tag.rb +13 -26
- data/lib/active_admin/views/components/table_for.rb +20 -19
- data/lib/active_admin/views/components/tabs.rb +13 -4
- data/lib/active_admin/views/footer.rb +3 -2
- data/lib/active_admin/views/header.rb +2 -2
- data/lib/active_admin/views/index_as_blog.rb +1 -1
- data/lib/active_admin/views/index_as_grid.rb +1 -1
- data/lib/active_admin/views/index_as_table.rb +27 -19
- data/lib/active_admin/views/pages/base.rb +18 -11
- data/lib/active_admin/views/pages/index.rb +15 -13
- data/lib/active_admin/views/tabbed_navigation.rb +2 -2
- data/lib/active_admin/views/title_bar.rb +1 -1
- data/lib/activeadmin.rb +1 -1
- data/lib/generators/active_admin/assets/assets_generator.rb +2 -2
- data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
- data/lib/generators/active_admin/assets/templates/active_admin.scss +2 -2
- data/lib/generators/active_admin/devise/devise_generator.rb +5 -5
- data/lib/generators/active_admin/install/install_generator.rb +18 -8
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +45 -3
- data/lib/generators/active_admin/install/templates/dashboard.rb +2 -3
- data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +1 -15
- data/lib/generators/active_admin/page/page_generator.rb +1 -1
- data/lib/generators/active_admin/resource/resource_generator.rb +3 -3
- data/lib/generators/active_admin/resource/templates/admin.rb.erb +40 -37
- data/lib/generators/active_admin/webpacker/plugins/jquery.js +7 -0
- data/lib/generators/active_admin/webpacker/templates/active_admin.js +5 -0
- data/lib/generators/active_admin/webpacker/templates/active_admin.scss +17 -0
- data/lib/generators/active_admin/webpacker/templates/print.scss +2 -0
- data/lib/generators/active_admin/webpacker/webpacker_generator.rb +26 -0
- data/lib/ransack_ext.rb +9 -9
- data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +80 -0
- data/vendor/assets/javascripts/jquery-ui/form.js +22 -0
- data/vendor/assets/javascripts/jquery-ui/labels.js +65 -0
- data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +274 -283
- metadata +108 -127
- data/.circleci/config.yml +0 -572
- data/.github/ISSUE_TEMPLATE.md +0 -20
- data/.gitignore +0 -16
- data/.mdlrc +0 -1
- data/.rspec +0 -1
- data/.rspec_parallel +0 -2
- data/.rubocop.yml +0 -99
- data/.simplecov +0 -9
- data/.yardopts +0 -7
- data/Gemfile +0 -30
- data/Gemfile.common +0 -26
- data/Gemfile.lock +0 -433
- data/Rakefile +0 -24
- data/activeadmin.gemspec +0 -32
- 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.coffee +0 -13
- data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +0 -6
- data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +0 -7
- data/app/assets/javascripts/active_admin/initializers/batch_actions.js.coffee +0 -11
- data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +0 -14
- data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +0 -26
- data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +0 -7
- data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +0 -42
- data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +0 -46
- data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +0 -104
- data/app/assets/javascripts/active_admin/lib/flash.js.coffee +0 -19
- data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +0 -79
- data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +0 -45
- data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +0 -46
- data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +0 -22
- data/bin/install_chromedriver.sh +0 -17
- data/config/i18n-tasks.yml +0 -26
- data/config/mdl_style.rb +0 -11
- data/cucumber.yml +0 -7
- data/gemfiles/rails_42.gemfile +0 -10
- data/gemfiles/rails_42.gemfile.lock +0 -339
- data/gemfiles/rails_50.gemfile +0 -10
- data/gemfiles/rails_50.gemfile.lock +0 -353
- data/gemfiles/rails_51.gemfile +0 -10
- data/gemfiles/rails_51.gemfile.lock +0 -353
- data/lib/active_admin/event.rb +0 -24
- data/lib/active_admin/helpers/output_safety_helper.rb +0 -35
- data/lib/active_admin/reloader.rb +0 -25
- data/lib/bug_report_templates/active_admin_master.rb +0 -111
- data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +0 -1
- data/tasks/application_generator.rb +0 -50
- data/tasks/docs.rake +0 -64
- data/tasks/gemfiles.rake +0 -8
- data/tasks/lint.rake +0 -110
- data/tasks/local.rake +0 -27
- data/tasks/release.rake +0 -6
- data/tasks/test.rake +0 -42
data/CONTRIBUTING.md
CHANGED
@@ -5,15 +5,17 @@ like you that make Active Admin such a great tool.
|
|
5
5
|
|
6
6
|
### Where do I go from here?
|
7
7
|
|
8
|
-
If you've noticed a bug or have a
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
If you've noticed a bug or have a feature request, [make one][new issue]! It's
|
9
|
+
generally best if you get confirmation of your bug or approval for your feature
|
10
|
+
request this way before starting to code.
|
11
|
+
|
12
|
+
If you have a general question about activeadmin, you can post it on [Stack
|
13
|
+
Overflow], the issue tracker is only for bugs and feature requests.
|
12
14
|
|
13
15
|
### Fork & create a branch
|
14
16
|
|
15
|
-
If this is something you think you can fix, then [fork Active Admin]
|
16
|
-
|
17
|
+
If this is something you think you can fix, then [fork Active Admin] and create
|
18
|
+
a branch with a descriptive name.
|
17
19
|
|
18
20
|
A good branch name would be (where issue #325 is the ticket you're working on):
|
19
21
|
|
@@ -26,8 +28,7 @@ git checkout -b 325-add-japanese-translations
|
|
26
28
|
Make sure you're using a recent ruby and have the `bundler` gem installed, at
|
27
29
|
least version `1.14.3`.
|
28
30
|
|
29
|
-
You'll also need chrome
|
30
|
-
scenarios.
|
31
|
+
You'll also need chrome installed in order to run cucumber scenarios.
|
31
32
|
|
32
33
|
Now install the development dependencies:
|
33
34
|
|
@@ -35,55 +36,45 @@ Now install the development dependencies:
|
|
35
36
|
bundle install
|
36
37
|
```
|
37
38
|
|
38
|
-
|
39
|
+
Then install javascript dependencies with [Yarn] (requires a current version of [Node.js]):
|
39
40
|
|
40
41
|
```sh
|
41
|
-
|
42
|
+
bin/yarn install
|
42
43
|
```
|
43
44
|
|
44
|
-
The
|
45
|
-
tests against.
|
46
|
-
|
47
|
-
If your tests are passing locally but they're failing on CircleCI, it's probably
|
48
|
-
because of some breaking change or problem with the latest version of some
|
49
|
-
dependency. You should be able to reproduce the issue locally by:
|
45
|
+
JS assets are located in `app/javascript/active_admin`. The config will take care of compiling a complete bundle with [Rollup] using the `build` script and exported to `app/assets/javascripts/active_admin/base.js` ready to be used by Sprockets.
|
50
46
|
|
51
|
-
|
52
|
-
* Running `bundle install`.
|
53
|
-
* Re-running the tests again like you did previously.
|
47
|
+
To update javascript bundle run (add `-w` flag for watch mode):
|
54
48
|
|
55
|
-
|
56
|
-
|
49
|
+
```sh
|
50
|
+
bin/yarn build
|
51
|
+
```
|
57
52
|
|
58
|
-
|
59
|
-
you use the correct Gemfile, for example:
|
53
|
+
Now you should be able to run the entire suite using:
|
60
54
|
|
61
55
|
```sh
|
62
|
-
|
56
|
+
bin/rake
|
63
57
|
```
|
64
58
|
|
65
|
-
|
59
|
+
The test run will generate a sample Rails application in `tmp/test_apps` to run the
|
60
|
+
tests against.
|
66
61
|
|
67
|
-
|
62
|
+
If you want to test against a Rails version different from the latest, make sure
|
63
|
+
you use the correct Gemfile, for example:
|
68
64
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
or an **executable test case** demonstrating the expected behavior that is not
|
73
|
-
occurring.
|
65
|
+
```sh
|
66
|
+
export BUNDLE_GEMFILE=gemfiles/rails_60/Gemfile
|
67
|
+
```
|
74
68
|
|
75
|
-
|
76
|
-
|
77
|
-
necessary changes to demonstrate the issue, and **paste the content into the
|
78
|
-
issue description**:
|
79
|
-
* [**ActiveAdmin** master issues][master template]
|
69
|
+
**Warning** SCSS assets are aimed to be used indifferently with Sprockets **and** webpacker.
|
70
|
+
As such, make sure not to use any sass-rails directives such as `asset-url` or `image-url`.
|
80
71
|
|
81
|
-
###
|
72
|
+
### Implement your fix or feature
|
82
73
|
|
83
74
|
At this point, you're ready to make your changes! Feel free to ask for help;
|
84
75
|
everyone is a beginner at first :smile_cat:
|
85
76
|
|
86
|
-
###
|
77
|
+
### View your changes in a Rails application
|
87
78
|
|
88
79
|
Active Admin is meant to be used by humans, not cucumbers. So make sure to take
|
89
80
|
a look at your changes in a browser.
|
@@ -91,11 +82,11 @@ a look at your changes in a browser.
|
|
91
82
|
To boot up a test Rails app:
|
92
83
|
|
93
84
|
```sh
|
94
|
-
|
85
|
+
bin/rake local server
|
95
86
|
```
|
96
87
|
|
97
88
|
This will automatically create a Rails app if none already exists, and store it
|
98
|
-
in the
|
89
|
+
in the `tmp/development_apps` folder.
|
99
90
|
|
100
91
|
You should now be able to open <http://localhost:3000/admin> in your browser.
|
101
92
|
You can log in using:
|
@@ -107,21 +98,22 @@ If you need to perform any other commands on the test application, just pass
|
|
107
98
|
them to the `local` rake task. For example, to boot the rails console:
|
108
99
|
|
109
100
|
```sh
|
110
|
-
|
101
|
+
bin/rake local console
|
111
102
|
```
|
112
103
|
|
113
|
-
Or to migrate the database
|
104
|
+
Or to migrate the database, if you create a new migration or just play around
|
105
|
+
with the db:
|
114
106
|
|
115
107
|
```sh
|
116
|
-
|
108
|
+
bin/rake local db:migrate
|
117
109
|
```
|
118
110
|
|
119
111
|
### Get the style right
|
120
112
|
|
121
113
|
Your patch should follow the same conventions & pass the same code quality
|
122
|
-
checks as the rest of the project. `
|
123
|
-
|
124
|
-
individually. Run `
|
114
|
+
checks as the rest of the project. `bin/rake lint` will give you feedback in
|
115
|
+
this regard. You can check & fix style issues by running each linter
|
116
|
+
individually. Run `bin/rake -T lint` to see the available linters.
|
125
117
|
|
126
118
|
### Make a Pull Request
|
127
119
|
|
@@ -144,12 +136,12 @@ git push --set-upstream origin 325-add-japanese-translations
|
|
144
136
|
|
145
137
|
Finally, go to GitHub and [make a Pull Request][] :D
|
146
138
|
|
147
|
-
|
148
|
-
about quality, so your PR won't be merged until all tests pass. It's
|
149
|
-
but it's possible that your changes pass tests in one Rails version
|
150
|
-
another. In that case, you'll have to setup your development
|
151
|
-
explained in step 3) to use the problematic Rails version, and
|
152
|
-
what's going on!
|
139
|
+
Github Actions will run our test suite against all supported Rails versions. We
|
140
|
+
care about quality, so your PR won't be merged until all tests pass. It's
|
141
|
+
unlikely, but it's possible that your changes pass tests in one Rails version
|
142
|
+
but fail in another. In that case, you'll have to setup your development
|
143
|
+
environment (as explained in step 3) to use the problematic Rails version, and
|
144
|
+
investigate what's going on!
|
153
145
|
|
154
146
|
### Keeping your Pull Request updated
|
155
147
|
|
@@ -182,35 +174,22 @@ met.
|
|
182
174
|
|
183
175
|
Maintainers need to do the following to push out a release:
|
184
176
|
|
185
|
-
*
|
186
|
-
* Update `version.rb` file and changelog with new version number
|
187
|
-
* If it's not a patch level release, create a stable branch for that release,
|
188
|
-
otherwise switch to the stable branch corresponding to the patch release you
|
189
|
-
want to ship:
|
190
|
-
|
191
|
-
```sh
|
192
|
-
git checkout master
|
193
|
-
git fetch activeadmin
|
194
|
-
git rebase activeadmin/master
|
195
|
-
# If the release is 2.1.x then this should be: 2-1-stable
|
196
|
-
git checkout -b N-N-stable
|
197
|
-
git push activeadmin N-N-stable:N-N-stable
|
198
|
-
```
|
199
|
-
|
177
|
+
* Switch to the master branch and make sure it's up to date.
|
200
178
|
* Make sure you have [chandler] properly configured. Chandler is used to
|
201
179
|
automatically submit github release notes from the changelog right after
|
202
180
|
pushing the gem to rubygems.
|
203
|
-
*
|
181
|
+
* Run one of `bin/rake release:prepare_{prerelease,prepatch,patch,preminor,minor,premajor,major}`, push the result and create a PR.
|
182
|
+
* Review and merge the PR. The generated changelog in the PR should include all user visible changes you intend to ship.
|
183
|
+
* Run `bin/rake release` from the target branch once the PR is merged.
|
204
184
|
|
205
185
|
[chandler]: https://github.com/mattbrictson/chandler#2-configure-credentials
|
206
|
-
[chromedriver]: https://sites.google.com/a/chromium.org/chromedriver/getting-started
|
207
|
-
[mailing list]: http://groups.google.com/group/activeadmin
|
208
186
|
[Stack Overflow]: http://stackoverflow.com/questions/tagged/activeadmin
|
209
|
-
[search the issue tracker]: https://github.com/activeadmin/activeadmin/issues?q=something
|
210
187
|
[new issue]: https://github.com/activeadmin/activeadmin/issues/new
|
211
188
|
[fork Active Admin]: https://help.github.com/articles/fork-a-repo
|
212
|
-
[searching all issues]: https://github.com/activeadmin/activeadmin/issues?q=
|
213
|
-
[master template]: https://github.com/activeadmin/activeadmin/blob/master/lib/bug_report_templates/active_admin_master.rb
|
214
189
|
[make a pull request]: https://help.github.com/articles/creating-a-pull-request
|
215
190
|
[git rebasing]: http://git-scm.com/book/en/Git-Branching-Rebasing
|
216
|
-
[interactive rebase]: https://help.github.com/
|
191
|
+
[interactive rebase]: https://help.github.com/en/github/using-git/about-git-rebase
|
192
|
+
[shortcut reference links]: https://github.github.com/gfm/#shortcut-reference-link
|
193
|
+
[Rollup]: https://rollupjs.org/guide/en/#quick-start
|
194
|
+
[Yarn]: https://yarnpkg.com/en/docs/install
|
195
|
+
[Node.js]: https://nodejs.org/en/
|
data/README.md
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
creating elegant backends for website administration.
|
5
5
|
|
6
6
|
[![Version ][rubygems_badge]][rubygems]
|
7
|
-
[![
|
7
|
+
[![Github Actions ][actions_badge]][actions]
|
8
8
|
[![Coverage ][coverage_badge]][coverage]
|
9
9
|
[![Tidelift ][tidelift_badge]][tidelift]
|
10
10
|
[![Inch CI ][inch_badge]][inch]
|
@@ -21,6 +21,11 @@ creating elegant backends for website administration.
|
|
21
21
|
* Try the [live demo][demo].
|
22
22
|
* The [wiki] includes links to tutorials, articles and sample projects.
|
23
23
|
|
24
|
+
## For enterprise
|
25
|
+
|
26
|
+
Active Admin for enterprise is available via the Tidelift subscription. [Learn
|
27
|
+
More][tidelift_enterprise].
|
28
|
+
|
24
29
|
## Need help?
|
25
30
|
|
26
31
|
Please use [StackOverflow][stackoverflow] for help requests and how-to questions.
|
@@ -32,16 +37,22 @@ Google Groups, IRC #activeadmin and Gitter are not actively monitored.
|
|
32
37
|
|
33
38
|
## Want to contribute?
|
34
39
|
|
35
|
-
|
36
|
-
is
|
40
|
+
If you want to contribute through code or documentation, the [Contributing
|
41
|
+
guide is the best place to start][contributing]. If you have questions, feel free
|
42
|
+
to ask.
|
37
43
|
|
38
44
|
## Want to support us?
|
39
45
|
|
40
|
-
|
46
|
+
If you want to support us financially, you can [help fund the project
|
47
|
+
through a Tidelift subscription][tidelift_support]. By buying a Tidelift subscription
|
48
|
+
you make sure your whole dependency stack is properly maintained, while also
|
49
|
+
getting a comprehensive view of outdated dependencies, new releases, security
|
50
|
+
alerts, and licensing compatibility issues.
|
41
51
|
|
42
|
-
You can support us with a weekly tip via [Liberapay]
|
52
|
+
You can also support us with a weekly tip via [Liberapay].
|
43
53
|
|
44
|
-
|
54
|
+
Finally, we have an [Open Collective][opencollective page] where you can become a backer or
|
55
|
+
sponsor for the project, and also submit expenses to it.
|
45
56
|
|
46
57
|
## Dependencies
|
47
58
|
|
@@ -56,6 +67,23 @@ Tool | Description
|
|
56
67
|
[Kaminari] | Elegant pagination for any sort of collection
|
57
68
|
[Ransack] | Provides a simple search API to query your data
|
58
69
|
|
70
|
+
## Security contact information
|
71
|
+
|
72
|
+
Please use the Tidelift security contact to [report a security vulnerability][Tidelift security contact].
|
73
|
+
Tidelift will coordinate the fix and disclosure.
|
74
|
+
|
75
|
+
## Acknowledgements
|
76
|
+
|
77
|
+
Thanks to [Greg Bell][Greg] for creating and sharing this project with the open source community.
|
78
|
+
|
79
|
+
Thanks to [all the people that ever contributed through code][contributors] or
|
80
|
+
other means such as bug reports, issue triaging, feature suggestions, code
|
81
|
+
snippet tips, Slack discussions and so on.
|
82
|
+
|
83
|
+
Thanks to [Tidelift][tidelift] and all our Tidelift subscribers.
|
84
|
+
|
85
|
+
Thanks to [Open Collective][opencollective contributors] and all our Open Collective contributors.
|
86
|
+
|
59
87
|
[Arbre]: https://github.com/activeadmin/arbre
|
60
88
|
[Devise]: https://github.com/plataformatec/devise
|
61
89
|
[Formtastic]: https://github.com/justinfrench/formtastic
|
@@ -65,20 +93,25 @@ Tool | Description
|
|
65
93
|
|
66
94
|
[rubygems_badge]: http://img.shields.io/gem/v/activeadmin.svg
|
67
95
|
[rubygems]: https://rubygems.org/gems/activeadmin
|
68
|
-
[
|
69
|
-
[
|
96
|
+
[actions_badge]: https://github.com/activeadmin/activeadmin/workflows/ci/badge.svg
|
97
|
+
[actions]: https://github.com/activeadmin/activeadmin/actions
|
70
98
|
[coverage_badge]: https://api.codeclimate.com/v1/badges/779e407d22bacff19733/test_coverage
|
71
99
|
[coverage]: https://codeclimate.com/github/activeadmin/activeadmin/test_coverage
|
72
100
|
[inch_badge]: http://inch-ci.org/github/activeadmin/activeadmin.svg?branch=master
|
73
101
|
[inch]: http://inch-ci.org/github/activeadmin/activeadmin
|
74
102
|
[tidelift_badge]: https://tidelift.com/badges/github/activeadmin/activeadmin
|
75
103
|
[tidelift]: https://tidelift.com/subscription/pkg/rubygems-activeadmin?utm_source=rubygems-activeadmin&utm_medium=readme
|
104
|
+
[tidelift_enterprise]: https://tidelift.com/subscription/pkg/rubygems-activeadmin?utm_source=rubygems-activeadmin&utm_medium=referral&utm_campaign=enterprise
|
105
|
+
[tidelift_support]: https://tidelift.com/subscription/pkg/rubygems-activeadmin?utm_source=rubygems-activeadmin&utm_medium=referral&utm_campaign=github&utm_content=support
|
76
106
|
|
77
107
|
[docs]: http://activeadmin.info/0-installation.html
|
78
108
|
[demo]: http://demo.activeadmin.info/admin
|
79
109
|
[wiki]: https://github.com/activeadmin/activeadmin/wiki
|
80
110
|
[stackoverflow]: http://stackoverflow.com/questions/tagged/activeadmin
|
81
111
|
[contributing]: https://github.com/activeadmin/activeadmin/blob/master/CONTRIBUTING.md
|
82
|
-
[
|
83
|
-
[
|
84
|
-
[
|
112
|
+
[Liberapay]: https://liberapay.com/Active-Admin/donate
|
113
|
+
[Tidelift security contact]: https://tidelift.com/security
|
114
|
+
[Greg]: https://github.com/gregbell
|
115
|
+
[contributors]: https://github.com/activeadmin/activeadmin/graphs/contributors
|
116
|
+
[opencollective page]: https://opencollective.com/activeadmin
|
117
|
+
[opencollective contributors]: https://opencollective.com/activeadmin#contributors
|
@@ -0,0 +1,517 @@
|
|
1
|
+
/**
|
2
|
+
* Warning: This file is auto-generated, do not modify. Instead, make your changes in 'app/javascript/active_admin/' and run `yarn build`
|
3
|
+
*/
|
4
|
+
//= require jquery3
|
5
|
+
//= require jquery-ui/widgets/datepicker
|
6
|
+
//= require jquery-ui/widgets/dialog
|
7
|
+
//= require jquery-ui/widgets/sortable
|
8
|
+
//= require jquery-ui/widgets/tabs
|
9
|
+
//= require jquery-ui/widget
|
10
|
+
//= require jquery_ujs
|
11
|
+
//= require_self
|
12
|
+
|
13
|
+
(function(global, factory) {
|
14
|
+
typeof exports === "object" && typeof module !== "undefined" ? factory(exports, require("jquery"), require("jquery-ui/ui/widgets/datepicker"), require("jquery-ui/ui/widgets/dialog"), require("jquery-ui/ui/widgets/sortable"), require("jquery-ui/ui/widgets/tabs"), require("jquery-ui/ui/widget"), require("jquery-ujs")) : typeof define === "function" && define.amd ? define([ "exports", "jquery", "jquery-ui/ui/widgets/datepicker", "jquery-ui/ui/widgets/dialog", "jquery-ui/ui/widgets/sortable", "jquery-ui/ui/widgets/tabs", "jquery-ui/ui/widget", "jquery-ujs" ], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self,
|
15
|
+
factory(global.ActiveAdmin = {}));
|
16
|
+
})(this, function(exports) {
|
17
|
+
"use strict";
|
18
|
+
$.fn.serializeObject = function() {
|
19
|
+
return this.serializeArray().reduce(function(obj, item) {
|
20
|
+
obj[item.name] = item.value;
|
21
|
+
return obj;
|
22
|
+
}, {});
|
23
|
+
};
|
24
|
+
$.ui.dialog.prototype._focusTabbable = function() {
|
25
|
+
this.uiDialog.focus();
|
26
|
+
};
|
27
|
+
function ModalDialog(message, inputs, callback) {
|
28
|
+
var html = '<form id="dialog_confirm" title="' + message + '"><ul>';
|
29
|
+
for (var name in inputs) {
|
30
|
+
var opts, wrapper;
|
31
|
+
var type = inputs[name];
|
32
|
+
if (/^(datepicker|checkbox|text|number)$/.test(type)) {
|
33
|
+
wrapper = "input";
|
34
|
+
} else if (type === "textarea") {
|
35
|
+
wrapper = "textarea";
|
36
|
+
} else if ($.isArray(type)) {
|
37
|
+
var _ref = [ "select", type, "" ];
|
38
|
+
wrapper = _ref[0];
|
39
|
+
opts = _ref[1];
|
40
|
+
type = _ref[2];
|
41
|
+
} else {
|
42
|
+
throw new Error("Unsupported input type: {" + name + ": " + type + "}");
|
43
|
+
}
|
44
|
+
var klass = type === "datepicker" ? type : "";
|
45
|
+
html += "<li>\n <label>" + (name.charAt(0).toUpperCase() + name.slice(1)) + "</label>\n <" + wrapper + ' name="' + name + '" class="' + klass + '" type="' + type + '">' + (opts ? function() {
|
46
|
+
var result = [];
|
47
|
+
opts.forEach(function(v) {
|
48
|
+
var $elem = $("<option></option>");
|
49
|
+
if ($.isArray(v)) {
|
50
|
+
$elem.text(v[0]).val(v[1]);
|
51
|
+
} else {
|
52
|
+
$elem.text(v);
|
53
|
+
}
|
54
|
+
result.push($elem.wrap("<div></div>").parent().html());
|
55
|
+
});
|
56
|
+
return result;
|
57
|
+
}().join("") : "") + ("</" + wrapper + ">") + "</li>";
|
58
|
+
var _ref2 = [];
|
59
|
+
wrapper = _ref2[0];
|
60
|
+
opts = _ref2[1];
|
61
|
+
type = _ref2[2];
|
62
|
+
klass = _ref2[3];
|
63
|
+
}
|
64
|
+
html += "</ul></form>";
|
65
|
+
var form = $(html).appendTo("body");
|
66
|
+
$("body").trigger("modal_dialog:before_open", [ form ]);
|
67
|
+
form.dialog({
|
68
|
+
modal: true,
|
69
|
+
open: function open(_event, _ui) {
|
70
|
+
$("body").trigger("modal_dialog:after_open", [ form ]);
|
71
|
+
},
|
72
|
+
dialogClass: "active_admin_dialog",
|
73
|
+
buttons: {
|
74
|
+
OK: function OK() {
|
75
|
+
callback($(this).serializeObject());
|
76
|
+
$(this).dialog("close");
|
77
|
+
},
|
78
|
+
Cancel: function Cancel() {
|
79
|
+
$(this).dialog("close").remove();
|
80
|
+
}
|
81
|
+
}
|
82
|
+
});
|
83
|
+
}
|
84
|
+
var onDOMReady = function onDOMReady() {
|
85
|
+
$(".batch_actions_selector li a").off("click confirm:complete");
|
86
|
+
$(".batch_actions_selector li a").on("click", function(event) {
|
87
|
+
var _this = this;
|
88
|
+
var message;
|
89
|
+
event.stopPropagation();
|
90
|
+
event.preventDefault();
|
91
|
+
if (message = $(this).data("confirm")) {
|
92
|
+
ModalDialog(message, $(this).data("inputs"), function(inputs) {
|
93
|
+
$(_this).trigger("confirm:complete", inputs);
|
94
|
+
});
|
95
|
+
} else {
|
96
|
+
$(this).trigger("confirm:complete");
|
97
|
+
}
|
98
|
+
});
|
99
|
+
$(".batch_actions_selector li a").on("confirm:complete", function(event, inputs) {
|
100
|
+
var val;
|
101
|
+
if (val = JSON.stringify(inputs)) {
|
102
|
+
$("#batch_action_inputs").removeAttr("disabled").val(val);
|
103
|
+
} else {
|
104
|
+
$("#batch_action_inputs").attr("disabled", "disabled");
|
105
|
+
}
|
106
|
+
$("#batch_action").val($(this).data("action"));
|
107
|
+
$("#collection_selection").submit();
|
108
|
+
});
|
109
|
+
if ($(".batch_actions_selector").length && $(":checkbox.toggle_all").length) {
|
110
|
+
if ($(".paginated_collection table.index_table").length) {
|
111
|
+
$(".paginated_collection table.index_table").tableCheckboxToggler();
|
112
|
+
} else {
|
113
|
+
$(".paginated_collection").checkboxToggler();
|
114
|
+
}
|
115
|
+
$(document).on("change", ".paginated_collection :checkbox", function() {
|
116
|
+
if ($(".paginated_collection :checkbox:checked").length && $(".dropdown_menu_list").children().length) {
|
117
|
+
$(".batch_actions_selector").each(function() {
|
118
|
+
$(this).aaDropdownMenu("enable");
|
119
|
+
});
|
120
|
+
} else {
|
121
|
+
$(".batch_actions_selector").each(function() {
|
122
|
+
$(this).aaDropdownMenu("disable");
|
123
|
+
});
|
124
|
+
}
|
125
|
+
});
|
126
|
+
}
|
127
|
+
};
|
128
|
+
$(document).ready(onDOMReady).on("page:load turbolinks:load", onDOMReady);
|
129
|
+
var CheckboxToggler = function() {
|
130
|
+
function CheckboxToggler(options, container) {
|
131
|
+
this.options = options;
|
132
|
+
this.container = container;
|
133
|
+
this._init();
|
134
|
+
this._bind();
|
135
|
+
}
|
136
|
+
var _proto = CheckboxToggler.prototype;
|
137
|
+
_proto.option = function option(_key, _value) {};
|
138
|
+
_proto._init = function _init() {
|
139
|
+
if (!this.container) {
|
140
|
+
throw new Error("Container element not found");
|
141
|
+
} else {
|
142
|
+
this.$container = $(this.container);
|
143
|
+
}
|
144
|
+
if (!this.$container.find(".toggle_all").length) {
|
145
|
+
throw new Error('"toggle all" checkbox not found');
|
146
|
+
} else {
|
147
|
+
this.toggle_all_checkbox = this.$container.find(".toggle_all");
|
148
|
+
}
|
149
|
+
this.checkboxes = this.$container.find(":checkbox").not(this.toggle_all_checkbox);
|
150
|
+
};
|
151
|
+
_proto._bind = function _bind() {
|
152
|
+
var _this = this;
|
153
|
+
this.checkboxes.change(function(event) {
|
154
|
+
return _this._didChangeCheckbox(event.target);
|
155
|
+
});
|
156
|
+
this.toggle_all_checkbox.change(function() {
|
157
|
+
return _this._didChangeToggleAllCheckbox();
|
158
|
+
});
|
159
|
+
};
|
160
|
+
_proto._didChangeCheckbox = function _didChangeCheckbox(_checkbox) {
|
161
|
+
var numChecked = this.checkboxes.filter(":checked").length;
|
162
|
+
var allChecked = numChecked === this.checkboxes.length;
|
163
|
+
var someChecked = numChecked > 0 && numChecked < this.checkboxes.length;
|
164
|
+
this.toggle_all_checkbox.prop({
|
165
|
+
checked: allChecked,
|
166
|
+
indeterminate: someChecked
|
167
|
+
});
|
168
|
+
};
|
169
|
+
_proto._didChangeToggleAllCheckbox = function _didChangeToggleAllCheckbox() {
|
170
|
+
var setting = this.toggle_all_checkbox.prop("checked");
|
171
|
+
this.checkboxes.prop({
|
172
|
+
checked: setting
|
173
|
+
});
|
174
|
+
return setting;
|
175
|
+
};
|
176
|
+
return CheckboxToggler;
|
177
|
+
}();
|
178
|
+
$.widget.bridge("checkboxToggler", CheckboxToggler);
|
179
|
+
(function($) {
|
180
|
+
$(document).on("focus", "input.datepicker:not(.hasDatepicker)", function() {
|
181
|
+
var input = $(this);
|
182
|
+
if (input[0].type === "date") {
|
183
|
+
return;
|
184
|
+
}
|
185
|
+
var defaults = {
|
186
|
+
dateFormat: "yy-mm-dd"
|
187
|
+
};
|
188
|
+
var options = input.data("datepicker-options");
|
189
|
+
input.datepicker($.extend(defaults, options));
|
190
|
+
});
|
191
|
+
})(jQuery);
|
192
|
+
var DropdownMenu = function() {
|
193
|
+
function DropdownMenu(options, element) {
|
194
|
+
this.options = options;
|
195
|
+
this.element = element;
|
196
|
+
this.$element = $(this.element);
|
197
|
+
var defaults = {
|
198
|
+
fadeInDuration: 20,
|
199
|
+
fadeOutDuration: 100,
|
200
|
+
onClickActionItemCallback: null
|
201
|
+
};
|
202
|
+
this.options = $.extend(defaults, this.options);
|
203
|
+
this.isOpen = false;
|
204
|
+
this.$menuButton = this.$element.find(".dropdown_menu_button");
|
205
|
+
this.$menuList = this.$element.find(".dropdown_menu_list_wrapper");
|
206
|
+
this._buildMenuList();
|
207
|
+
this._bind();
|
208
|
+
}
|
209
|
+
var _proto = DropdownMenu.prototype;
|
210
|
+
_proto.open = function open() {
|
211
|
+
this.isOpen = true;
|
212
|
+
this.$menuList.fadeIn(this.options.fadeInDuration);
|
213
|
+
this._position();
|
214
|
+
return this;
|
215
|
+
};
|
216
|
+
_proto.close = function close() {
|
217
|
+
this.isOpen = false;
|
218
|
+
this.$menuList.fadeOut(this.options.fadeOutDuration);
|
219
|
+
return this;
|
220
|
+
};
|
221
|
+
_proto.destroy = function destroy() {
|
222
|
+
this.$element = null;
|
223
|
+
return this;
|
224
|
+
};
|
225
|
+
_proto.isDisabled = function isDisabled() {
|
226
|
+
return this.$menuButton.hasClass("disabled");
|
227
|
+
};
|
228
|
+
_proto.disable = function disable() {
|
229
|
+
this.$menuButton.addClass("disabled");
|
230
|
+
};
|
231
|
+
_proto.enable = function enable() {
|
232
|
+
this.$menuButton.removeClass("disabled");
|
233
|
+
};
|
234
|
+
_proto.option = function option(key, value) {
|
235
|
+
if ($.isPlainObject(key)) {
|
236
|
+
return this.options = $.extend(true, this.options, key);
|
237
|
+
} else if (key != null) {
|
238
|
+
return this.options[key];
|
239
|
+
} else {
|
240
|
+
return this.options[key] = value;
|
241
|
+
}
|
242
|
+
};
|
243
|
+
_proto._buildMenuList = function _buildMenuList() {
|
244
|
+
this.$nipple = $('<div class="dropdown_menu_nipple"></div>');
|
245
|
+
this.$menuList.prepend(this.$nipple);
|
246
|
+
this.$menuList.hide();
|
247
|
+
};
|
248
|
+
_proto._bind = function _bind() {
|
249
|
+
var _this = this;
|
250
|
+
$("body").click(function() {
|
251
|
+
if (_this.isOpen) {
|
252
|
+
_this.close();
|
253
|
+
}
|
254
|
+
});
|
255
|
+
this.$menuButton.click(function() {
|
256
|
+
if (!_this.isDisabled()) {
|
257
|
+
if (_this.isOpen) {
|
258
|
+
_this.close();
|
259
|
+
} else {
|
260
|
+
_this.open();
|
261
|
+
}
|
262
|
+
}
|
263
|
+
return false;
|
264
|
+
});
|
265
|
+
};
|
266
|
+
_proto._position = function _position() {
|
267
|
+
this.$menuList.css("top", this.$menuButton.position().top + this.$menuButton.outerHeight() + 10);
|
268
|
+
var button_left = this.$menuButton.position().left;
|
269
|
+
var button_center = this.$menuButton.outerWidth() / 2;
|
270
|
+
var button_right = button_left + button_center * 2;
|
271
|
+
var menu_center = this.$menuList.outerWidth() / 2;
|
272
|
+
var nipple_center = this.$nipple.outerWidth() / 2;
|
273
|
+
var window_right = $(window).width();
|
274
|
+
var centered_menu_left = button_left + button_center - menu_center;
|
275
|
+
var centered_menu_right = button_left + button_center + menu_center;
|
276
|
+
if (centered_menu_left < 0) {
|
277
|
+
this.$menuList.css("left", button_left);
|
278
|
+
this.$nipple.css("left", button_center - nipple_center);
|
279
|
+
} else if (centered_menu_right > window_right) {
|
280
|
+
this.$menuList.css("right", window_right - button_right);
|
281
|
+
this.$nipple.css("right", button_center - nipple_center);
|
282
|
+
} else {
|
283
|
+
this.$menuList.css("left", centered_menu_left);
|
284
|
+
this.$nipple.css("left", menu_center - nipple_center);
|
285
|
+
}
|
286
|
+
};
|
287
|
+
return DropdownMenu;
|
288
|
+
}();
|
289
|
+
$.widget.bridge("aaDropdownMenu", DropdownMenu);
|
290
|
+
var onDOMReady$1 = function onDOMReady() {
|
291
|
+
return $(".dropdown_menu").aaDropdownMenu();
|
292
|
+
};
|
293
|
+
$(document).ready(onDOMReady$1).on("page:load turbolinks:load", onDOMReady$1);
|
294
|
+
function hasTurbolinks() {
|
295
|
+
return typeof Turbolinks !== "undefined" && Turbolinks.supported;
|
296
|
+
}
|
297
|
+
function turbolinksVisit(params) {
|
298
|
+
var path = [ window.location.pathname, "?", toQueryString(params) ].join("");
|
299
|
+
Turbolinks.visit(path);
|
300
|
+
}
|
301
|
+
function queryString() {
|
302
|
+
return (window.location.search || "").replace(/^\?/, "");
|
303
|
+
}
|
304
|
+
function queryStringToParams() {
|
305
|
+
var decode = function decode(value) {
|
306
|
+
return decodeURIComponent((value || "").replace(/\+/g, "%20"));
|
307
|
+
};
|
308
|
+
return queryString().split("&").map(function(pair) {
|
309
|
+
return pair.split("=");
|
310
|
+
}).map(function(_ref) {
|
311
|
+
var key = _ref[0], value = _ref[1];
|
312
|
+
return {
|
313
|
+
name: decode(key),
|
314
|
+
value: decode(value)
|
315
|
+
};
|
316
|
+
});
|
317
|
+
}
|
318
|
+
function toQueryString(params) {
|
319
|
+
var encode = function encode(value) {
|
320
|
+
return encodeURIComponent(value || "");
|
321
|
+
};
|
322
|
+
return params.map(function(_ref2) {
|
323
|
+
var name = _ref2.name, value = _ref2.value;
|
324
|
+
return [ encode(name), encode(value) ];
|
325
|
+
}).map(function(pair) {
|
326
|
+
return pair.join("=");
|
327
|
+
}).join("&");
|
328
|
+
}
|
329
|
+
var Filters = function() {
|
330
|
+
function Filters() {}
|
331
|
+
Filters._clearForm = function _clearForm(event) {
|
332
|
+
var regex = /^(q\[|q%5B|q%5b|page|utf8|commit)/;
|
333
|
+
var params = queryStringToParams().filter(function(_ref) {
|
334
|
+
var name = _ref.name;
|
335
|
+
return !name.match(regex);
|
336
|
+
});
|
337
|
+
event.preventDefault();
|
338
|
+
if (hasTurbolinks()) {
|
339
|
+
turbolinksVisit(params);
|
340
|
+
} else {
|
341
|
+
window.location.search = toQueryString(params);
|
342
|
+
}
|
343
|
+
};
|
344
|
+
Filters._disableEmptyInputFields = function _disableEmptyInputFields(event) {
|
345
|
+
var params = $(this).find(":input").filter(function(i, input) {
|
346
|
+
return input.value === "";
|
347
|
+
}).prop({
|
348
|
+
disabled: true
|
349
|
+
}).end().serializeArray();
|
350
|
+
if (hasTurbolinks()) {
|
351
|
+
event.preventDefault();
|
352
|
+
turbolinksVisit(params);
|
353
|
+
}
|
354
|
+
};
|
355
|
+
Filters._setSearchType = function _setSearchType() {
|
356
|
+
$(this).siblings("input").prop({
|
357
|
+
name: "q[" + this.value + "]"
|
358
|
+
});
|
359
|
+
};
|
360
|
+
return Filters;
|
361
|
+
}();
|
362
|
+
(function($) {
|
363
|
+
$(document).on("click", ".clear_filters_btn", Filters._clearForm).on("submit", ".filter_form", Filters._disableEmptyInputFields).on("change", ".filter_form_field.select_and_search select", Filters._setSearchType);
|
364
|
+
})(jQuery);
|
365
|
+
$(function() {
|
366
|
+
$(document).on("click", "a.button.has_many_remove", function(event) {
|
367
|
+
event.preventDefault();
|
368
|
+
var parent = $(this).closest(".has_many_container");
|
369
|
+
var to_remove = $(this).closest("fieldset");
|
370
|
+
recompute_positions(parent);
|
371
|
+
parent.trigger("has_many_remove:before", [ to_remove, parent ]);
|
372
|
+
to_remove.remove();
|
373
|
+
return parent.trigger("has_many_remove:after", [ to_remove, parent ]);
|
374
|
+
});
|
375
|
+
$(document).on("click", "a.button.has_many_add", function(event) {
|
376
|
+
var before_add;
|
377
|
+
event.preventDefault();
|
378
|
+
var parent = $(this).closest(".has_many_container");
|
379
|
+
parent.trigger(before_add = $.Event("has_many_add:before"), [ parent ]);
|
380
|
+
if (!before_add.isDefaultPrevented()) {
|
381
|
+
var index = parent.data("has_many_index") || parent.children("fieldset").length - 1;
|
382
|
+
parent.data({
|
383
|
+
has_many_index: ++index
|
384
|
+
});
|
385
|
+
var regex = new RegExp($(this).data("placeholder"), "g");
|
386
|
+
var html = $(this).data("html").replace(regex, index);
|
387
|
+
var fieldset = $(html).insertBefore(this);
|
388
|
+
recompute_positions(parent);
|
389
|
+
return parent.trigger("has_many_add:after", [ fieldset, parent ]);
|
390
|
+
}
|
391
|
+
});
|
392
|
+
$(document).on("change", '.has_many_container[data-sortable] :input[name$="[_destroy]"]', function() {
|
393
|
+
recompute_positions($(this).closest(".has_many"));
|
394
|
+
});
|
395
|
+
init_sortable();
|
396
|
+
$(document).on("has_many_add:after", ".has_many_container", init_sortable);
|
397
|
+
});
|
398
|
+
var init_sortable = function init_sortable() {
|
399
|
+
var elems = $(".has_many_container[data-sortable]:not(.ui-sortable)");
|
400
|
+
elems.sortable({
|
401
|
+
items: "> fieldset",
|
402
|
+
handle: "> ol > .handle",
|
403
|
+
start: function start(ev, ui) {
|
404
|
+
ui.item.css({
|
405
|
+
opacity: .3
|
406
|
+
});
|
407
|
+
},
|
408
|
+
stop: function stop(ev, ui) {
|
409
|
+
ui.item.css({
|
410
|
+
opacity: 1
|
411
|
+
});
|
412
|
+
recompute_positions($(this));
|
413
|
+
}
|
414
|
+
});
|
415
|
+
elems.each(recompute_positions);
|
416
|
+
};
|
417
|
+
var recompute_positions = function recompute_positions(parent) {
|
418
|
+
parent = parent instanceof jQuery ? parent : $(this);
|
419
|
+
var input_name = parent.data("sortable");
|
420
|
+
var position = parseInt(parent.data("sortable-start") || 0, 10);
|
421
|
+
parent.children("fieldset").each(function() {
|
422
|
+
var destroy_input = $(this).find("> ol > .input > :input[name$='[_destroy]']");
|
423
|
+
var sortable_input = $(this).find("> ol > .input > :input[name$='[" + input_name + "]']");
|
424
|
+
if (sortable_input.length) {
|
425
|
+
sortable_input.val(destroy_input.is(":checked") ? "" : position++);
|
426
|
+
}
|
427
|
+
});
|
428
|
+
};
|
429
|
+
var PerPage = function() {
|
430
|
+
function PerPage(element) {
|
431
|
+
this.element = element;
|
432
|
+
}
|
433
|
+
var _proto = PerPage.prototype;
|
434
|
+
_proto.update = function update() {
|
435
|
+
var params = queryStringToParams().filter(function(_ref) {
|
436
|
+
var name = _ref.name;
|
437
|
+
return name != "per_page" || name != "page";
|
438
|
+
});
|
439
|
+
params.push({
|
440
|
+
name: "per_page",
|
441
|
+
value: this.element.value
|
442
|
+
});
|
443
|
+
if (hasTurbolinks()) {
|
444
|
+
turbolinksVisit(params);
|
445
|
+
} else {
|
446
|
+
window.location.search = toQueryString(params);
|
447
|
+
}
|
448
|
+
};
|
449
|
+
PerPage._jQueryInterface = function _jQueryInterface(config) {
|
450
|
+
return this.each(function() {
|
451
|
+
var $this = $(this);
|
452
|
+
var data = $this.data("perPage");
|
453
|
+
if (!data) {
|
454
|
+
data = new PerPage(this);
|
455
|
+
$this.data("perPage", data);
|
456
|
+
}
|
457
|
+
if (config === "update") {
|
458
|
+
data[config]();
|
459
|
+
}
|
460
|
+
});
|
461
|
+
};
|
462
|
+
return PerPage;
|
463
|
+
}();
|
464
|
+
(function($) {
|
465
|
+
$(document).on("change", ".pagination_per_page > select", function(_event) {
|
466
|
+
PerPage._jQueryInterface.call($(this), "update");
|
467
|
+
});
|
468
|
+
$.fn["perPage"] = PerPage._jQueryInterface;
|
469
|
+
$.fn["perPage"].Constructor = PerPage;
|
470
|
+
})(jQuery);
|
471
|
+
function _inheritsLoose(subClass, superClass) {
|
472
|
+
subClass.prototype = Object.create(superClass.prototype);
|
473
|
+
subClass.prototype.constructor = subClass;
|
474
|
+
subClass.__proto__ = superClass;
|
475
|
+
}
|
476
|
+
var TableCheckboxToggler = function(_CheckboxToggler) {
|
477
|
+
_inheritsLoose(TableCheckboxToggler, _CheckboxToggler);
|
478
|
+
function TableCheckboxToggler() {
|
479
|
+
return _CheckboxToggler.apply(this, arguments) || this;
|
480
|
+
}
|
481
|
+
var _proto = TableCheckboxToggler.prototype;
|
482
|
+
_proto._bind = function _bind() {
|
483
|
+
var _this = this;
|
484
|
+
_CheckboxToggler.prototype._bind.apply(this, arguments);
|
485
|
+
this.$container.find("tbody td").click(function(event) {
|
486
|
+
if (event.target.type !== "checkbox") {
|
487
|
+
_this._didClickCell(event.target);
|
488
|
+
}
|
489
|
+
});
|
490
|
+
};
|
491
|
+
_proto._didChangeCheckbox = function _didChangeCheckbox(checkbox) {
|
492
|
+
_CheckboxToggler.prototype._didChangeCheckbox.apply(this, arguments);
|
493
|
+
$(checkbox).parents("tr").toggleClass("selected", checkbox.checked);
|
494
|
+
};
|
495
|
+
_proto._didChangeToggleAllCheckbox = function _didChangeToggleAllCheckbox() {
|
496
|
+
this.$container.find("tbody tr").toggleClass("selected", _CheckboxToggler.prototype._didChangeToggleAllCheckbox.apply(this, arguments));
|
497
|
+
};
|
498
|
+
_proto._didClickCell = function _didClickCell(cell) {
|
499
|
+
$(cell).parent("tr").find(":checkbox").click();
|
500
|
+
};
|
501
|
+
return TableCheckboxToggler;
|
502
|
+
}(CheckboxToggler);
|
503
|
+
$.widget.bridge("tableCheckboxToggler", TableCheckboxToggler);
|
504
|
+
var onDOMReady$2 = function onDOMReady() {
|
505
|
+
return $("#active_admin_content .tabs").tabs();
|
506
|
+
};
|
507
|
+
$(document).ready(onDOMReady$2).on("page:load turbolinks:load", onDOMReady$2);
|
508
|
+
function modal_dialog(message, inputs, callback) {
|
509
|
+
console.warn("ActiveAdmin.modal_dialog is deprecated in favor of ActiveAdmin.ModalDialog, please update usage.");
|
510
|
+
return ModalDialog(message, inputs, callback);
|
511
|
+
}
|
512
|
+
exports.ModalDialog = ModalDialog;
|
513
|
+
exports.modal_dialog = modal_dialog;
|
514
|
+
Object.defineProperty(exports, "__esModule", {
|
515
|
+
value: true
|
516
|
+
});
|
517
|
+
});
|