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.

Files changed (307) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +359 -25
  3. data/CONTRIBUTING.md +53 -74
  4. data/README.md +44 -11
  5. data/app/assets/javascripts/active_admin/base.js +517 -0
  6. data/app/assets/stylesheets/active_admin/_base.scss +29 -29
  7. data/app/assets/stylesheets/active_admin/_forms.scss +2 -14
  8. data/app/assets/stylesheets/active_admin/_header.scss +40 -8
  9. data/app/assets/stylesheets/active_admin/_mixins.scss +1 -1
  10. data/{vendor → app}/assets/stylesheets/active_admin/_normalize.scss +0 -0
  11. data/app/assets/stylesheets/active_admin/components/_comments.scss +2 -2
  12. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +0 -5
  13. data/app/assets/stylesheets/active_admin/components/_tables.scss +1 -2
  14. data/app/assets/stylesheets/active_admin/components/_tabs.scss +1 -1
  15. data/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -8
  16. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +1 -1
  17. data/app/assets/stylesheets/active_admin/mixins/_variables.scss +8 -0
  18. data/app/assets/stylesheets/active_admin/print.scss +2 -2
  19. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +1 -1
  20. data/app/javascript/active_admin/base.js +28 -0
  21. data/app/javascript/active_admin/ext/jquery-ui.js +7 -0
  22. data/app/javascript/active_admin/ext/jquery.js +9 -0
  23. data/app/javascript/active_admin/initializers/batch-actions.js +61 -0
  24. data/app/javascript/active_admin/initializers/checkbox-toggler.js +3 -0
  25. data/app/javascript/active_admin/initializers/datepicker.js +16 -0
  26. data/app/javascript/active_admin/initializers/dropdown-menu.js +9 -0
  27. data/app/javascript/active_admin/initializers/filters.js +10 -0
  28. data/app/javascript/active_admin/initializers/has-many.js +95 -0
  29. data/app/javascript/active_admin/initializers/per-page.js +13 -0
  30. data/app/javascript/active_admin/initializers/table-checkbox-toggler.js +3 -0
  31. data/app/javascript/active_admin/initializers/tabs.js +6 -0
  32. data/app/javascript/active_admin/lib/checkbox-toggler.js +49 -0
  33. data/app/javascript/active_admin/lib/dropdown-menu.js +116 -0
  34. data/app/javascript/active_admin/lib/filters.js +39 -0
  35. data/app/javascript/active_admin/lib/modal-dialog.js +63 -0
  36. data/app/javascript/active_admin/lib/per-page.js +38 -0
  37. data/app/javascript/active_admin/lib/table-checkbox-toggler.js +38 -0
  38. data/app/javascript/active_admin/lib/utils.js +40 -0
  39. data/app/views/active_admin/devise/confirmations/new.html.erb +1 -1
  40. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
  41. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +2 -2
  42. data/app/views/active_admin/devise/passwords/edit.html.erb +1 -1
  43. data/app/views/active_admin/devise/passwords/new.html.erb +1 -1
  44. data/app/views/active_admin/devise/registrations/new.html.erb +1 -2
  45. data/app/views/active_admin/devise/shared/_error_messages.html.erb +15 -0
  46. data/app/views/active_admin/devise/unlocks/new.html.erb +1 -1
  47. data/app/views/kaminari/active_admin_countless/_first_page.html.erb +11 -0
  48. data/app/views/kaminari/active_admin_countless/_gap.html.erb +8 -0
  49. data/app/views/kaminari/active_admin_countless/_next_page.html.erb +11 -0
  50. data/app/views/kaminari/active_admin_countless/_page.html.erb +12 -0
  51. data/app/views/kaminari/active_admin_countless/_paginator.html.erb +24 -0
  52. data/app/views/kaminari/active_admin_countless/_prev_page.html.erb +11 -0
  53. data/app/views/layouts/active_admin_logged_out.html.erb +16 -6
  54. data/config/locales/ar.yml +9 -8
  55. data/config/locales/az.yml +138 -0
  56. data/config/locales/bg.yml +1 -1
  57. data/config/locales/bs.yml +1 -0
  58. data/config/locales/ca.yml +1 -1
  59. data/config/locales/cs.yml +1 -0
  60. data/config/locales/da.yml +1 -0
  61. data/config/locales/de-CH.yml +1 -0
  62. data/config/locales/de.yml +19 -0
  63. data/config/locales/el.yml +1 -0
  64. data/config/locales/en-CA.yml +4 -3
  65. data/config/locales/en-GB.yml +4 -3
  66. data/config/locales/en.yml +4 -3
  67. data/config/locales/eo.yml +1 -0
  68. data/config/locales/es-MX.yml +3 -1
  69. data/config/locales/es.yml +6 -5
  70. data/config/locales/fa.yml +1 -0
  71. data/config/locales/fi.yml +1 -0
  72. data/config/locales/fr.yml +6 -5
  73. data/config/locales/he.yml +1 -1
  74. data/config/locales/hr.yml +1 -0
  75. data/config/locales/hu.yml +5 -0
  76. data/config/locales/id.yml +1 -0
  77. data/config/locales/it.yml +19 -0
  78. data/config/locales/ja.yml +4 -3
  79. data/config/locales/ko.yml +1 -0
  80. data/config/locales/lt.yml +3 -2
  81. data/config/locales/lv.yml +3 -2
  82. data/config/locales/mk.yml +134 -0
  83. data/config/locales/nb.yml +1 -0
  84. data/config/locales/nl.yml +1 -0
  85. data/config/locales/pl.yml +1 -0
  86. data/config/locales/pt-BR.yml +1 -0
  87. data/config/locales/pt-PT.yml +1 -0
  88. data/config/locales/ro.yml +1 -0
  89. data/config/locales/ru.yml +1 -0
  90. data/config/locales/sk.yml +60 -0
  91. data/config/locales/sv-SE.yml +1 -0
  92. data/config/locales/tr.yml +1 -0
  93. data/config/locales/uk.yml +3 -0
  94. data/config/locales/vi.yml +7 -5
  95. data/config/locales/zh-CN.yml +1 -0
  96. data/config/locales/zh-TW.yml +1 -0
  97. data/docs/0-installation.md +28 -4
  98. data/docs/1-general-configuration.md +20 -0
  99. data/docs/11-decorators.md +16 -5
  100. data/docs/12-arbre-components.md +13 -0
  101. data/docs/13-authorization-adapter.md +6 -6
  102. data/docs/2-resource-customization.md +11 -2
  103. data/docs/3-index-pages.md +1 -1
  104. data/docs/3-index-pages/index-as-table.md +7 -0
  105. data/docs/5-forms.md +6 -1
  106. data/docs/6-show-pages.md +12 -0
  107. data/docs/9-batch-actions.md +2 -2
  108. data/docs/CNAME +1 -1
  109. data/docs/Gemfile +2 -3
  110. data/docs/Gemfile.lock +126 -116
  111. data/docs/_config.yml +2 -0
  112. data/docs/_includes/top-menu.html +2 -2
  113. data/docs/documentation.md +1 -1
  114. data/docs/index.html +110 -9
  115. data/docs/stylesheets/main.css +29 -0
  116. data/lib/active_admin.rb +67 -63
  117. data/lib/active_admin/application.rb +20 -27
  118. data/lib/active_admin/application_settings.rb +6 -3
  119. data/lib/active_admin/asset_registration.rb +0 -8
  120. data/lib/active_admin/authorization_adapter.rb +3 -3
  121. data/lib/active_admin/base_controller.rb +10 -10
  122. data/lib/active_admin/base_controller/authorization.rb +15 -15
  123. data/lib/active_admin/batch_actions/controller.rb +4 -4
  124. data/lib/active_admin/batch_actions/resource_extension.rb +15 -10
  125. data/lib/active_admin/batch_actions/views/batch_action_form.rb +3 -3
  126. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +6 -6
  127. data/lib/active_admin/batch_actions/views/selection_cells.rb +3 -3
  128. data/lib/active_admin/callbacks.rb +1 -1
  129. data/lib/active_admin/cancan_adapter.rb +1 -1
  130. data/lib/active_admin/collection_decorator.rb +31 -0
  131. data/lib/active_admin/controller_action.rb +2 -1
  132. data/lib/active_admin/csv_builder.rb +14 -9
  133. data/lib/active_admin/dependency.rb +13 -85
  134. data/lib/active_admin/devise.rb +5 -5
  135. data/lib/active_admin/dsl.rb +2 -9
  136. data/lib/active_admin/dynamic_settings_node.rb +2 -2
  137. data/lib/active_admin/engine.rb +10 -8
  138. data/lib/active_admin/error.rb +4 -4
  139. data/lib/active_admin/filters.rb +7 -7
  140. data/lib/active_admin/filters/active.rb +1 -1
  141. data/lib/active_admin/filters/active_filter.rb +10 -10
  142. data/lib/active_admin/filters/active_sidebar.rb +9 -5
  143. data/lib/active_admin/filters/forms.rb +7 -7
  144. data/lib/active_admin/filters/formtastic_addons.rb +2 -7
  145. data/lib/active_admin/filters/resource_extension.rb +28 -4
  146. data/lib/active_admin/form_builder.rb +26 -22
  147. data/lib/active_admin/generators/boilerplate.rb +12 -4
  148. data/lib/active_admin/helpers/optional_display.rb +2 -2
  149. data/lib/active_admin/helpers/scope_chain.rb +1 -0
  150. data/lib/active_admin/inputs/datepicker_input.rb +2 -2
  151. data/lib/active_admin/inputs/filters/base.rb +1 -1
  152. data/lib/active_admin/inputs/filters/base/search_method_select.rb +6 -6
  153. data/lib/active_admin/inputs/filters/boolean_input.rb +1 -1
  154. data/lib/active_admin/inputs/filters/check_boxes_input.rb +1 -1
  155. data/lib/active_admin/inputs/filters/date_range_input.rb +15 -12
  156. data/lib/active_admin/inputs/filters/select_input.rb +2 -2
  157. data/lib/active_admin/localizers.rb +1 -1
  158. data/lib/active_admin/localizers/resource_localizer.rb +3 -3
  159. data/lib/active_admin/menu.rb +6 -3
  160. data/lib/active_admin/menu_item.rb +7 -7
  161. data/lib/active_admin/namespace.rb +12 -12
  162. data/lib/active_admin/namespace_settings.rb +27 -8
  163. data/lib/active_admin/order_clause.rb +2 -2
  164. data/lib/active_admin/orm/active_record.rb +1 -1
  165. data/lib/active_admin/orm/active_record/comments.rb +23 -23
  166. data/lib/active_admin/orm/active_record/comments/comment.rb +4 -4
  167. data/lib/active_admin/orm/active_record/comments/views.rb +2 -2
  168. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +29 -24
  169. data/lib/active_admin/page.rb +1 -1
  170. data/lib/active_admin/page_dsl.rb +1 -1
  171. data/lib/active_admin/page_presenter.rb +2 -1
  172. data/lib/active_admin/pundit_adapter.rb +22 -9
  173. data/lib/active_admin/resource.rb +34 -20
  174. data/lib/active_admin/resource/action_items.rb +5 -5
  175. data/lib/active_admin/resource/attributes.rb +8 -5
  176. data/lib/active_admin/resource/belongs_to.rb +8 -3
  177. data/lib/active_admin/resource/controllers.rb +1 -1
  178. data/lib/active_admin/resource/menu.rb +5 -5
  179. data/lib/active_admin/resource/model.rb +15 -0
  180. data/lib/active_admin/resource/naming.rb +5 -5
  181. data/lib/active_admin/resource/routes.rb +25 -14
  182. data/lib/active_admin/resource/scope_to.rb +7 -7
  183. data/lib/active_admin/resource/scopes.rb +3 -3
  184. data/lib/active_admin/resource/sidebars.rb +2 -2
  185. data/lib/active_admin/resource_collection.rb +2 -2
  186. data/lib/active_admin/resource_controller.rb +13 -10
  187. data/lib/active_admin/resource_controller/action_builder.rb +10 -0
  188. data/lib/active_admin/resource_controller/data_access.rb +1 -1
  189. data/lib/active_admin/resource_controller/decorators.rb +7 -29
  190. data/lib/active_admin/resource_controller/polymorphic_routes.rb +37 -0
  191. data/lib/active_admin/resource_controller/resource_class_methods.rb +2 -0
  192. data/lib/active_admin/resource_controller/streaming.rb +7 -6
  193. data/lib/active_admin/resource_dsl.rb +11 -9
  194. data/lib/active_admin/router.rb +3 -2
  195. data/lib/active_admin/scope.rb +15 -11
  196. data/lib/active_admin/settings_node.rb +1 -1
  197. data/lib/active_admin/sidebar_section.rb +3 -1
  198. data/lib/active_admin/version.rb +1 -1
  199. data/lib/active_admin/view_factory.rb +17 -17
  200. data/lib/active_admin/view_helpers.rb +1 -1
  201. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +5 -5
  202. data/lib/active_admin/view_helpers/display_helper.rb +16 -7
  203. data/lib/active_admin/view_helpers/download_format_links_helper.rb +2 -1
  204. data/lib/active_admin/view_helpers/fields_for.rb +2 -2
  205. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +2 -0
  206. data/lib/active_admin/views.rb +1 -1
  207. data/lib/active_admin/views/components/active_admin_form.rb +12 -6
  208. data/lib/active_admin/views/components/attributes_table.rb +8 -8
  209. data/lib/active_admin/views/components/blank_slate.rb +1 -1
  210. data/lib/active_admin/views/components/dropdown_menu.rb +8 -8
  211. data/lib/active_admin/views/components/index_list.rb +3 -3
  212. data/lib/active_admin/views/components/menu.rb +1 -1
  213. data/lib/active_admin/views/components/menu_item.rb +4 -4
  214. data/lib/active_admin/views/components/paginated_collection.rb +21 -20
  215. data/lib/active_admin/views/components/panel.rb +1 -1
  216. data/lib/active_admin/views/components/scopes.rb +7 -5
  217. data/lib/active_admin/views/components/sidebar_section.rb +0 -3
  218. data/lib/active_admin/views/components/site_title.rb +1 -1
  219. data/lib/active_admin/views/components/status_tag.rb +13 -26
  220. data/lib/active_admin/views/components/table_for.rb +20 -19
  221. data/lib/active_admin/views/components/tabs.rb +13 -4
  222. data/lib/active_admin/views/footer.rb +3 -2
  223. data/lib/active_admin/views/header.rb +2 -2
  224. data/lib/active_admin/views/index_as_blog.rb +1 -1
  225. data/lib/active_admin/views/index_as_grid.rb +1 -1
  226. data/lib/active_admin/views/index_as_table.rb +27 -19
  227. data/lib/active_admin/views/pages/base.rb +18 -11
  228. data/lib/active_admin/views/pages/index.rb +15 -13
  229. data/lib/active_admin/views/tabbed_navigation.rb +2 -2
  230. data/lib/active_admin/views/title_bar.rb +1 -1
  231. data/lib/activeadmin.rb +1 -1
  232. data/lib/generators/active_admin/assets/assets_generator.rb +2 -2
  233. data/lib/generators/active_admin/assets/templates/active_admin.js +1 -0
  234. data/lib/generators/active_admin/assets/templates/active_admin.scss +2 -2
  235. data/lib/generators/active_admin/devise/devise_generator.rb +5 -5
  236. data/lib/generators/active_admin/install/install_generator.rb +18 -8
  237. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +45 -3
  238. data/lib/generators/active_admin/install/templates/dashboard.rb +2 -3
  239. data/lib/generators/active_admin/install/templates/migrations/create_active_admin_comments.rb.erb +1 -15
  240. data/lib/generators/active_admin/page/page_generator.rb +1 -1
  241. data/lib/generators/active_admin/resource/resource_generator.rb +3 -3
  242. data/lib/generators/active_admin/resource/templates/admin.rb.erb +40 -37
  243. data/lib/generators/active_admin/webpacker/plugins/jquery.js +7 -0
  244. data/lib/generators/active_admin/webpacker/templates/active_admin.js +5 -0
  245. data/lib/generators/active_admin/webpacker/templates/active_admin.scss +17 -0
  246. data/lib/generators/active_admin/webpacker/templates/print.scss +2 -0
  247. data/lib/generators/active_admin/webpacker/webpacker_generator.rb +26 -0
  248. data/lib/ransack_ext.rb +9 -9
  249. data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +80 -0
  250. data/vendor/assets/javascripts/jquery-ui/form.js +22 -0
  251. data/vendor/assets/javascripts/jquery-ui/labels.js +65 -0
  252. data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +274 -283
  253. metadata +108 -127
  254. data/.circleci/config.yml +0 -572
  255. data/.github/ISSUE_TEMPLATE.md +0 -20
  256. data/.gitignore +0 -16
  257. data/.mdlrc +0 -1
  258. data/.rspec +0 -1
  259. data/.rspec_parallel +0 -2
  260. data/.rubocop.yml +0 -99
  261. data/.simplecov +0 -9
  262. data/.yardopts +0 -7
  263. data/Gemfile +0 -30
  264. data/Gemfile.common +0 -26
  265. data/Gemfile.lock +0 -433
  266. data/Rakefile +0 -24
  267. data/activeadmin.gemspec +0 -32
  268. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  269. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  270. data/app/assets/images/active_admin/orderable.png +0 -0
  271. data/app/assets/javascripts/active_admin/base.js.coffee +0 -13
  272. data/app/assets/javascripts/active_admin/ext/jquery-ui.js.coffee +0 -6
  273. data/app/assets/javascripts/active_admin/ext/jquery.js.coffee +0 -7
  274. data/app/assets/javascripts/active_admin/initializers/batch_actions.js.coffee +0 -11
  275. data/app/assets/javascripts/active_admin/initializers/datepicker.js.coffee +0 -14
  276. data/app/assets/javascripts/active_admin/initializers/filters.js.coffee +0 -26
  277. data/app/assets/javascripts/active_admin/initializers/tabs.js.coffee +0 -7
  278. data/app/assets/javascripts/active_admin/lib/batch_actions.js.coffee +0 -42
  279. data/app/assets/javascripts/active_admin/lib/checkbox-toggler.js.coffee +0 -46
  280. data/app/assets/javascripts/active_admin/lib/dropdown-menu.js.coffee +0 -104
  281. data/app/assets/javascripts/active_admin/lib/flash.js.coffee +0 -19
  282. data/app/assets/javascripts/active_admin/lib/has_many.js.coffee +0 -79
  283. data/app/assets/javascripts/active_admin/lib/modal_dialog.js.coffee +0 -45
  284. data/app/assets/javascripts/active_admin/lib/per_page.js.coffee +0 -46
  285. data/app/assets/javascripts/active_admin/lib/table-checkbox-toggler.js.coffee +0 -22
  286. data/bin/install_chromedriver.sh +0 -17
  287. data/config/i18n-tasks.yml +0 -26
  288. data/config/mdl_style.rb +0 -11
  289. data/cucumber.yml +0 -7
  290. data/gemfiles/rails_42.gemfile +0 -10
  291. data/gemfiles/rails_42.gemfile.lock +0 -339
  292. data/gemfiles/rails_50.gemfile +0 -10
  293. data/gemfiles/rails_50.gemfile.lock +0 -353
  294. data/gemfiles/rails_51.gemfile +0 -10
  295. data/gemfiles/rails_51.gemfile.lock +0 -353
  296. data/lib/active_admin/event.rb +0 -24
  297. data/lib/active_admin/helpers/output_safety_helper.rb +0 -35
  298. data/lib/active_admin/reloader.rb +0 -25
  299. data/lib/bug_report_templates/active_admin_master.rb +0 -111
  300. data/lib/generators/active_admin/assets/templates/active_admin.js.coffee +0 -1
  301. data/tasks/application_generator.rb +0 -50
  302. data/tasks/docs.rake +0 -64
  303. data/tasks/gemfiles.rake +0 -8
  304. data/tasks/lint.rake +0 -110
  305. data/tasks/local.rake +0 -27
  306. data/tasks/release.rake +0 -6
  307. 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 question that doesn't belong on the
