activeadmin 3.2.1 → 4.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (338) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +2 -31
  3. data/CONTRIBUTING.md +25 -108
  4. data/README.md +17 -30
  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/resource/action_items.rb +15 -20
  144. data/lib/active_admin/resource/naming.rb +1 -2
  145. data/lib/active_admin/resource.rb +1 -0
  146. data/lib/active_admin/resource_dsl.rb +1 -1
  147. data/lib/active_admin/scope.rb +1 -1
  148. data/lib/active_admin/settings_node.rb +1 -1
  149. data/lib/active_admin/sidebar_section.rb +0 -5
  150. data/lib/active_admin/version.rb +1 -1
  151. data/lib/active_admin/view_helpers.rb +0 -12
  152. data/lib/active_admin/views/components/active_admin_form.rb +20 -16
  153. data/lib/active_admin/views/components/attributes_table.rb +4 -12
  154. data/lib/active_admin/views/components/index_list.rb +10 -23
  155. data/lib/active_admin/views/components/paginated_collection.rb +34 -39
  156. data/lib/active_admin/views/components/panel.rb +2 -10
  157. data/lib/active_admin/views/components/scopes.rb +12 -21
  158. data/lib/active_admin/views/components/status_tag.rb +22 -19
  159. data/lib/active_admin/views/components/table_for.rb +19 -24
  160. data/lib/active_admin/views/components/tabs.rb +10 -11
  161. data/lib/active_admin/views/index_as_table.rb +24 -97
  162. data/lib/active_admin.rb +7 -11
  163. data/lib/generators/active_admin/assets/assets_generator.rb +4 -4
  164. data/lib/generators/active_admin/assets/templates/active_admin.css +3 -0
  165. data/lib/generators/active_admin/assets/templates/tailwind.config.js +18 -0
  166. data/lib/generators/active_admin/install/install_generator.rb +2 -8
  167. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +10 -87
  168. data/lib/generators/active_admin/install/templates/dashboard.rb +8 -25
  169. data/lib/generators/active_admin/page/page_generator.rb +0 -1
  170. data/lib/generators/active_admin/resource/resource_generator.rb +46 -7
  171. data/lib/generators/active_admin/resource/templates/resource.rb.erb +42 -0
  172. data/lib/generators/active_admin/views_generator.rb +18 -0
  173. metadata +67 -215
  174. data/app/assets/javascripts/active_admin/base.js +0 -521
  175. data/app/assets/stylesheets/active_admin/_base.scss +0 -57
  176. data/app/assets/stylesheets/active_admin/_forms.scss +0 -316
  177. data/app/assets/stylesheets/active_admin/_header.scss +0 -188
  178. data/app/assets/stylesheets/active_admin/_mixins.scss +0 -1
  179. data/app/assets/stylesheets/active_admin/_normalize.scss +0 -349
  180. data/app/assets/stylesheets/active_admin/_print.scss +0 -287
  181. data/app/assets/stylesheets/active_admin/_typography.scss +0 -100
  182. data/app/assets/stylesheets/active_admin/components/_batch_actions.scss +0 -6
  183. data/app/assets/stylesheets/active_admin/components/_blank_slates.scss +0 -30
  184. data/app/assets/stylesheets/active_admin/components/_breadcrumbs.scss +0 -20
  185. data/app/assets/stylesheets/active_admin/components/_buttons.scss +0 -6
  186. data/app/assets/stylesheets/active_admin/components/_columns.scss +0 -3
  187. data/app/assets/stylesheets/active_admin/components/_comments.scss +0 -41
  188. data/app/assets/stylesheets/active_admin/components/_date_picker.scss +0 -148
  189. data/app/assets/stylesheets/active_admin/components/_dropdown_menu.scss +0 -151
  190. data/app/assets/stylesheets/active_admin/components/_flash_messages.scss +0 -37
  191. data/app/assets/stylesheets/active_admin/components/_grid.scss +0 -9
  192. data/app/assets/stylesheets/active_admin/components/_index_list.scss +0 -12
  193. data/app/assets/stylesheets/active_admin/components/_links.scss +0 -5
  194. data/app/assets/stylesheets/active_admin/components/_modal_dialog.scss +0 -34
  195. data/app/assets/stylesheets/active_admin/components/_pagination.scss +0 -55
  196. data/app/assets/stylesheets/active_admin/components/_panels.scss +0 -6
  197. data/app/assets/stylesheets/active_admin/components/_scopes.scss +0 -13
  198. data/app/assets/stylesheets/active_admin/components/_status_tags.scss +0 -12
  199. data/app/assets/stylesheets/active_admin/components/_table_tools.scss +0 -67
  200. data/app/assets/stylesheets/active_admin/components/_tables.scss +0 -112
  201. data/app/assets/stylesheets/active_admin/components/_tabs.scss +0 -65
  202. data/app/assets/stylesheets/active_admin/components/_unsupported_browser.scss +0 -16
  203. data/app/assets/stylesheets/active_admin/mixins/_all.scss +0 -8
  204. data/app/assets/stylesheets/active_admin/mixins/_buttons.scss +0 -65
  205. data/app/assets/stylesheets/active_admin/mixins/_gradients.scss +0 -28
  206. data/app/assets/stylesheets/active_admin/mixins/_rounded.scss +0 -22
  207. data/app/assets/stylesheets/active_admin/mixins/_sections.scss +0 -41
  208. data/app/assets/stylesheets/active_admin/mixins/_shadows.scss +0 -15
  209. data/app/assets/stylesheets/active_admin/mixins/_typography.scss +0 -3
  210. data/app/assets/stylesheets/active_admin/mixins/_utilities.scss +0 -17
  211. data/app/assets/stylesheets/active_admin/mixins/_variables.scss +0 -51
  212. data/app/assets/stylesheets/active_admin/pages/_logged_out.scss +0 -44
  213. data/app/assets/stylesheets/active_admin/structure/_footer.scss +0 -19
  214. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +0 -29
  215. data/app/assets/stylesheets/active_admin/structure/_title_bar.scss +0 -40
  216. data/app/javascript/active_admin/base.js +0 -28
  217. data/app/javascript/active_admin/ext/jquery-ui.js +0 -7
  218. data/app/javascript/active_admin/ext/jquery.js +0 -9
  219. data/app/javascript/active_admin/initializers/batch-actions.js +0 -61
  220. data/app/javascript/active_admin/initializers/checkbox-toggler.js +0 -3
  221. data/app/javascript/active_admin/initializers/datepicker.js +0 -16
  222. data/app/javascript/active_admin/initializers/dropdown-menu.js +0 -9
  223. data/app/javascript/active_admin/initializers/filters.js +0 -10
  224. data/app/javascript/active_admin/initializers/has-many.js +0 -98
  225. data/app/javascript/active_admin/initializers/per-page.js +0 -13
  226. data/app/javascript/active_admin/initializers/table-checkbox-toggler.js +0 -3
  227. data/app/javascript/active_admin/initializers/tabs.js +0 -6
  228. data/app/javascript/active_admin/lib/checkbox-toggler.js +0 -49
  229. data/app/javascript/active_admin/lib/dropdown-menu.js +0 -116
  230. data/app/javascript/active_admin/lib/filters.js +0 -39
  231. data/app/javascript/active_admin/lib/modal-dialog.js +0 -63
  232. data/app/javascript/active_admin/lib/per-page.js +0 -38
  233. data/app/javascript/active_admin/lib/table-checkbox-toggler.js +0 -38
  234. data/app/javascript/active_admin/lib/utils.js +0 -40
  235. data/app/views/kaminari/active_admin/_first_page.html.erb +0 -11
  236. data/app/views/kaminari/active_admin/_gap.html.erb +0 -8
  237. data/app/views/kaminari/active_admin/_last_page.html.erb +0 -11
  238. data/app/views/kaminari/active_admin/_next_page.html.erb +0 -11
  239. data/app/views/kaminari/active_admin/_page.html.erb +0 -12
  240. data/app/views/kaminari/active_admin/_paginator.html.erb +0 -25
  241. data/app/views/kaminari/active_admin/_prev_page.html.erb +0 -11
  242. data/app/views/kaminari/active_admin_countless/_first_page.html.erb +0 -11
  243. data/app/views/kaminari/active_admin_countless/_next_page.html.erb +0 -11
  244. data/app/views/kaminari/active_admin_countless/_page.html.erb +0 -12
  245. data/app/views/kaminari/active_admin_countless/_prev_page.html.erb +0 -11
  246. data/app/views/layouts/active_admin.html.arb +0 -2
  247. data/lib/active_admin/abstract_view_factory.rb +0 -48
  248. data/lib/active_admin/asset_registration.rb +0 -30
  249. data/lib/active_admin/base_controller/menu.rb +0 -35
  250. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +0 -59
  251. data/lib/active_admin/filters/active_sidebar.rb +0 -28
  252. data/lib/active_admin/generators/boilerplate.rb +0 -54
  253. data/lib/active_admin/helpers/collection.rb +0 -21
  254. data/lib/active_admin/helpers/i18n.rb +0 -8
  255. data/lib/active_admin/inputs/datepicker_input.rb +0 -28
  256. data/lib/active_admin/inputs/filters/date_picker_input.rb +0 -14
  257. data/lib/active_admin/orm/active_record/comments/show_page_helper.rb +0 -24
  258. data/lib/active_admin/orm/mongoid.rb +0 -2
  259. data/lib/active_admin/resource_controller/sidebars.rb +0 -19
  260. data/lib/active_admin/resource_controller.rb +0 -68
  261. data/lib/active_admin/view_factory.rb +0 -28
  262. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +0 -13
  263. data/lib/active_admin/view_helpers/auto_link_helper.rb +0 -46
  264. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +0 -34
  265. data/lib/active_admin/view_helpers/display_helper.rb +0 -119
  266. data/lib/active_admin/view_helpers/download_format_links_helper.rb +0 -60
  267. data/lib/active_admin/view_helpers/fields_for.rb +0 -51
  268. data/lib/active_admin/view_helpers/flash_helper.rb +0 -15
  269. data/lib/active_admin/view_helpers/form_helper.rb +0 -21
  270. data/lib/active_admin/view_helpers/scope_name_helper.rb +0 -17
  271. data/lib/active_admin/view_helpers/sidebar_helper.rb +0 -16
  272. data/lib/active_admin/view_helpers/title_helper.rb +0 -12
  273. data/lib/active_admin/view_helpers/view_factory_helper.rb +0 -12
  274. data/lib/active_admin/views/action_items.rb +0 -18
  275. data/lib/active_admin/views/components/active_filters_sidebar_content.rb +0 -59
  276. data/lib/active_admin/views/components/blank_slate.rb +0 -18
  277. data/lib/active_admin/views/components/columns.rb +0 -162
  278. data/lib/active_admin/views/components/dropdown_menu.rb +0 -69
  279. data/lib/active_admin/views/components/menu.rb +0 -33
  280. data/lib/active_admin/views/components/menu_item.rb +0 -59
  281. data/lib/active_admin/views/components/sidebar.rb +0 -14
  282. data/lib/active_admin/views/components/sidebar_section.rb +0 -35
  283. data/lib/active_admin/views/components/site_title.rb +0 -55
  284. data/lib/active_admin/views/components/unsupported_browser.rb +0 -12
  285. data/lib/active_admin/views/footer.rb +0 -32
  286. data/lib/active_admin/views/header.rb +0 -20
  287. data/lib/active_admin/views/index_as_block.rb +0 -37
  288. data/lib/active_admin/views/index_as_blog.rb +0 -156
  289. data/lib/active_admin/views/index_as_grid.rb +0 -81
  290. data/lib/active_admin/views/pages/base.rb +0 -134
  291. data/lib/active_admin/views/pages/form.rb +0 -65
  292. data/lib/active_admin/views/pages/index.rb +0 -166
  293. data/lib/active_admin/views/pages/layout.rb +0 -27
  294. data/lib/active_admin/views/pages/page.rb +0 -31
  295. data/lib/active_admin/views/pages/show.rb +0 -60
  296. data/lib/active_admin/views/tabbed_navigation.rb +0 -12
  297. data/lib/active_admin/views/title_bar.rb +0 -56
  298. data/lib/generators/active_admin/assets/templates/active_admin.js +0 -1
  299. data/lib/generators/active_admin/assets/templates/active_admin.scss +0 -17
  300. data/lib/generators/active_admin/resource/templates/admin.rb.erb +0 -46
  301. data/lib/generators/active_admin/webpacker/plugins/jquery.js +0 -7
  302. data/lib/generators/active_admin/webpacker/templates/active_admin.js +0 -5
  303. data/lib/generators/active_admin/webpacker/templates/active_admin.scss +0 -17
  304. data/lib/generators/active_admin/webpacker/templates/print.scss +0 -2
  305. data/lib/generators/active_admin/webpacker/webpacker_generator.rb +0 -27
  306. data/vendor/assets/javascripts/jquery-ui/data.js +0 -41
  307. data/vendor/assets/javascripts/jquery-ui/disable-selection.js +0 -48
  308. data/vendor/assets/javascripts/jquery-ui/escape-selector.js +0 -23
  309. data/vendor/assets/javascripts/jquery-ui/focusable.js +0 -86
  310. data/vendor/assets/javascripts/jquery-ui/form-reset-mixin.js +0 -80
  311. data/vendor/assets/javascripts/jquery-ui/form.js +0 -22
  312. data/vendor/assets/javascripts/jquery-ui/ie.js +0 -17
  313. data/vendor/assets/javascripts/jquery-ui/keycode.js +0 -47
  314. data/vendor/assets/javascripts/jquery-ui/labels.js +0 -65
  315. data/vendor/assets/javascripts/jquery-ui/plugin.js +0 -46
  316. data/vendor/assets/javascripts/jquery-ui/position.js +0 -500
  317. data/vendor/assets/javascripts/jquery-ui/safe-active-element.js +0 -42
  318. data/vendor/assets/javascripts/jquery-ui/safe-blur.js +0 -23
  319. data/vendor/assets/javascripts/jquery-ui/scroll-parent.js +0 -47
  320. data/vendor/assets/javascripts/jquery-ui/tabbable.js +0 -38
  321. data/vendor/assets/javascripts/jquery-ui/unique-id.js +0 -51
  322. data/vendor/assets/javascripts/jquery-ui/version.js +0 -17
  323. data/vendor/assets/javascripts/jquery-ui/widget.js +0 -735
  324. data/vendor/assets/javascripts/jquery-ui/widgets/button.js +0 -391
  325. data/vendor/assets/javascripts/jquery-ui/widgets/checkboxradio.js +0 -291
  326. data/vendor/assets/javascripts/jquery-ui/widgets/controlgroup.js +0 -300
  327. data/vendor/assets/javascripts/jquery-ui/widgets/datepicker.js +0 -2123
  328. data/vendor/assets/javascripts/jquery-ui/widgets/dialog.js +0 -954
  329. data/vendor/assets/javascripts/jquery-ui/widgets/draggable.js +0 -1259
  330. data/vendor/assets/javascripts/jquery-ui/widgets/mouse.js +0 -230
  331. data/vendor/assets/javascripts/jquery-ui/widgets/resizable.js +0 -1207
  332. data/vendor/assets/javascripts/jquery-ui/widgets/sortable.js +0 -1561
  333. data/vendor/assets/javascripts/jquery-ui/widgets/tabs.js +0 -931
  334. /data/{lib → app/controllers}/active_admin/base_controller/authorization.rb +0 -0
  335. /data/{lib → app/controllers}/active_admin/resource_controller/decorators.rb +0 -0
  336. /data/{lib → app/controllers}/active_admin/resource_controller/polymorphic_routes.rb +0 -0
  337. /data/{lib → app/controllers}/active_admin/resource_controller/resource_class_methods.rb +0 -0
  338. /data/lib/{active_admin/orm/mongoid/.gitkeep → generators/active_admin/assets/templates/builds/.keep} +0 -0
