activeadmin 2.1.0 → 2.5.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 (138) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +112 -27
  3. data/CONTRIBUTING.md +50 -26
  4. data/README.md +8 -1
  5. data/app/assets/javascripts/active_admin/base.js +509 -0
  6. data/app/assets/stylesheets/active_admin/_base.scss +29 -29
  7. data/app/assets/stylesheets/active_admin/_header.scss +3 -5
  8. data/app/assets/stylesheets/active_admin/_mixins.scss +1 -1
  9. data/{vendor → app}/assets/stylesheets/active_admin/_normalize.scss +0 -0
  10. data/app/assets/stylesheets/active_admin/components/_tables.scss +1 -2
  11. data/app/assets/stylesheets/active_admin/mixins/_all.scss +8 -8
  12. data/app/assets/stylesheets/active_admin/mixins/_variables.scss +5 -0
  13. data/app/assets/stylesheets/active_admin/print.scss +2 -2
  14. data/app/assets/stylesheets/active_admin/structure/_main_structure.scss +1 -1
  15. data/app/javascript/active_admin/base.js +19 -0
  16. data/app/{assets/javascripts/active_admin/ext/jquery-ui.es6 → javascript/active_admin/ext/jquery-ui.js} +0 -0
  17. data/app/{assets/javascripts/active_admin/ext/jquery.es6 → javascript/active_admin/ext/jquery.js} +0 -0
  18. data/app/{assets/javascripts/active_admin/lib/batch_actions.es6 → javascript/active_admin/initializers/batch-actions.js} +9 -3
  19. data/app/javascript/active_admin/initializers/checkbox-toggler.js +3 -0
  20. data/app/{assets/javascripts/active_admin/initializers/datepicker.es6 → javascript/active_admin/initializers/datepicker.js} +0 -0
  21. data/app/javascript/active_admin/initializers/dropdown-menu.js +9 -0
  22. data/app/javascript/active_admin/initializers/filters.js +10 -0
  23. data/app/{assets/javascripts/active_admin/lib/has_many.es6 → javascript/active_admin/initializers/has-many.js} +0 -0
  24. data/app/javascript/active_admin/initializers/per-page.js +13 -0
  25. data/app/javascript/active_admin/initializers/table-checkbox-toggler.js +3 -0
  26. data/app/{assets/javascripts/active_admin/initializers/tabs.es6 → javascript/active_admin/initializers/tabs.js} +0 -0
  27. data/app/{assets/javascripts/active_admin/lib/checkbox-toggler.es6 → javascript/active_admin/lib/checkbox-toggler.js} +2 -2
  28. data/app/{assets/javascripts/active_admin/lib/dropdown-menu.es6 → javascript/active_admin/lib/dropdown-menu.js} +2 -9
  29. data/app/javascript/active_admin/lib/filters.js +39 -0
  30. data/app/{assets/javascripts/active_admin/lib/modal_dialog.es6 → javascript/active_admin/lib/modal-dialog.js} +3 -1
  31. data/app/javascript/active_admin/lib/per-page.js +38 -0
  32. data/app/{assets/javascripts/active_admin/lib/table-checkbox-toggler.es6 → javascript/active_admin/lib/table-checkbox-toggler.js} +4 -2
  33. data/app/javascript/active_admin/lib/utils.js +40 -0
  34. data/app/views/kaminari/active_admin_countless/_first_page.html.erb +11 -0
  35. data/app/views/kaminari/active_admin_countless/_gap.html.erb +8 -0
  36. data/app/views/kaminari/active_admin_countless/_next_page.html.erb +11 -0
  37. data/app/views/kaminari/active_admin_countless/_page.html.erb +12 -0
  38. data/app/views/kaminari/active_admin_countless/_paginator.html.erb +24 -0
  39. data/app/views/kaminari/active_admin_countless/_prev_page.html.erb +11 -0
  40. data/config/locales/ar.yml +3 -2
  41. data/config/locales/az.yml +138 -0
  42. data/config/locales/bg.yml +1 -0
  43. data/config/locales/bs.yml +1 -0
  44. data/config/locales/ca.yml +1 -1
  45. data/config/locales/cs.yml +1 -0
  46. data/config/locales/da.yml +1 -0
  47. data/config/locales/de-CH.yml +1 -0
  48. data/config/locales/de.yml +19 -0
  49. data/config/locales/el.yml +1 -0
  50. data/config/locales/en-CA.yml +1 -0
  51. data/config/locales/en-GB.yml +1 -0
  52. data/config/locales/en.yml +1 -0
  53. data/config/locales/eo.yml +1 -0
  54. data/config/locales/es-MX.yml +1 -0
  55. data/config/locales/es.yml +1 -0
  56. data/config/locales/fa.yml +1 -0
  57. data/config/locales/fi.yml +1 -0
  58. data/config/locales/fr.yml +2 -1
  59. data/config/locales/he.yml +1 -0
  60. data/config/locales/hr.yml +1 -0
  61. data/config/locales/hu.yml +1 -0
  62. data/config/locales/id.yml +1 -0
  63. data/config/locales/it.yml +1 -0
  64. data/config/locales/ja.yml +1 -0
  65. data/config/locales/ko.yml +1 -0
  66. data/config/locales/lt.yml +1 -0
  67. data/config/locales/lv.yml +1 -0
  68. data/config/locales/mk.yml +134 -0
  69. data/config/locales/nb.yml +1 -0
  70. data/config/locales/nl.yml +1 -0
  71. data/config/locales/pl.yml +1 -0
  72. data/config/locales/pt-BR.yml +1 -0
  73. data/config/locales/pt-PT.yml +1 -0
  74. data/config/locales/ro.yml +1 -0
  75. data/config/locales/ru.yml +1 -0
  76. data/config/locales/sk.yml +60 -0
  77. data/config/locales/sv-SE.yml +1 -0
  78. data/config/locales/tr.yml +1 -0
  79. data/config/locales/uk.yml +1 -0
  80. data/config/locales/vi.yml +1 -0
  81. data/config/locales/zh-CN.yml +1 -0
  82. data/config/locales/zh-TW.yml +1 -0
  83. data/docs/1-general-configuration.md +20 -0
  84. data/docs/12-arbre-components.md +13 -0
  85. data/docs/13-authorization-adapter.md +2 -2
  86. data/docs/2-resource-customization.md +1 -1
  87. data/docs/3-index-pages/index-as-table.md +7 -0
  88. data/docs/Gemfile +0 -1
  89. data/docs/Gemfile.lock +58 -58
  90. data/docs/_config.yml +2 -0
  91. data/docs/_includes/top-menu.html +2 -2
  92. data/docs/index.html +108 -7
  93. data/docs/stylesheets/main.css +29 -0
  94. data/lib/active_admin.rb +0 -1
  95. data/lib/active_admin/application.rb +12 -3
  96. data/lib/active_admin/batch_actions/resource_extension.rb +5 -1
  97. data/lib/active_admin/controller_action.rb +2 -1
  98. data/lib/active_admin/csv_builder.rb +3 -2
  99. data/lib/active_admin/dependency.rb +0 -4
  100. data/lib/active_admin/error.rb +3 -1
  101. data/lib/active_admin/filters/active_filter.rb +3 -4
  102. data/lib/active_admin/filters/resource_extension.rb +24 -0
  103. data/lib/active_admin/generators/boilerplate.rb +12 -4
  104. data/lib/active_admin/inputs/filters/date_range_input.rb +4 -4
  105. data/lib/active_admin/namespace_settings.rb +13 -0
  106. data/lib/active_admin/order_clause.rb +1 -1
  107. data/lib/active_admin/page_presenter.rb +2 -1
  108. data/lib/active_admin/pundit_adapter.rb +7 -3
  109. data/lib/active_admin/resource.rb +16 -2
  110. data/lib/active_admin/resource/belongs_to.rb +6 -1
  111. data/lib/active_admin/resource/model.rb +15 -0
  112. data/lib/active_admin/resource/routes.rb +11 -3
  113. data/lib/active_admin/resource_controller.rb +2 -0
  114. data/lib/active_admin/resource_controller/decorators.rb +2 -2
  115. data/lib/active_admin/resource_controller/polymorphic_routes.rb +37 -0
  116. data/lib/active_admin/router.rb +2 -1
  117. data/lib/active_admin/scope.rb +7 -3
  118. data/lib/active_admin/sidebar_section.rb +3 -1
  119. data/lib/active_admin/version.rb +1 -1
  120. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +2 -2
  121. data/lib/active_admin/view_helpers/display_helper.rb +3 -2
  122. data/lib/active_admin/views/components/paginated_collection.rb +3 -2
  123. data/lib/active_admin/views/components/status_tag.rb +5 -1
  124. data/lib/active_admin/views/components/table_for.rb +1 -0
  125. data/lib/active_admin/views/index_as_table.rb +7 -0
  126. data/lib/active_admin/views/pages/base.rb +1 -1
  127. data/lib/active_admin/views/pages/index.rb +1 -0
  128. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +14 -1
  129. data/lib/generators/active_admin/resource/templates/admin.rb.erb +40 -37
  130. data/lib/ransack_ext.rb +2 -2
  131. metadata +38 -45
  132. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  133. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  134. data/app/assets/images/active_admin/orderable.png +0 -0
  135. data/app/assets/javascripts/active_admin/base.es6 +0 -23
  136. data/app/assets/javascripts/active_admin/initializers/filters.es6 +0 -45
  137. data/app/assets/javascripts/active_admin/lib/active_admin.es6 +0 -41
  138. data/app/assets/javascripts/active_admin/lib/per_page.es6 +0 -47