9
- [mailing list][] or [Stack Overflow][], [search the issue tracker][] to see if
10
- someone else in the community has already created a ticket. If not, go ahead and
11
- [make one][new issue]!
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][] and
16
- create a branch with a descriptive name.
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 and [chromedriver] installed in order to run cucumber
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
- Now you should be able to run the entire suite using:
39
+ Then install javascript dependencies with [Yarn] (requires a current version of [Node.js]):
39
40
 
40
41
  ```sh
41
- bundle exec rake
42
+ bin/yarn install
42
43
  ```
43
44
 
44
- The test run will generate a sample Rails application in `spec/rails` to run 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
- * Removing the `Gemfile.lock` file.
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
- This is not your fault though, so if this happens feel free to investigate, but
56
- also feel free to ping maintainers about the issue you just found.
49
+ ```sh
50
+ bin/yarn build
51
+ ```
57
52
 
58
- If you want to test against a Rails version different from the latest, make sure
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
- export BUNDLE_GEMFILE=gemfiles/rails_51.gemfile
56
+ bin/rake
63
57
  ```
64
58
 
65
- ### Did you find a bug?
59
+ The test run will generate a sample Rails application in `tmp/test_apps` to run the
60
+ tests against.
66
61
 
67
- * **Ensure the bug was not already reported** by [searching all issues][].
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
- * If you're unable to find an open issue addressing the problem,
70
- [open a new one][new issue]. Be sure to include a **title and clear
71
- description**, as much relevant information as possible, and a **code sample**
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
- * If possible, use the relevant bug report templates to create the issue.
76
- Simply copy the content of the appropriate template into a .rb file, make the
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
- ### 5. Implement your fix or feature
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
- ### 6. View your changes in a Rails application
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
- bundle exec rake local server
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 `.test-rails-apps` folder.
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
- bundle exec rake local console
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
- bundle exec rake local db:migrate
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. `bundle exec rake lint` will give you
123
- feedback in this regard. You can check & fix style issues by running each linter
124
- individually. Run `bundle exec rake -T lint` to see the available linters.
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
- CircleCI will run our test suite against all supported Rails versions. We care
148
- about quality, so your PR won't be merged until all tests pass. It's unlikely,
149
- but it's possible that your changes pass tests in one Rails version but fail in
150
- another. In that case, you'll have to setup your development environment (as
151
- explained in step 3) to use the problematic Rails version, and investigate
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
- * Make sure all pull requests are in and that changelog is current
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
- * `bundle exec rake release`
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/articles/interactive-rebase
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
- [![Circle CI ][circle_badge]][circle]
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
- The [contributing guide][contributing]
36
- is a good place to start. If you have questions, feel free to ask.
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
- Subscribe to [Tidelift][tidelift] to support Active Admin and get licensing assurances and timely security notifications.
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][liberapay.com].
52
+ You can also support us with a weekly tip via [Liberapay].
43
53
 
44
- [![Support via Liberapay][liberapay_button]][liberapay_donate]
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
- [circle_badge]: https://circleci.com/gh/activeadmin/activeadmin/tree/master.svg
69
- [circle]: https://circleci.com/gh/activeadmin/activeadmin/tree/master
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
- [liberapay.com]: https://liberapay.com
83
- [liberapay_button]: https://liberapay.com/assets/widgets/donate.svg
84
- [liberapay_donate]: https://liberapay.com/Active-Admin/donate
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
+ });