@@ -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)
@@ -0,0 +1,28 @@
1
+ import Rails from '@rails/ujs';
2
+
3
+ const hasManyRemoveClick = function(event) {
4
+ event.preventDefault()
5
+ const oldGroup = this.closest("fieldset")
6
+ if (oldGroup) {
7
+ oldGroup.remove()
8
+ }
9
+ }
10
+
11
+ Rails.delegate(document, "form .has-many-remove", "click", hasManyRemoveClick)
12
+
13
+ const hasManyAddClick = function(event) {
14
+ event.preventDefault()
15
+ const parent = this.closest(".has-many-container")
16
+
17
+ let index = parseInt(parent.dataset.has_many_index || (parent.querySelectorAll('fieldset').length - 1), 10)
18
+ parent.dataset.has_many_index = ++index
19
+
20
+ const regex = new RegExp(this.dataset.placeholder, 'g')
21
+ const html = this.dataset.html.replace(regex, index)
22
+
23
+ const tempEl = document.createElement("div");
24
+ tempEl.innerHTML = html
25
+ this.before(tempEl.firstChild)
26
+ }
27
+
28
+ Rails.delegate(document, "form .has-many-add", "click", hasManyAddClick)
@@ -0,0 +1,12 @@
1
+ import Rails from '@rails/ujs';
2
+
3
+ const toggleMenu = function(event) {
4
+ const parent = this.parentNode
5
+ if (!("open" in parent.dataset)) {
6
+ parent.dataset.open = ""
7
+ } else {
8
+ delete parent.dataset.open
9
+ }
10
+ }
11
+
12
+ Rails.delegate(document, "#main-menu [data-menu-button]", "click", toggleMenu)
@@ -0,0 +1,9 @@
1
+ import Rails from '@rails/ujs';
2
+
3
+ const setPerPage = function(event) {
4
+ const params = new URLSearchParams(window.location.search)
5
+ params.set("per_page", this.value)
6
+ window.location.search = params
7
+ }
8
+
9
+ Rails.delegate(document, ".pagination-per-page", "change", setPerPage)
@@ -0,0 +1,17 @@
1
+ const nextSibling = function next(element, selector) {
2
+ let sibling = element.nextElementSibling;
3
+
4
+ if (!selector) {
5
+ return sibling;
6
+ }
7
+
8
+ while (sibling) {
9
+ if (sibling && sibling.matches(selector)) {
10
+ return sibling;
11
+ }
12
+
13
+ sibling = sibling.nextElementSibling;
14
+ }
15
+ }
16
+
17
+ export { nextSibling }
@@ -0,0 +1,10 @@
1
+ import "flowbite"
2
+ import Rails from "@rails/ujs"
3
+ import "active_admin/features/batch_actions"
4
+ import "active_admin/features/dark_mode_toggle"
5
+ import "active_admin/features/has_many"
6
+ import "active_admin/features/filters"
7
+ import "active_admin/features/main_menu"
8
+ import "active_admin/features/per_page"
9
+
10
+ Rails.start()