@@ -1,36 +1,36 @@
1
1
  /* Active Admin CSS */
2
2
  // Normalize
3
- @import "active_admin/normalize";
3
+ @import "./normalize";
4
4
 
5
5
  // Partials
6
- @import "active_admin/typography";
7
- @import "active_admin/header";
8
- @import "active_admin/forms";
9
- @import "active_admin/components/comments";
10
- @import "active_admin/components/flash_messages";
11
- @import "active_admin/components/date_picker";
12
- @import "active_admin/components/tables";
13
- @import "active_admin/components/batch_actions";
14
- @import "active_admin/components/modal_dialog";
15
- @import "active_admin/components/blank_slates";
16
- @import "active_admin/components/breadcrumbs";
17
- @import "active_admin/components/dropdown_menu";
18
- @import "active_admin/components/buttons";
19
- @import "active_admin/components/grid";
20
- @import "active_admin/components/links";
21
- @import "active_admin/components/pagination";
22
- @import "active_admin/components/panels";
23
- @import "active_admin/components/columns";
24
- @import "active_admin/components/scopes";
25
- @import "active_admin/components/status_tags";
26
- @import "active_admin/components/table_tools";
27
- @import "active_admin/components/index_list";
28
- @import "active_admin/components/unsupported_browser";
29
- @import "active_admin/components/tabs";
30
- @import "active_admin/pages/logged_out";
31
- @import "active_admin/structure/footer";
32
- @import "active_admin/structure/main_structure";
33
- @import "active_admin/structure/title_bar";
6
+ @import "./typography";
7
+ @import "./header";
8
+ @import "./forms";
9
+ @import "./components/comments";
10
+ @import "./components/flash_messages";
11
+ @import "./components/date_picker";
12
+ @import "./components/tables";
13
+ @import "./components/batch_actions";
14
+ @import "./components/modal_dialog";
15
+ @import "./components/blank_slates";
16
+ @import "./components/breadcrumbs";
17
+ @import "./components/dropdown_menu";
18
+ @import "./components/buttons";
19
+ @import "./components/grid";
20
+ @import "./components/links";
21
+ @import "./components/pagination";
22
+ @import "./components/panels";
23
+ @import "./components/columns";
24
+ @import "./components/scopes";
25
+ @import "./components/status_tags";
26
+ @import "./components/table_tools";
27
+ @import "./components/index_list";
28
+ @import "./components/unsupported_browser";
29
+ @import "./components/tabs";
30
+ @import "./pages/logged_out";
31
+ @import "./structure/footer";
32
+ @import "./structure/main_structure";
33
+ @import "./structure/title_bar";
34
34
 
