activeadmin 3.2.4 → 4.0.0.beta1

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 (339) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +2 -69
  3. data/CONTRIBUTING.md +25 -108
  4. data/README.md +19 -32
  5. data/app/assets/config/active_admin_manifest.js +2 -0
  6. data/app/controllers/active_admin/base_controller/menu.rb +39 -0
  7. data/{lib → app/controllers}/active_admin/base_controller.rb +46 -18
  8. data/{lib → app/controllers}/active_admin/page_controller.rb +0 -4
  9. data/{lib → app/controllers}/active_admin/resource_controller/action_builder.rb +1 -1
  10. data/{lib → app/controllers}/active_admin/resource_controller/data_access.rb +2 -2
  11. data/{lib → app/controllers}/active_admin/resource_controller/scoping.rb +1 -1
  12. data/{lib → app/controllers}/active_admin/resource_controller/streaming.rb +2 -2
  13. data/app/controllers/active_admin/resource_controller.rb +102 -0
  14. data/app/helpers/active_admin/auto_link_helper.rb +66 -0
  15. data/app/helpers/active_admin/breadcrumb_helper.rb +41 -0
  16. data/app/helpers/active_admin/display_helper.rb +117 -0
  17. data/app/helpers/active_admin/form_helper.rb +95 -0
  18. data/app/helpers/active_admin/index_helper.rb +40 -0
  19. data/app/helpers/active_admin/layout_helper.rb +63 -0
  20. data/app/javascript/active_admin/features/batch_actions.js +89 -0
  21. data/app/javascript/active_admin/features/dark_mode_toggle.js +37 -0
  22. data/app/javascript/active_admin/features/filters.js +34 -0
  23. data/app/javascript/active_admin/features/has_many.js +28 -0
  24. data/app/javascript/active_admin/features/main_menu.js +12 -0
  25. data/app/javascript/active_admin/features/per_page.js +9 -0
  26. data/app/javascript/active_admin/utils/dom.js +17 -0
  27. data/app/javascript/active_admin.js +10 -0
  28. data/app/views/active_admin/_flash_messages.html.erb +22 -0
  29. data/app/views/active_admin/_html_head.html.erb +13 -0
  30. data/app/views/active_admin/_main_navigation.html.erb +28 -0
  31. data/app/views/active_admin/_page_header.html.erb +27 -0
  32. data/app/views/active_admin/_sidebar.html.erb +5 -0
  33. data/app/views/active_admin/_site_footer.html.erb +7 -0
  34. data/app/views/active_admin/_site_header.html.erb +30 -0
  35. data/app/views/active_admin/devise/confirmations/new.html.erb +5 -3
  36. data/app/views/active_admin/devise/passwords/edit.html.erb +5 -3
  37. data/app/views/active_admin/devise/passwords/new.html.erb +5 -4
  38. data/app/views/active_admin/devise/registrations/new.html.erb +6 -4
  39. data/app/views/active_admin/devise/sessions/new.html.erb +6 -4
  40. data/app/views/active_admin/devise/shared/_links.erb +3 -1
  41. data/app/views/active_admin/devise/unlocks/new.html.erb +6 -4
  42. data/app/views/{kaminari/active_admin_countless → active_admin/kaminari}/_gap.html.erb +3 -1
  43. data/app/views/active_admin/kaminari/_next_page.html.erb +16 -0
  44. data/app/views/active_admin/kaminari/_page.html.erb +14 -0
  45. data/app/views/{kaminari/active_admin_countless → active_admin/kaminari}/_paginator.html.erb +1 -2
  46. data/app/views/active_admin/kaminari/_prev_page.html.erb +16 -0
  47. data/app/views/active_admin/page/index.html.arb +5 -1
  48. data/app/views/active_admin/resource/_active_filters.html.erb +32 -0
  49. data/app/views/active_admin/resource/_batch_actions_dropdown.html.erb +19 -0
  50. data/app/views/active_admin/resource/_form.html.arb +16 -0
  51. data/app/views/active_admin/resource/_form_default.html.arb +12 -0
  52. data/app/views/active_admin/resource/_index_as_table_default.html.arb +9 -0
  53. data/app/views/active_admin/resource/_index_blank_slate.html.erb +14 -0
  54. data/app/views/active_admin/resource/_index_empty_results.html.erb +5 -0
  55. data/app/views/active_admin/resource/_index_table_actions_default.html.erb +9 -0
  56. data/app/views/active_admin/resource/_show_default.html.arb +3 -0
  57. data/app/views/active_admin/resource/edit.html.arb +1 -1
  58. data/app/views/active_admin/resource/index.html.arb +94 -1
  59. data/app/views/active_admin/resource/new.html.arb +1 -1
  60. data/app/views/active_admin/resource/show.html.arb +12 -1
  61. data/app/views/active_admin/shared/_action_items.html.erb +3 -0
  62. data/app/views/active_admin/shared/_download_format_links.html.erb +7 -0
  63. data/app/views/active_admin/shared/_resource_comments.html.erb +51 -0
  64. data/app/views/active_admin/shared/_sidebar_section.html.arb +7 -0
  65. data/app/views/active_admin/shared/_sidebar_sections.html.erb +5 -0
  66. data/app/views/layouts/active_admin.html.erb +20 -0
  67. data/app/views/layouts/active_admin_logged_out.html.erb +8 -45
  68. data/config/locales/ar.yml +0 -16
  69. data/config/locales/az.yml +0 -16
  70. data/config/locales/bg.yml +0 -9
  71. data/config/locales/bs.yml +0 -7
  72. data/config/locales/ca.yml +0 -9
  73. data/config/locales/cs.yml +0 -9
  74. data/config/locales/da.yml +0 -16
  75. data/config/locales/de-CH.yml +0 -10
  76. data/config/locales/de.yml +0 -16
  77. data/config/locales/el.yml +0 -13
  78. data/config/locales/en-CA.yml +0 -16
  79. data/config/locales/en-GB.yml +0 -16
  80. data/config/locales/en.yml +18 -28
  81. data/config/locales/eo.yml +0 -17
  82. data/config/locales/es-MX.yml +0 -9
  83. data/config/locales/es.yml +0 -16
  84. data/config/locales/fa.yml +0 -9
  85. data/config/locales/fi.yml +0 -9
  86. data/config/locales/fr.yml +32 -26
  87. data/config/locales/he.yml +0 -16
  88. data/config/locales/hr.yml +0 -9
  89. data/config/locales/hu.yml +0 -6
  90. data/config/locales/id.yml +0 -16
  91. data/config/locales/it.yml +0 -16
  92. data/config/locales/ja.yml +0 -16
  93. data/config/locales/ko.yml +0 -9
  94. data/config/locales/lt.yml +0 -16
  95. data/config/locales/lv.yml +0 -6
  96. data/config/locales/mk.yml +0 -15
  97. data/config/locales/nb.yml +0 -12
  98. data/config/locales/nl.yml +21 -29
  99. data/config/locales/pl.yml +0 -16
  100. data/config/locales/pt-BR.yml +0 -16
  101. data/config/locales/pt-PT.yml +0 -6
  102. data/config/locales/ro.yml +0 -6
  103. data/config/locales/ru.yml +0 -16
  104. data/config/locales/sk.yml +0 -16
  105. data/config/locales/sv-SE.yml +0 -16
  106. data/config/locales/tr.yml +0 -16
  107. data/config/locales/uk.yml +0 -16
  108. data/config/locales/vi.yml +0 -16
  109. data/config/locales/zh-CN.yml +0 -16
  110. data/config/locales/zh-TW.yml +0 -16
  111. data/lib/active_admin/application.rb +1 -9
  112. data/lib/active_admin/batch_actions/controller.rb +1 -4
  113. data/lib/active_admin/batch_actions/resource_extension.rb +6 -13
  114. data/lib/active_admin/batch_actions/views/batch_action_form.rb +0 -6
  115. data/lib/active_admin/batch_actions/views/selection_cells.rb +2 -2
  116. data/lib/active_admin/batch_actions.rb +0 -5
  117. data/lib/active_admin/callbacks.rb +6 -4
  118. data/lib/active_admin/component.rb +0 -1
  119. data/lib/active_admin/csv_builder.rb +1 -1
  120. data/lib/active_admin/devise.rb +3 -3
  121. data/lib/active_admin/dsl.rb +2 -2
  122. data/lib/active_admin/dynamic_settings_node.rb +4 -4
  123. data/lib/active_admin/engine.rb +19 -6
  124. data/lib/active_admin/filters/active.rb +6 -4
  125. data/lib/active_admin/filters/active_filter.rb +1 -3
  126. data/lib/active_admin/filters/forms.rb +1 -42
  127. data/lib/active_admin/filters/resource_extension.rb +17 -9
  128. data/lib/active_admin/filters.rb +0 -2
  129. data/lib/active_admin/form_builder.rb +15 -14
  130. data/lib/active_admin/inputs/filters/base/search_method_select.rb +8 -10
  131. data/lib/active_admin/inputs/filters/base.rb +1 -1
  132. data/lib/active_admin/inputs/filters/check_boxes_input.rb +1 -6
  133. data/lib/active_admin/inputs/filters/date_range_input.rb +4 -2
  134. data/lib/active_admin/inputs.rb +0 -3
  135. data/lib/active_admin/menu.rb +10 -7
  136. data/lib/active_admin/menu_collection.rb +1 -1
  137. data/lib/active_admin/menu_item.rb +24 -3
  138. data/lib/active_admin/namespace.rb +2 -44
  139. data/lib/active_admin/namespace_settings.rb +2 -35
  140. data/lib/active_admin/order_clause.rb +4 -1
  141. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +3 -75
  142. data/lib/active_admin/orm/active_record/comments.rb +10 -5
  143. data/lib/active_admin/pundit_adapter.rb +1 -1
  144. data/lib/active_admin/resource/action_items.rb +15 -20
  145. data/lib/active_admin/resource/attributes.rb +1 -8
  146. data/lib/active_admin/resource/naming.rb +1 -2
  147. data/lib/active_admin/resource.rb +1 -0
  148. data/lib/active_admin/resource_dsl.rb +1 -1
  149. data/lib/active_admin/scope.rb +1 -1
  150. data/lib/active_admin/settings_node.rb +1 -1
  151. data/lib/active_admin/sidebar_section.rb +0 -5
  152. data/lib/active_admin/version.rb +1 -1
  153. data/lib/active_admin/view_helpers.rb +0 -12
  154. data/lib/active_admin/views/components/active_admin_form.rb +21 -29
  155. data/lib/active_admin/views/components/attributes_table.rb +4 -12
  156. data/lib/active_admin/views/components/index_list.rb +10 -23
  157. data/lib/active_admin/views/components/paginated_collection.rb +34 -39
  158. data/lib/active_admin/views/components/panel.rb +2 -10
  159. data/lib/active_admin/views/components/scopes.rb +12 -21
  160. data/lib/active_admin/views/components/status_tag.rb +22 -19
  161. data/lib/active_admin/views/components/table_for.rb +19 -24
  162. data/lib/active_admin/views/components/tabs.rb +10 -11
  163. data/lib/active_admin/views/index_as_table.rb +24 -97
  164. data/lib/active_admin.rb +7 -11
  165. data/lib/generators/active_admin/assets/assets_generator.rb +4 -4
  166. data/lib/generators/active_admin/assets/templates/active_admin.css +3 -0
  167. data/lib/generators/active_admin/assets/templates/tailwind.config.js +18 -0
  168. data/lib/generators/active_admin/install/install_generator.rb +2 -8
  169. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +10 -87
  170. data/lib/generators/active_admin/install/templates/dashboard.rb +8 -25
  171. data/lib/generators/active_admin/page/page_generator.rb +0 -1
  172. data/lib/generators/active_admin/resource/resource_generator.rb +46 -7
  173. data/lib/generators/active_admin/resource/templates/resource.rb.erb +42 -0
  174. data/lib/generators/active_admin/views_generator.rb +18 -0
  175. metadata +67 -214
  176. data/app/assets/javascripts/active_admin/base.js +0 -521
  177. data/app/assets/stylesheets/active_admin/_base.scss +0 -57
  178. data/app/assets/stylesheets/active_admin/_forms.scss +0 -315
  179. data/app/assets/stylesheets/active_admin/_header.scss +0 -188
  180. data/app/assets/stylesheets/active_admin/_mixins.scss +0 -1
  181. data/app/assets/stylesheets/active_admin/_normalize.scss +0 -349
  182. data/app/assets/stylesheets/active_admin/_print.scss +0 -287
  183. data/app/assets/stylesheets/active_admin/_typography.scss +0 -100
  184. data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +0 -6
  185. data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +0 -30
  186. data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +0 -20
  187. data/app/assets/stylesheets/active_admin/components/_buttons.scss +0 -6
  188. data/app/assets/stylesheets/active_admin/components/_columns.scss +0 -3
  189. data/app/assets/stylesheets/active_admin/components/_comments.scss +0 -41
  190. data/app/assets/stylesheets/active_admin/components/_date_picker.scss +0 -148
  191. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +0 -154
  192. data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +0 -37
  193. data/app/assets/stylesheets/active_admin/components/_grid.scss +0 -9
  194. data/app/assets/stylesheets/active_admin/components/_index_list.scss +0 -12
  195. data/app/assets/stylesheets/active_admin/components/_links.scss +0 -5
  196. data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +0 -34
  197. data/app/assets/stylesheets/active_admin/components/_pagination.scss +0 -58
  198. data/app/assets/stylesheets/active_admin/components/_panels.scss +0 -6
  199. data/app/assets/stylesheets/active_admin/components/_scopes.scss +0 -13
  200. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +0 -12
  201. data/app/assets/stylesheets/active_admin/components/_table_tools.scss +0 -70
  202. data/app/assets/stylesheets/active_admin/components/_tables.scss +0 -112
  203. data/app/assets/stylesheets/active_admin/components/_tabs.scss +0 -68
  204. data/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +0 -16
  205. data/app/assets/stylesheets/active_admin/mixins/_all.scss +0 -8
  206. data/app/assets/stylesheets/active_admin/mixins/_buttons.scss +0 -65
  207. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +0 -28
  208. data/app/assets/stylesheets/active_admin/mixins/_rounded.scss +0 -22
  209. data/app/assets/stylesheets/active_admin/mixins/_sections.scss +0 -41
  210. data/app/assets/stylesheets/active_admin/mixins/_shadows.scss +0 -15
  211. data/app/assets/stylesheets/active_admin/mixins/_typography.scss +0 -3
  212. data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +0 -17
  213. data/app/assets/stylesheets/active_admin/mixins/_variables.scss +0 -51
  214. data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +0 -44
  215. data/app/assets/stylesheets/active_admin/structure/_footer.scss +0 -19
  216. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +0 -29
  217. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +0 -43
  218. data/app/javascript/active_admin/base.js +0 -28
  219. data/app/javascript/active_admin/ext/jquery-ui.js +0 -7
  220. data/app/javascript/active_admin/ext/jquery.js +0 -9
  221. data/app/javascript/active_admin/initializers/batch-actions.js +0 -61
  222. data/app/javascript/active_admin/initializers/checkbox-toggler.js +0 -3
  223. data/app/javascript/active_admin/initializers/datepicker.js +0 -16
  224. data/app/javascript/active_admin/initializers/dropdown-menu.js +0 -9
  225. data/app/javascript/active_admin/initializers/filters.js +0 -10
  226. data/app/javascript/active_admin/initializers/has-many.js +0 -98
  227. data/app/javascript/active_admin/initializers/per-page.js +0 -13
  228. data/app/javascript/active_admin/initializers/table-checkbox-toggler.js +0 -3
  229. data/app/javascript/active_admin/initializers/tabs.js +0 -6
  230. data/app/javascript/active_admin/lib/checkbox-toggler.js +0 -49
  231. data/app/javascript/active_admin/lib/dropdown-menu.js +0 -116
  232. data/app/javascript/active_admin/lib/filters.js +0 -39
  233. data/app/javascript/active_admin/lib/modal-dialog.js +0 -63
  234. data/app/javascript/active_admin/lib/per-page.js +0 -38
  235. data/app/javascript/active_admin/lib/table-checkbox-toggler.js +0 -38
  236. data/app/javascript/active_admin/lib/utils.js +0 -40
  237. data/app/views/kaminari/active_admin/_first_page.html.erb +0 -11
  238. data/app/views/kaminari/active_admin/_gap.html.erb +0 -8
  239. data/app/views/kaminari/active_admin/_last_page.html.erb +0 -11
  240. data/app/views/kaminari/active_admin/_next_page.html.erb +0 -11
  241. data/app/views/kaminari/active_admin/_page.html.erb +0 -12
  242. data/app/views/kaminari/active_admin/_paginator.html.erb +0 -25
  243. data/app/views/kaminari/active_admin/_prev_page.html.erb +0 -11
  244. data/app/views/kaminari/active_admin_countless/_first_page.html.erb +0 -11
  245. data/app/views/kaminari/active_admin_countless/_next_page.html.erb +0 -11
  246. data/app/views/kaminari/active_admin_countless/_page.html.erb +0 -12
  247. data/app/views/kaminari/active_admin_countless/_prev_page.html.erb +0 -11
  248. data/app/views/layouts/active_admin.html.arb +0 -2
  249. data/lib/active_admin/abstract_view_factory.rb +0 -48
  250. data/lib/active_admin/asset_registration.rb +0 -30
  251. data/lib/active_admin/base_controller/menu.rb +0 -35
  252. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +0 -59
  253. data/lib/active_admin/filters/active_sidebar.rb +0 -28
  254. data/lib/active_admin/generators/boilerplate.rb +0 -54
  255. data/lib/active_admin/helpers/collection.rb +0 -21
  256. data/lib/active_admin/helpers/i18n.rb +0 -8
  257. data/lib/active_admin/inputs/datepicker_input.rb +0 -28
  258. data/lib/active_admin/inputs/filters/date_picker_input.rb +0 -14
  259. data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +0 -24
  260. data/lib/active_admin/orm/mongoid.rb +0 -2
  261. data/lib/active_admin/resource_controller/sidebars.rb +0 -19
  262. data/lib/active_admin/resource_controller.rb +0 -68
  263. data/lib/active_admin/view_factory.rb +0 -28
  264. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +0 -13
  265. data/lib/active_admin/view_helpers/auto_link_helper.rb +0 -46
  266. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +0 -34
  267. data/lib/active_admin/view_helpers/display_helper.rb +0 -119
  268. data/lib/active_admin/view_helpers/download_format_links_helper.rb +0 -60
  269. data/lib/active_admin/view_helpers/fields_for.rb +0 -51
  270. data/lib/active_admin/view_helpers/flash_helper.rb +0 -15
  271. data/lib/active_admin/view_helpers/form_helper.rb +0 -21
  272. data/lib/active_admin/view_helpers/scope_name_helper.rb +0 -17
  273. data/lib/active_admin/view_helpers/sidebar_helper.rb +0 -16
  274. data/lib/active_admin/view_helpers/title_helper.rb +0 -12
  275. data/lib/active_admin/view_helpers/view_factory_helper.rb +0 -12
  276. data/lib/active_admin/views/action_items.rb +0 -18
  277. data/lib/active_admin/views/components/active_filters_sidebar_content.rb +0 -59
  278. data/lib/active_admin/views/components/blank_slate.rb +0 -18
  279. data/lib/active_admin/views/components/columns.rb +0 -162
  280. data/lib/active_admin/views/components/dropdown_menu.rb +0 -69
  281. data/lib/active_admin/views/components/menu.rb +0 -33
  282. data/lib/active_admin/views/components/menu_item.rb +0 -59
  283. data/lib/active_admin/views/components/sidebar.rb +0 -14
  284. data/lib/active_admin/views/components/sidebar_section.rb +0 -35
  285. data/lib/active_admin/views/components/site_title.rb +0 -55
  286. data/lib/active_admin/views/components/unsupported_browser.rb +0 -12
  287. data/lib/active_admin/views/footer.rb +0 -32
  288. data/lib/active_admin/views/header.rb +0 -20
  289. data/lib/active_admin/views/index_as_block.rb +0 -37
  290. data/lib/active_admin/views/index_as_blog.rb +0 -156
  291. data/lib/active_admin/views/index_as_grid.rb +0 -81
  292. data/lib/active_admin/views/pages/base.rb +0 -134
  293. data/lib/active_admin/views/pages/form.rb +0 -65
  294. data/lib/active_admin/views/pages/index.rb +0 -166
  295. data/lib/active_admin/views/pages/layout.rb +0 -27
  296. data/lib/active_admin/views/pages/page.rb +0 -31
  297. data/lib/active_admin/views/pages/show.rb +0 -60
  298. data/lib/active_admin/views/tabbed_navigation.rb +0 -12
  299. data/lib/active_admin/views/title_bar.rb +0 -56
  300. data/lib/generators/active_admin/assets/templates/active_admin.js +0 -1
  301. data/lib/generators/active_admin/assets/templates/active_admin.scss +0 -17
  302. data/lib/generators/active_admin/resource/templates/admin.rb.erb +0 -46
  303. data/lib/generators/active_admin/webpacker/plugins/jquery.js +0 -7
  304. data/lib/generators/active_admin/webpacker/templates/active_admin.js +0 -5
  305. data/lib/generators/active_admin/webpacker/templates/active_admin.scss +0 -17
  306. data/lib/generators/active_admin/webpacker/templates/print.scss +0 -2
  307. data/lib/generators/active_admin/webpacker/webpacker_generator.rb +0 -27
  308. data/vendor/assets/javascripts/jquery-ui/data.js +0 -45
  309. data/vendor/assets/javascripts/jquery-ui/disable-selection.js +0 -51
  310. data/vendor/assets/javascripts/jquery-ui/focusable.js +0 -89
  311. data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +0 -83
  312. data/vendor/assets/javascripts/jquery-ui/form.js +0 -25
  313. data/vendor/assets/javascripts/jquery-ui/ie.js +0 -20
  314. data/vendor/assets/javascripts/jquery-ui/keycode.js +0 -51
  315. data/vendor/assets/javascripts/jquery-ui/labels.js +0 -71
  316. data/vendor/assets/javascripts/jquery-ui/plugin.js +0 -49
  317. data/vendor/assets/javascripts/jquery-ui/position.js +0 -513
  318. data/vendor/assets/javascripts/jquery-ui/safe-active-element.js +0 -46
  319. data/vendor/assets/javascripts/jquery-ui/safe-blur.js +0 -27
  320. data/vendor/assets/javascripts/jquery-ui/scroll-parent.js +0 -50
  321. data/vendor/assets/javascripts/jquery-ui/tabbable.js +0 -41
  322. data/vendor/assets/javascripts/jquery-ui/unique-id.js +0 -54
  323. data/vendor/assets/javascripts/jquery-ui/version.js +0 -20
  324. data/vendor/assets/javascripts/jquery-ui/widget.js +0 -758
  325. data/vendor/assets/javascripts/jquery-ui/widgets/button.js +0 -454
  326. data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +0 -294
  327. data/vendor/assets/javascripts/jquery-ui/widgets/controlgroup.js +0 -304
  328. data/vendor/assets/javascripts/jquery-ui/widgets/datepicker.js +0 -2243
  329. data/vendor/assets/javascripts/jquery-ui/widgets/dialog.js +0 -971
  330. data/vendor/assets/javascripts/jquery-ui/widgets/draggable.js +0 -1268
  331. data/vendor/assets/javascripts/jquery-ui/widgets/mouse.js +0 -241
  332. data/vendor/assets/javascripts/jquery-ui/widgets/resizable.js +0 -1228
  333. data/vendor/assets/javascripts/jquery-ui/widgets/sortable.js +0 -1622
  334. data/vendor/assets/javascripts/jquery-ui/widgets/tabs.js +0 -931
  335. /data/{lib → app/controllers}/active_admin/base_controller/authorization.rb +0 -0
  336. /data/{lib → app/controllers}/active_admin/resource_controller/decorators.rb +0 -0
  337. /data/{lib → app/controllers}/active_admin/resource_controller/polymorphic_routes.rb +0 -0
  338. /data/{lib → app/controllers}/active_admin/resource_controller/resource_class_methods.rb +0 -0
  339. /data/lib/{active_admin/orm/mongoid/.gitkeep → generators/active_admin/assets/templates/builds/.keep} +0 -0