35
35
  body {
36
36
  @include sans-family;
@@ -1,5 +1,3 @@
1
- //= depend_on_asset "active_admin/nested_menu_arrow.gif"
2
- //= depend_on_asset "active_admin/nested_menu_arrow_dark.gif"
3
1
  // ----------------------------------- Header
4
2
  #header {
5
3
  @include primary-gradient;
@@ -75,12 +73,12 @@
75
73
  }
76
74
 
77
75
  &.has_nested > a {
78
- background: image-url('active_admin/nested_menu_arrow.gif') no-repeat calc(100% - 7px) 50%;
76
+ background: url($menu-arrow-light-icon-url) no-repeat calc(100% - 7px) 50%;
79
77
  padding-right: 20px;
80
78
  }
81
79
 
82
80
  &.has_nested.current > a {
83
- background: $current-menu-item-background image-url('active_admin/nested_menu_arrow_dark.gif') no-repeat calc(100% - 7px) 50%;
81
+ background: $current-menu-item-background url($menu-arrow-dark-icon-url) no-repeat calc(100% - 7px) 50%;
84
82
  padding-right: 20px;
85
83
  }
86
84
 
@@ -92,7 +90,7 @@
92
90
  &.has_nested:hover > a {
93
91
  @include rounded-top(10px);
94
92
  border-bottom: 5px solid $hover-menu-item-background;
95
- background: $hover-menu-item-background image-url('active_admin/nested_menu_arrow_dark.gif') no-repeat calc(100% - 7px) 50%;
93
+ background: $hover-menu-item-background url($menu-arrow-dark-icon-url) no-repeat calc(100% - 7px) 50%;
96
94
  z-index: 1020;
97
95
  }
98
96
 
@@ -1 +1 @@
1
- @import "active_admin/mixins/all";
1
+ @import "./mixins/all";
@@ -1,4 +1,3 @@
1
- //= depend_on_asset "active_admin/orderable.png"
2
1
  // ----------------------------------- Tables
3
2
 
4
3
  table tr {
@@ -33,7 +32,7 @@ table.index_table {
33
32
  }
34
33
 
35
34
  &.sortable a {
36
- background: image-url('active_admin/orderable.png') no-repeat 0 4px; padding-left: 13px;
35
+ background: url($orderable-icon-url) no-repeat 0 4px; padding-left: 13px;
37
36
  }
38
37
 
39
38
  &.sorted-asc a { background-position: 0 -27px; }
@@ -1,8 +1,8 @@
1
- @import "active_admin/mixins/variables";
2
- @import "active_admin/mixins/gradients";
3
- @import "active_admin/mixins/shadows";
4
- @import "active_admin/mixins/rounded";
5
- @import "active_admin/mixins/buttons";
6
- @import "active_admin/mixins/sections";
7
- @import "active_admin/mixins/utilities";
8
- @import "active_admin/mixins/typography";
1
+ @import "./variables";
2
+ @import "./gradients";
3
+ @import "./shadows";
4
+ @import "./rounded";
5
+ @import "./buttons";
6
+ @import "./sections";
7
+ @import "./utilities";
8
+ @import "./typography";
@@ -2,6 +2,11 @@
2
2
  // They can be overridden by prepending your own
3
3
  // to 'app/assets/stylesheets/active_admin.scss'.
4
4
 
5
+ // Images
6
+ $menu-arrow-light-icon-url: 'data:image/png;base64,R0lGODlhBwAEAKIAAL6+vry8vIiIiJWVlf///3t7ewAAAAAAACH5BAEAAAUALAAAAAAHAAQAAAMLWLol80MoF5mQKgEAOw==' !default;
7
+ $menu-arrow-dark-icon-url: 'data:image/png;base64,R0lGODlhBwAEAKIAAG1tbWxsbElJSVBQUP///0JCQgAAAAAAACH5BAEAAAUALAAAAAAHAAQAAAMLWLol80MoF5mQKgEAOw==' !default;
8
+ $orderable-icon-url: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAABGCAYAAAAAVo4aAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAH5JREFUeNpi3LhlOwMU1AExGxDXwARYoHQLEFdD2cxAXAliMKFJgEAFEHfBJEHGMKLhMpgkTsAEdch/NNwCk2xCdiEQtML4LEgCf6EubUX3Cgh0oNvJ+P//f7wOGpUclRwYSZb41CyidNbB8giNM+9oXhmVHHm5bJjUSAABBgDKKiwMMUxPwgAAAABJRU5ErkJggg==' !default;
9
+
5
10
  // Colors
6
11
  $body-background-color: #FFF !default;
7
12
  $primary-color: #5E6469 !default;
@@ -5,10 +5,10 @@ $primary-color: black;
5
5
  $text-color: black;
6
6
 
7
7
  // Normalize
8
- @import "active_admin/normalize";
8
+ @import "./normalize";
9
9
 
10
10
  // Partials
11
- @import "active_admin/typography";
11
+ @import "./typography";
12
12
 
13
13
  body {
14
14
  font-family: Helvetica, Arial, sans-serif;
@@ -15,7 +15,7 @@
15
15
  width: 100%;
16
16
 
17
17
  #main_content{
18
- margin-right: 300px;
18
+ margin-right: $sidebar-width + ($section-padding * 2);
19
19
  }
20
20
  }