@@ -0,0 +1,102 @@
1
+ # frozen_string_literal: true
2
+ require "active_admin/collection_decorator"
3
+
4
+ module ActiveAdmin
5
+ # All Resources Controller inherits from this controller.
6
+ # It implements actions and helpers for resources.
7
+ class ResourceController < BaseController
8
+ respond_to :html, :xml, :json
9
+ respond_to :csv, only: :index
10
+
11
+ before_action :restrict_download_format_access!, only: [:index, :show]
12
+
13
+ include ResourceController::ActionBuilder
14
+ include ResourceController::Decorators
15
+ include ResourceController::DataAccess
16
+ include ResourceController::PolymorphicRoutes
17
+ include ResourceController::Scoping
18
+ include ResourceController::Streaming
19
+ extend ResourceClassMethods
20
+
21
+ def self.active_admin_config=(config)
22
+ if @active_admin_config = config
23
+ defaults resource_class: config.resource_class,
24
+ route_prefix: config.route_prefix,
25
+ instance_name: config.resource_name.singular
26
+ end
27
+ end
28
+
29
+ # Inherited Resources uses the `self.inherited(base)` hook to add
30
+ # in `self.resource_class`. To override it, we need to install
31
+ # our resource_class method each time we're inherited from.
32
+ def self.inherited(base)
33
+ super(base)
34
+ base.override_resource_class_methods!
35
+ end
36
+
37
+ private
38
+
39
+ def page_presenter
40
+ case params[:action].to_sym
41
+ when :index
42
+ active_admin_config.get_page_presenter(params[:action], params[:as])
43
+ when :new, :edit
44
+ active_admin_config.get_page_presenter(:form)
45
+ end || super
46
+ end
47
+
48
+ def default_page_presenter
49
+ case params[:action].to_sym
50
+ when :index
51
+ PagePresenter.new(as: :table)
52
+ when :new, :edit
53
+ PagePresenter.new
54
+ end || super
55
+ end
56
+
57
+ def page_title
58
+ if page_presenter[:title]
59
+ case params[:action].to_sym
60
+ when :index
61
+ case page_presenter[:title]
62
+ when Symbol, Proc
63
+ instance_exec(&page_presenter[:title])
64
+ else
65
+ page_presenter[:title]
66
+ end
67
+ else
68
+ helpers.render_or_call_method_or_proc_on(resource, page_presenter[:title])
69
+ end
70
+ else
71
+ default_page_title
72
+ end
73
+ end
74
+
75
+ def default_page_title
76
+ case params[:action].to_sym
77
+ when :index
78
+ active_admin_config.plural_resource_label
79
+ when :show
80
+ helpers.display_name(resource)
81
+ when :new, :edit, :create, :update
82
+ normalized_action = params[:action]
83
+ normalized_action = 'new' if normalized_action == 'create'
84
+ normalized_action = 'edit' if normalized_action == 'update'
85
+
86
+ ActiveAdmin::Localizers.resource(active_admin_config).t("#{normalized_action}_model")
87
+ else
88
+ I18n.t("active_admin.#{params[:action]}", default: params[:action].to_s.titleize)
89
+ end
90
+ end
91
+
92
+ def restrict_download_format_access!
93
+ unless request.format.html?
94
+ presenter = active_admin_config.get_page_presenter(:index)
95
+ download_formats = (presenter || {}).fetch(:download_links, active_admin_config.namespace.download_links)
96
+ unless build_download_formats(download_formats).include?(request.format.symbol)
97
+ raise ActiveAdmin::AccessDenied.new(current_active_admin_user, :index)
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+ module ActiveAdmin
3
+ module AutoLinkHelper
4
+ # Automatically links objects to their resource controllers. If
5
+ # the resource has not been registered, a string representation of
6
+ # the object is returned.
7
+ #
8
+ # The default content in the link is returned from ActiveAdmin::DisplayHelper#display_name
9
+ #
10
+ # You can pass in the content to display
11
+ # eg: auto_link(@post, "My Link")
12
+ #
13
+ def auto_link(resource, content = display_name(resource), **html_options)
14
+ if url = auto_url_for(resource)
15
+ link_to content, url, html_options
16
+ else
17
+ content
18
+ end
19
+ end
20
+
21
+ # Like `auto_link`, except that it only returns a URL for the resource
22
+ def auto_url_for(resource)
23
+ config = active_admin_resource_for(resource.class)
24
+ return unless config
25
+
26
+ if config.controller.action_methods.include?("show") &&
27
+ authorized?(ActiveAdmin::Auth::READ, resource)
28
+ url_for config.route_instance_path resource, url_options
29
+ elsif config.controller.action_methods.include?("edit") &&
30
+ authorized?(ActiveAdmin::Auth::EDIT, resource)
31
+ url_for config.route_edit_instance_path resource, url_options
32
+ end
33
+ end
34
+
35
+ def new_action_authorized?(resource_or_class)
36
+ controller.action_methods.include?("new") && authorized?(ActiveAdmin::Auth::NEW, resource_or_class)
37
+ end
38
+
39
+ def show_action_authorized?(resource_or_class)
40
+ controller.action_methods.include?("show") && authorized?(ActiveAdmin::Auth::READ, resource_or_class)
41
+ end
42
+
43
+ def edit_action_authorized?(resource_or_class)
44
+ controller.action_methods.include?("edit") && authorized?(ActiveAdmin::Auth::EDIT, resource_or_class)
45
+ end
46
+
47
+ def destroy_action_authorized?(resource_or_class)
48
+ controller.action_methods.include?("destroy") && authorized?(ActiveAdmin::Auth::DESTROY, resource_or_class)
49
+ end
50
+
51
+ def auto_logout_link_path
52
+ render_or_call_method_or_proc_on(self, active_admin_namespace.logout_link_path)
53
+ end
54
+
55
+ private
56
+
57
+ # Returns the ActiveAdmin::Resource instance for a class
58
+ # While `active_admin_namespace` is a helper method, this method seems
59
+ # to exist to otherwise resolve failed component specs using mock_action_view.
60
+ def active_admin_resource_for(klass)
61
+ if respond_to? :active_admin_namespace
62
+ active_admin_namespace.resource_for klass
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+ module ActiveAdmin
3
+ module BreadcrumbHelper
4
+ ID_FORMAT_REGEXP = /\A(\d+|[a-f0-9]{24}|(?:[a-f0-9]{8}-(?:[a-f0-9]{4}-){3}[a-f0-9]{12}))\z/.freeze
5
+
6
+ # Returns an array of links to use in a breadcrumb
7
+ def build_breadcrumb_links(path = request.path, html_options = {})
8
+ config = active_admin_config.breadcrumb
9
+ if config.is_a?(Proc)
10
+ instance_exec(controller, &config)
11
+ elsif config.present?
12
+ default_breadcrumb_links(path, html_options)
13
+ end
14
+ end
15
+
16
+ def default_breadcrumb_links(path, html_options = {})
17
+ # remove leading "/" and split up the URL
18
+ # and remove last since it's used as the page title
19
+ parts = path.split("/").select(&:present?)[0..-2]
20
+
21
+ parts.each_with_index.map do |part, index|
22
+ # 1. try using `display_name` if we can locate a DB object
23
+ # 2. try using the model name translation
24
+ # 3. default to calling `titlecase` on the URL fragment
25
+ if ID_FORMAT_REGEXP.match?(part) && parts[index - 1]
26
+ parent = active_admin_config.belongs_to_config.try :target
27
+ config = parent && parent.resource_name.route_key == parts[index - 1] ? parent : active_admin_config
28
+ name = display_name config.find_resource part
29
+ end
30
+ name ||= I18n.t "activerecord.models.#{part.singularize}", count: 2.1, default: part.titlecase
31
+
32
+ # Don't create a link if the resource's show action is disabled
33
+ if !config || config.defined_actions.include?(:show)
34
+ link_to name, "/" + parts[0..index].join("/"), html_options
35
+ else
36
+ name
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,117 @@
1
+ # frozen_string_literal: true
2
+ module ActiveAdmin
3
+ module DisplayHelper
4
+ DISPLAY_NAME_FALLBACK = -> {
5
+ klass = self.class
6
+ name = if klass.respond_to?(:model_name)
7
+ if klass.respond_to?(:primary_key)
8
+ "#{klass.model_name.human} ##{send(klass.primary_key)}"
9
+ else
10
+ klass.model_name.human
11
+ end
12
+ elsif klass.respond_to?(:primary_key)
13
+ " ##{send(klass.primary_key)}"
14
+ end
15
+ name.present? ? name : to_s
16
+ }
17
+
18
+ def DISPLAY_NAME_FALLBACK.inspect
19
+ "DISPLAY_NAME_FALLBACK"
20
+ end
21
+
22
+ # Attempts to call any known display name methods on the resource.
23
+ # See the setting in `application.rb` for the list of methods and their priority.
24
+ def display_name(resource)
25
+ unless resource.nil?
26
+ result = render_in_context(resource, display_name_method_for(resource))
27
+ if result.to_s&.strip&.present?
28
+ ERB::Util.html_escape(result)
29
+ else
30
+ ERB::Util.html_escape(render_in_context(resource, DISPLAY_NAME_FALLBACK))
31
+ end
32
+ end
33
+ end
34
+
35
+ def format_attribute(resource, attr)
36
+ value = find_value resource, attr
37
+
38
+ if value.is_a?(Arbre::Element)
39
+ value
40
+ elsif boolean_attr?(resource, attr, value)
41
+ Arbre::Context.new { status_tag value }
42
+ else
43
+ pretty_format value
44
+ end
45
+ end
46
+
47
+ # Attempts to create a human-readable string for any object
48
+ def pretty_format(object)
49
+ case object
50
+ when String, Numeric, Symbol, Arbre::Element
51
+ object.to_s
52
+ when Date, Time
53
+ I18n.localize object, format: active_admin_application.localize_format
54
+ when Array
55
+ format_collection(object)
56
+ else
57
+ if defined?(::ActiveRecord) && object.is_a?(ActiveRecord::Base) ||
58
+ defined?(::Mongoid) && object.class.include?(Mongoid::Document)
59
+ auto_link object
60
+ elsif defined?(::ActiveRecord) && object.is_a?(ActiveRecord::Relation)
61
+ format_collection(object)
62
+ else
63
+ display_name object
64
+ end
65
+ end
66
+ end
67
+
68
+ private
69
+
70
+ # Looks up and caches the first available display name method.
71
+ # To prevent conflicts, we exclude any methods that happen to be associations.
72
+ # If no methods are available and we're about to use the Kernel's `to_s`, provide our own.
73
+ def display_name_method_for(resource)
74
+ @@display_name_methods_cache ||= {}
75
+ @@display_name_methods_cache[resource.class] ||= begin
76
+ methods = active_admin_application.display_name_methods - association_methods_for(resource)
77
+ method = methods.detect { |method| resource.respond_to? method }
78
+
79
+ if method != :to_s || resource.method(method).source_location
80
+ method
81
+ else
82
+ DISPLAY_NAME_FALLBACK
83
+ end
84
+ end
85
+ end
86
+
87
+ def association_methods_for(resource)
88
+ return [] unless resource.class.respond_to? :reflect_on_all_associations
89
+ resource.class.reflect_on_all_associations.map(&:name)
90
+ end
91
+
92
+ def find_value(resource, attr)
93
+ if attr.is_a? Proc
94
+ attr.call resource
95
+ elsif resource.respond_to? attr
96
+ resource.public_send attr
97
+ elsif resource.respond_to? :[]
98
+ resource[attr]
99
+ end
100
+ end
101
+
102
+ def format_collection(collection)
103
+ safe_join(collection.map { |item| pretty_format(item) }, ", ")
104
+ end
105
+
106
+ def boolean_attr?(resource, attr, value)
107
+ case value
108
+ when TrueClass, FalseClass
109
+ true
110
+ else
111
+ if resource.class.respond_to? :columns_hash
112
+ column = resource.class.columns_hash[attr.to_s] and column.type == :boolean
113
+ end
114
+ end
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,95 @@
1
+ # frozen_string_literal: true
2
+ module ActiveAdmin
3
+ module FormHelper
4
+ RESERVED_PARAMS = %w(controller action commit utf8).freeze
5
+
6
+ def active_admin_form_for(resource, options = {}, &block)
7
+ Arbre::Context.new({}, self) do
8
+ active_admin_form_for resource, options, &block
9
+ end.content
10
+ end
11
+
12
+ def hidden_field_tags_for(params, options = {})
13
+ fields_for_params(params.to_unsafe_hash, options).map do |kv|
14
+ k, v = kv.first
15
+ hidden_field_tag k, v, id: sanitize_to_id("hidden_active_admin_#{k}")
16
+ end.join("\n").html_safe
17
+ end
18
+
19
+ # Flatten a params Hash to an array of fields.
20
+ #
21
+ # @param params [Hash]
22
+ # @param options [Hash] :namespace and :except
23
+ #
24
+ # @return [Array] of [Hash] with one element.
25
+ #
26
+ # @example
27
+ # fields_for_params(scope: "all", users: ["greg"])
28
+ # => [ {"scope" => "all"} , {"users[]" => "greg"} ]
29
+ #
30
+ def fields_for_params(params, options = {})
31
+ namespace = options[:namespace]
32
+ except = Array.wrap(options[:except]).map &:to_s
33
+
34
+ params.flat_map do |k, v|
35
+ next if namespace.nil? && RESERVED_PARAMS.include?(k.to_s)
36
+ next if except.include?(k.to_s)
37
+
38
+ if namespace
39
+ k = "#{namespace}[#{k}]"
40
+ end
41
+
42
+ case v
43
+ when String, TrueClass, FalseClass
44
+ { k => v }
45
+ when Symbol
46
+ { k => v.to_s }
47
+ when Hash
48
+ fields_for_params(v, namespace: k)
49
+ when Array
50
+ v.map do |v|
51
+ { "#{k}[]" => v }
52
+ end
53
+ when nil
54
+ { k => "" }
55
+ else
56
+ raise TypeError, "Cannot convert #{v.class} value: #{v.inspect}"
57
+ end
58
+ end.compact
59
+ end
60
+
61
+ # Helper method to render a filter form
62
+ def active_admin_filters_form_for(search, filters, options = {})
63
+ defaults = { builder: ActiveAdmin::Filters::FormBuilder, url: collection_path, html: { class: "filters-form" } }
64
+ required = { html: { method: :get }, as: :q }
65
+ options = defaults.deep_merge(options).deep_merge(required)
66
+
67
+ form_for search, options do |f|
68
+ f.template.concat hidden_field_tags_for(params, except: except_hidden_fields)
69
+
70
+ filters.each do |attribute, opts|
71
+ next if opts.key?(:if) && !call_method_or_proc_on(self, opts[:if])
72
+ next if opts.key?(:unless) && call_method_or_proc_on(self, opts[:unless])
73
+
74
+ filter_opts = opts.except(:if, :unless)
75
+ filter_opts[:input_html] = instance_exec(&filter_opts[:input_html]) if filter_opts[:input_html].is_a?(Proc)
76
+
77
+ f.filter attribute, filter_opts
78
+ end
79
+
80
+ buttons = content_tag :div, class: "filters-form-buttons" do
81
+ f.submit(I18n.t("active_admin.filters.buttons.filter"), class: "filters-form-submit") +
82
+ link_to(I18n.t("active_admin.filters.buttons.clear"), collection_path, class: "filters-form-clear")
83
+ end
84
+
85
+ f.template.concat buttons
86
+ end
87
+ end
88
+
89
+ private
90
+
91
+ def except_hidden_fields
92
+ [:q, :page]
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+ module ActiveAdmin
3
+ module IndexHelper
4
+ def scope_name(scope)
5
+ case scope.name
6
+ when Proc then
7
+ self.instance_exec(&scope.name).to_s
8
+ else
9
+ scope.name.to_s
10
+ end
11
+ end
12
+
13
+ def batch_actions_to_display
14
+ @batch_actions_to_display ||= begin
15
+ if active_admin_config && active_admin_config.batch_actions.any?
16
+ active_admin_config.batch_actions.select do |batch_action|
17
+ call_method_or_proc_on(self, batch_action.display_if_block)
18
+ end
19
+ else
20
+ []
21
+ end
22
+ end
23
+ end
24
+
25
+ # 1. removes `select` and `order` to prevent invalid SQL
26
+ # 2. correctly handles the Hash returned when `group by` is used
27
+ def collection_size(c = collection)
28
+ return c.count if c.is_a?(Array)
29
+ return c.length if c.limit_value
30
+
31
+ c = c.except :select, :order
32
+
33
+ c.group_values.present? ? c.count.count : c.count
34
+ end
35
+
36
+ def collection_empty?(c = collection)
37
+ collection_size(c) == 0
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+ module ActiveAdmin
3
+ module LayoutHelper
4
+ # Returns the current Active Admin application instance
5
+ def active_admin_application
6
+ ActiveAdmin.application
7
+ end
8
+
9
+ def set_page_title(title)
10
+ @page_title = title
11
+ end
12
+
13
+ def site_title
14
+ # Prioritize namespace and account for Devise views where namespace is not available
15
+ namespace = active_admin_namespace if respond_to?(:active_admin_namespace)
16
+ (namespace || active_admin_application).site_title(self)
17
+ end
18
+
19
+ def html_head_site_title(separator: "-")
20
+ "#{@page_title || page_title} #{separator} #{site_title}"
21
+ end
22
+
23
+ def action_items_for_action
24
+ @action_items_for_action ||= begin
25
+ if active_admin_config && active_admin_config.action_items?
26
+ active_admin_config.action_items_for(params[:action], self)
27
+ else
28
+ []
29
+ end
30
+ end
31
+ end
32
+
33
+ def sidebar_sections_for_action
34
+ @sidebar_sections_for_action ||= begin
35
+ if active_admin_config && active_admin_config.sidebar_sections?
36
+ active_admin_config.sidebar_sections_for(params[:action], self)
37
+ else
38
+ []
39
+ end
40
+ end
41
+ end
42
+
43
+ def skip_sidebar!
44
+ @skip_sidebar = true
45
+ end
46
+
47
+ def skip_sidebar?
48
+ @skip_sidebar == true
49
+ end
50
+
51
+ def flash_messages
52
+ @flash_messages ||= flash.to_hash.except(*active_admin_application.flash_keys_to_except)
53
+ end
54
+
55
+ def url_for_comments(*args)
56
+ parts = []
57
+ parts << active_admin_namespace.name unless active_admin_namespace.root?
58
+ parts << active_admin_namespace.comments_registration_name.underscore
59
+ parts << "path"
60
+ send parts.join("_"), *args
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,89 @@
1
+ import Rails from '@rails/ujs';
2
+
3
+ const batchActionClick = function(event) {
4
+ event.preventDefault()
5
+ let batchAction = document.getElementById("batch_action")
6
+ if (batchAction) {
7
+ batchAction.value = this.dataset.action
8
+ }
9
+ }
10
+
11
+ const batchActionConfirmComplete = function(event) {
12
+ event.preventDefault()
13
+ if (event.detail[0] === true) {
14
+ let batchAction = document.getElementById("batch_action")
15
+ if (batchAction) {
16
+ batchAction.value = this.dataset.action
17
+ }
18
+ let form = document.getElementById("collection_selection")
19
+ if (form) {
20
+ form.submit()
21
+ }
22
+ }
23
+ }
24
+
25
+ const batchActionFormSubmit = function(event) {
26
+ event.preventDefault();
27
+ let json = JSON.stringify(Object.fromEntries(new FormData(this).entries()));
28
+ let inputsField = document.getElementById('batch_action_inputs')
29
+ let form = document.getElementById("collection_selection")
30
+ if (json && inputsField && form) {
31
+ inputsField.value = json
32
+ form.submit()
33
+ }
34
+ }
35
+
36
+ Rails.delegate(document, "[data-batch-action-item]", "confirm:complete", batchActionConfirmComplete)
37
+ Rails.delegate(document, "[data-batch-action-item]", "click", batchActionClick)
38
+ Rails.delegate(document, "form[data-batch-action-form]", "submit", batchActionFormSubmit)
39
+
40
+ const disableDropdown = function(condition) {
41
+ const button = document.querySelector(".batch-actions-dropdown-toggle")
42
+ if (button) {
43
+ button.disabled = condition
44
+ }
45
+ }
46
+
47
+ const toggleAllChange = function(event) {
48
+ const checkboxes = document.querySelectorAll(".batch-actions-resource-selection")
49
+ for (const checkbox of checkboxes) {
50
+ checkbox.checked = this.checked
51
+ }
52
+
53
+ const rows = document.querySelectorAll(".paginated-collection tbody tr")
54
+ for (const row of rows) {
55
+ row.classList.toggle("selected", this.checked);
56
+ }
57
+
58
+ disableDropdown(!this.checked)
59
+ }
60
+
61
+ Rails.delegate(document, ".batch-actions-toggle-all", "change", toggleAllChange)
62
+
63
+ const toggleCheckboxChange = function(event) {
64
+ const numChecked = document.querySelectorAll(".batch-actions-resource-selection:checked").length;
65
+ const allChecked = numChecked === document.querySelectorAll(".batch-actions-resource-selection").length;
66
+ const someChecked = (numChecked > 0) && (numChecked < document.querySelectorAll(".batch-actions-resource-selection").length);
67
+
68
+ const toggleAll = document.querySelector(".batch-actions-toggle-all")
69
+ if (toggleAll) {
70
+ toggleAll.checked = allChecked
71
+ toggleAll.indeterminate = someChecked
72
+ }
73
+
74
+ disableDropdown(numChecked === 0)
75
+ }
76
+
77
+ Rails.delegate(document, ".batch-actions-resource-selection", "change", toggleCheckboxChange)
78
+
79
+ const tableRowClick = function(event) {
80
+ const type = event.target.type;
81
+ if (typeof type === "undefined" || (type !== "checkbox" && type !== "button" && type !== "")) {
82
+ const checkbox = event.target.closest("tr").querySelector("input[type=checkbox]")
83
+ if (checkbox) {
84
+ checkbox.click()
85
+ }
86
+ }
87
+ }
88
+
89
+ Rails.delegate(document, ".paginated-collection tbody td", "click", tableRowClick)
@@ -0,0 +1,37 @@
1
+ import Rails from '@rails/ujs';
2
+
3
+ const THEME_KEY = "theme";
4
+ const darkModeMedia = window.matchMedia('(prefers-color-scheme: dark)');
5
+
6
+ const setTheme = () => {
7
+ // On page load or when changing themes, best to add inline in `head` to avoid FOUC
8
+ if (localStorage.getItem(THEME_KEY) === 'dark' || (!(THEME_KEY in localStorage) && darkModeMedia.matches)) {
9
+ document.documentElement.classList.add('dark');
10
+ } else {
11
+ document.documentElement.classList.remove('dark');
12
+ }
13
+ }
14
+
15
+ // Detect when user changes their system level preference to set theme.
16
+ darkModeMedia.addEventListener("change", setTheme);
17
+
18
+ // When the page loads, set theme. By default, uses the system preference.
19
+ document.addEventListener("DOMContentLoaded", setTheme);
20
+
21
+ // If user deletes the Local Storage key, then re-apply theme.
22
+ window.addEventListener("storage", (event) => {
23
+ if (event.key === THEME_KEY) {
24
+ setTheme()
25
+ }
26
+ });
27
+
28
+ const toggleTheme = () => {
29
+ if (localStorage.getItem(THEME_KEY) === 'dark' || (!(THEME_KEY in localStorage) && darkModeMedia.matches)) {
30
+ localStorage.setItem(THEME_KEY, 'light');
31
+ } else {
32
+ localStorage.setItem(THEME_KEY, 'dark');
33
+ }
34
+ setTheme();
35
+ };
36
+
37
+ Rails.delegate(document, ".dark-mode-toggle", "click", toggleTheme);
@@ -0,0 +1,34 @@
1
+ import Rails from '@rails/ujs';
2
+ import { nextSibling } from 'active_admin/utils/dom'
3
+
4
+ const disableEmptyFields = function(event) {
5
+ Array.from(this.querySelectorAll("input, select, textarea"))
6
+ .filter((el) => el.value === "")
7
+ .forEach((el) => el.disabled = true)
8
+ };
9
+
10
+ Rails.delegate(document, ".filters-form", "submit", disableEmptyFields)
11
+
12
+ const setSearchType = function(event) {
13
+ const input = nextSibling(this, "input")
14
+ if (input) {
15
+ input.name = `q[${this.value}]`
16
+ }
17
+ };
18
+
19
+ Rails.delegate(document, ".filters-form-field [data-search-methods]", "change", setSearchType)
20
+
21
+ const clearFiltersForm = function(event) {
22
+ event.preventDefault()
23
+
24
+ const regex = /^(q\[|page|utf8|commit)/
25
+ const params = new URLSearchParams(window.location.search)
26
+
27
+ Array.from(params.keys())
28
+ .filter(k => k.match(regex))
29
+ .forEach(k => params.delete(k))
30
+
31
+ window.location.search = params.toString()
32
+ }
33
+
34
+ Rails.delegate(document, ".filters-form-clear", "click", clearFiltersForm)