21
21
 
@@ -0,0 +1,19 @@
1
+ import "jquery"
2
+ import "jquery-ui/ui/widgets/datepicker"
3
+ import "jquery-ui/ui/widgets/dialog"
4
+ import "jquery-ui/ui/widgets/sortable"
5
+ import "jquery-ui/ui/widgets/tabs"
6
+ import "jquery-ui/ui/widget"
7
+ import "jquery-ujs"
8
+
9
+ import "./ext/jquery"
10
+ import "./ext/jquery-ui"
11
+ import "./initializers/batch-actions"
12
+ import "./initializers/checkbox-toggler"
13
+ import "./initializers/datepicker"
14
+ import "./initializers/dropdown-menu"
15
+ import "./initializers/filters"
16
+ import "./initializers/has-many"
17
+ import "./initializers/per-page"
18
+ import "./initializers/table-checkbox-toggler"
19
+ import "./initializers/tabs"
@@ -1,14 +1,20 @@
1
+ import ModalDialog from "../lib/modal-dialog";
2
+
1
3
  const onDOMReady = function() {
4
+ // Detach any previously attached handlers before re-attaching them.
5
+ // This avoids double-registered handlers when Turbolinks is enabled
6
+ $('.batch_actions_selector li a').off('click confirm:complete');
7
+
2
8
  //
3
- // Use ActiveAdmin.modal_dialog to prompt user if
9
+ // Use ModalDialog to prompt user if
4
10
  // confirmation is required for current Batch Action
5
11
  //
6
- $('.batch_actions_selector li a').click(function(event){
12
+ $('.batch_actions_selector li a').on('click', function(event){
7
13
  let message;
8
14
  event.stopPropagation(); // prevent Rails UJS click event
9
15
  event.preventDefault();
10
16
  if ((message = $(this).data('confirm'))) {
11
- ActiveAdmin.modal_dialog(message, $(this).data('inputs'), inputs => {
17
+ ModalDialog(message, $(this).data('inputs'), inputs => {
12
18
  $(this).trigger('confirm:complete', inputs);
13
19
  });
14
20
  } else {
@@ -0,0 +1,3 @@
1
+ import CheckboxToggler from "../lib/checkbox-toggler";
2
+
3
+ $.widget.bridge('checkboxToggler', CheckboxToggler);
@@ -0,0 +1,9 @@
1
+ import DropdownMenu from "../lib/dropdown-menu";
2
+
3
+ $.widget.bridge('aaDropdownMenu', DropdownMenu);
4
+
5
+ const onDOMReady = () => $('.dropdown_menu').aaDropdownMenu();
6
+
7
+ $(document).
8
+ ready(onDOMReady).
9
+ on('page:load turbolinks:load', onDOMReady);
@@ -0,0 +1,10 @@
1
+ import Filters from '../lib/filters';
2
+
3
+ (($) => {
4
+
5
+ $(document).
6
+ on('click', '.clear_filters_btn', Filters._clearForm).
7
+ on('submit', '.filter_form', Filters._disableEmptyInputFields).
8
+ on('change', '.filter_form_field.select_and_search select', Filters._setSearchType);
9
+
10
+ })(jQuery);
@@ -0,0 +1,13 @@
1
+ import PerPage from "../lib/per-page";
2
+
3
+ (($) => {
4
+
5
+ $(document).
6
+ on('change', '.pagination_per_page > select', function(event) {
7
+ PerPage._jQueryInterface.call($(this), 'update')
8
+ });
9
+
10
+ $.fn['perPage'] = PerPage._jQueryInterface
11
+ $.fn['perPage'].Constructor = PerPage
12
+
13
+ })(jQuery);
@@ -0,0 +1,3 @@
1
+ import TableCheckboxToggler from "../lib/table-checkbox-toggler";
2
+
3
+ $.widget.bridge('tableCheckboxToggler', TableCheckboxToggler);
@@ -1,4 +1,4 @@
1
- ActiveAdmin.CheckboxToggler = class CheckboxToggler {
1
+ class CheckboxToggler {
2
2
  constructor(options, container){
3
3
  this.options = options;
4
4
  this.container = container;
@@ -46,4 +46,4 @@ ActiveAdmin.CheckboxToggler = class CheckboxToggler {
46
46
  }
47
47
  };
48
48
 
49
- $.widget.bridge('checkboxToggler', ActiveAdmin.CheckboxToggler);
49
+ export default CheckboxToggler;
@@ -1,5 +1,4 @@
1
- ActiveAdmin.DropdownMenu = class DropdownMenu {
2
-
1
+ class DropdownMenu {
3
2
  constructor(options, element) {
4
3
  this.options = options;
5
4
  this.element = element;
@@ -114,10 +113,4 @@ ActiveAdmin.DropdownMenu = class DropdownMenu {
114
113
  }
115
114
  };
116
115
 
117
- $.widget.bridge('aaDropdownMenu', ActiveAdmin.DropdownMenu);
118
-
119
- const onDOMReady = () => $('.dropdown_menu').aaDropdownMenu();
120
-
121
- $(document).
122
- ready(onDOMReady).
123
- on('page:load turbolinks:load', onDOMReady);
116
+ export default DropdownMenu;
@@ -0,0 +1,39 @@
1
+ import { queryStringToParams, hasTurbolinks, turbolinksVisit, toQueryString } from '../lib/utils';
2
+
3
+ class Filters {
4
+
5
+ static _clearForm(event) {
6
+ const regex = /^(q\[|q%5B|q%5b|page|utf8|commit)/;
7
+ const params = queryStringToParams()
8
+ .filter(({name}) => !name.match(regex));
9
+
10
+ event.preventDefault();
11
+
12
+ if (hasTurbolinks()) {
13
+ turbolinksVisit(params);
14
+ } else {
15
+ window.location.search = toQueryString(params);
16
+ }
17
+ }
18
+
19
+ static _disableEmptyInputFields(event) {
20
+ const params = $(this)
21
+ .find(':input')
22
+ .filter((i, input) => input.value === '')
23
+ .prop({ disabled: true })
24
+ .end()
25
+ .serializeArray();
26
+
27
+ if (hasTurbolinks()) {
28
+ event.preventDefault();
29
+ turbolinksVisit(params);
30
+ }
31
+ }
32
+
33
+ static _setSearchType() {
34
+ $(this).siblings('input').prop({name: `q[${this.value}]`});
35
+ }
36
+
37
+ }
38
+
39
+ export default Filters;
@@ -1,4 +1,4 @@
1
- ActiveAdmin.modal_dialog = function(message, inputs, callback){
1
+ function ModalDialog(message, inputs, callback){
2
2
  let html = `<form id="dialog_confirm" title="${message}"><ul>`;
3
3
  for (let name in inputs) {
4
4
  var elem, opts, wrapper;
@@ -59,3 +59,5 @@ ActiveAdmin.modal_dialog = function(message, inputs, callback){
59
59
  }
60
60
  });
61
61
  };
62
+
63
+ export default ModalDialog;
@@ -0,0 +1,38 @@
1
+ import { queryStringToParams, hasTurbolinks, turbolinksVisit, toQueryString } from './utils';
2
+
3
+ class PerPage {
4
+ constructor(element) {
5
+ this.element = element;
6
+ }
7
+
8
+ update() {
9
+ const params = queryStringToParams()
10
+ .filter(({name}) => name != 'per_page' || name != 'page')
11
+
12
+ params.push({ name: 'per_page', value: this.element.value });
13
+
14
+ if (hasTurbolinks()) {
15
+ turbolinksVisit(params);
16
+ } else {
17
+ window.location.search = toQueryString(params);
18
+ }
19
+ }
20
+
21
+ static _jQueryInterface(config) {
22
+ return this.each(function () {
23
+ const $this = $(this)
24
+ let data = $this.data('perPage')
25
+
26
+ if (!data) {
27
+ data = new PerPage(this)
28
+ $this.data('perPage', data)
29
+ }
30
+
31
+ if (config === 'update') {
32
+ data[config]()
33
+ }
34
+ })
35
+ }
36
+ };
37
+
38
+ export default PerPage;
@@ -1,4 +1,6 @@
1
- ActiveAdmin.TableCheckboxToggler = class TableCheckboxToggler extends ActiveAdmin.CheckboxToggler {
1
+ import CheckboxToggler from "./checkbox-toggler";
2
+
3
+ class TableCheckboxToggler extends CheckboxToggler {
2
4
  _bind() {
3
5
  super._bind(...arguments);
4
6
 
@@ -33,4 +35,4 @@ ActiveAdmin.TableCheckboxToggler = class TableCheckboxToggler extends ActiveAdmi
33
35
  }
34
36
  };
35
37
 
36
- $.widget.bridge('tableCheckboxToggler', ActiveAdmin.TableCheckboxToggler);
38
+ export default TableCheckboxToggler;
@@ -0,0 +1,40 @@
1
+ function hasTurbolinks() {
2
+ return (typeof Turbolinks !== 'undefined' && Turbolinks.supported);
3
+ }
4
+
5
+ function turbolinksVisit(params) {
6
+ const path = [window.location.pathname, '?', toQueryString(params)].join('')
7
+ Turbolinks.visit(path);
8
+ }
9
+
10
+ function queryString() {
11
+ return (window.location.search || '').replace(/^\?/, '');
12
+ }
13
+
14
+ function queryStringToParams() {
15
+ const decode = (value) => decodeURIComponent((value || '').replace(/\+/g, '%20'));
16
+
17
+ return queryString()
18
+ .split("&")
19
+ .map(pair => pair.split("="))
20
+ .map(([key, value]) => {
21
+ return { name: decode(key), value: decode(value) }
22
+ });
23
+ }
24
+
25
+ function toQueryString(params) {
26
+ const encode = (value) => encodeURIComponent(value || '');
27
+
28
+ return params
29
+ .map(({name, value}) => [ encode(name), encode(value) ])
30
+ .map(pair => pair.join('='))
31
+ .join('&')
32
+ }
33
+
34
+ export {
35
+ hasTurbolinks,
36
+ turbolinksVisit,
37
+ queryString,
38
+ queryStringToParams,
39
+ toQueryString
40
+ };