activeadmin 2.4.0 → 2.9.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of activeadmin might be problematic. Click here for more details.

Files changed (183) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +192 -30
  3. data/CONTRIBUTING.md +42 -62
  4. data/README.md +4 -4
  5. data/app/assets/javascripts/active_admin/base.js +517 -0
  6. data/app/assets/stylesheets/active_admin/_base.scss +29 -29
  7. data/app/assets/stylesheets/active_admin/_header.scss +40 -8
  8. data/app/assets/stylesheets/active_admin/_mixins.scss +1 -1
  9. data/app/assets/stylesheets/active_admin/components/_comments.scss +2 -2
  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 +8 -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 +28 -0
  16. data/app/{assets/javascripts/active_admin/lib/batch_actions.es6 → javascript/active_admin/initializers/batch-actions.js} +4 -2
  17. data/app/javascript/active_admin/initializers/checkbox-toggler.js +3 -0
  18. data/app/javascript/active_admin/initializers/dropdown-menu.js +9 -0
  19. data/app/javascript/active_admin/initializers/filters.js +10 -0
  20. data/app/javascript/active_admin/initializers/per-page.js +13 -0
  21. data/app/javascript/active_admin/initializers/table-checkbox-toggler.js +3 -0
  22. data/app/{assets/javascripts/active_admin/lib/checkbox-toggler.es6 → javascript/active_admin/lib/checkbox-toggler.js} +5 -5
  23. data/app/{assets/javascripts/active_admin/lib/dropdown-menu.es6 → javascript/active_admin/lib/dropdown-menu.js} +3 -10
  24. data/app/javascript/active_admin/lib/filters.js +39 -0
  25. data/app/{assets/javascripts/active_admin/lib/modal_dialog.es6 → javascript/active_admin/lib/modal-dialog.js} +10 -8
  26. data/app/javascript/active_admin/lib/per-page.js +38 -0
  27. data/app/{assets/javascripts/active_admin/lib/table-checkbox-toggler.es6 → javascript/active_admin/lib/table-checkbox-toggler.js} +5 -3
  28. data/app/javascript/active_admin/lib/utils.js +40 -0
  29. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +1 -1
  30. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +2 -2
  31. data/app/views/layouts/active_admin_logged_out.html.erb +15 -5
  32. data/config/locales/ar.yml +6 -6
  33. data/config/locales/az.yml +138 -0
  34. data/config/locales/en-CA.yml +3 -3
  35. data/config/locales/en-GB.yml +3 -3
  36. data/config/locales/en.yml +3 -3
  37. data/config/locales/es-MX.yml +2 -1
  38. data/config/locales/es.yml +5 -5
  39. data/config/locales/fr.yml +4 -4
  40. data/config/locales/it.yml +18 -0
  41. data/config/locales/ja.yml +3 -3
  42. data/config/locales/lv.yml +2 -2
  43. data/config/locales/vi.yml +6 -5
  44. data/docs/0-installation.md +26 -2
  45. data/docs/1-general-configuration.md +20 -0
  46. data/docs/11-decorators.md +16 -5
  47. data/docs/2-resource-customization.md +10 -1
  48. data/docs/3-index-pages.md +1 -1
  49. data/docs/5-forms.md +6 -1
  50. data/docs/6-show-pages.md +12 -0
  51. data/docs/9-batch-actions.md +2 -2
  52. data/docs/Gemfile +2 -2
  53. data/docs/Gemfile.lock +124 -113
  54. data/docs/_includes/top-menu.html +1 -1
  55. data/docs/documentation.md +1 -1
  56. data/docs/index.html +6 -6
  57. data/lib/active_admin/application.rb +14 -14
  58. data/lib/active_admin/application_settings.rb +3 -3
  59. data/lib/active_admin/authorization_adapter.rb +3 -3
  60. data/lib/active_admin/base_controller/authorization.rb +13 -12
  61. data/lib/active_admin/base_controller.rb +4 -4
  62. data/lib/active_admin/batch_actions/controller.rb +3 -3
  63. data/lib/active_admin/batch_actions/resource_extension.rb +9 -8
  64. data/lib/active_admin/batch_actions/views/batch_action_form.rb +3 -3
  65. data/lib/active_admin/batch_actions/views/batch_action_selector.rb +6 -6
  66. data/lib/active_admin/batch_actions/views/selection_cells.rb +3 -3
  67. data/lib/active_admin/cancan_adapter.rb +1 -1
  68. data/lib/active_admin/collection_decorator.rb +31 -0
  69. data/lib/active_admin/csv_builder.rb +11 -7
  70. data/lib/active_admin/dependency.rb +11 -11
  71. data/lib/active_admin/devise.rb +5 -5
  72. data/lib/active_admin/dsl.rb +1 -1
  73. data/lib/active_admin/dynamic_settings_node.rb +2 -2
  74. data/lib/active_admin/engine.rb +10 -8
  75. data/lib/active_admin/error.rb +0 -2
  76. data/lib/active_admin/filters/active.rb +1 -1
  77. data/lib/active_admin/filters/active_filter.rb +6 -7
  78. data/lib/active_admin/filters/active_sidebar.rb +5 -5
  79. data/lib/active_admin/filters/forms.rb +6 -6
  80. data/lib/active_admin/filters/formtastic_addons.rb +1 -6
  81. data/lib/active_admin/filters/resource_extension.rb +1 -1
  82. data/lib/active_admin/filters.rb +7 -7
  83. data/lib/active_admin/form_builder.rb +24 -20
  84. data/lib/active_admin/generators/boilerplate.rb +1 -1
  85. data/lib/active_admin/helpers/optional_display.rb +2 -2
  86. data/lib/active_admin/inputs/datepicker_input.rb +1 -1
  87. data/lib/active_admin/inputs/filters/base/search_method_select.rb +4 -4
  88. data/lib/active_admin/inputs/filters/base.rb +1 -1
  89. data/lib/active_admin/inputs/filters/boolean_input.rb +1 -1
  90. data/lib/active_admin/inputs/filters/check_boxes_input.rb +1 -1
  91. data/lib/active_admin/inputs/filters/date_range_input.rb +15 -12
  92. data/lib/active_admin/inputs/filters/select_input.rb +2 -2
  93. data/lib/active_admin/localizers/resource_localizer.rb +3 -3
  94. data/lib/active_admin/localizers.rb +1 -1
  95. data/lib/active_admin/menu.rb +6 -3
  96. data/lib/active_admin/menu_item.rb +7 -7
  97. data/lib/active_admin/namespace.rb +12 -12
  98. data/lib/active_admin/namespace_settings.rb +8 -5
  99. data/lib/active_admin/order_clause.rb +1 -1
  100. data/lib/active_admin/orm/active_record/comments/comment.rb +3 -3
  101. data/lib/active_admin/orm/active_record/comments/views/active_admin_comments.rb +19 -19
  102. data/lib/active_admin/orm/active_record/comments/views.rb +2 -2
  103. data/lib/active_admin/orm/active_record/comments.rb +19 -19
  104. data/lib/active_admin/orm/active_record.rb +1 -1
  105. data/lib/active_admin/page.rb +1 -1
  106. data/lib/active_admin/pundit_adapter.rb +5 -5
  107. data/lib/active_admin/resource/action_items.rb +5 -5
  108. data/lib/active_admin/resource/attributes.rb +1 -1
  109. data/lib/active_admin/resource/belongs_to.rb +2 -2
  110. data/lib/active_admin/resource/controllers.rb +1 -1
  111. data/lib/active_admin/resource/menu.rb +4 -4
  112. data/lib/active_admin/resource/naming.rb +5 -5
  113. data/lib/active_admin/resource/routes.rb +5 -7
  114. data/lib/active_admin/resource/scope_to.rb +7 -7
  115. data/lib/active_admin/resource/sidebars.rb +1 -1
  116. data/lib/active_admin/resource.rb +18 -18
  117. data/lib/active_admin/resource_controller/data_access.rb +1 -1
  118. data/lib/active_admin/resource_controller/decorators.rb +6 -28
  119. data/lib/active_admin/resource_controller/polymorphic_routes.rb +3 -2
  120. data/lib/active_admin/resource_controller/streaming.rb +7 -6
  121. data/lib/active_admin/resource_controller.rb +12 -11
  122. data/lib/active_admin/resource_dsl.rb +5 -5
  123. data/lib/active_admin/scope.rb +6 -6
  124. data/lib/active_admin/version.rb +1 -1
  125. data/lib/active_admin/view_factory.rb +17 -17
  126. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +3 -3
  127. data/lib/active_admin/view_helpers/display_helper.rb +5 -5
  128. data/lib/active_admin/view_helpers/download_format_links_helper.rb +1 -1
  129. data/lib/active_admin/view_helpers/fields_for.rb +2 -2
  130. data/lib/active_admin/view_helpers.rb +1 -1
  131. data/lib/active_admin/views/components/active_admin_form.rb +5 -5
  132. data/lib/active_admin/views/components/attributes_table.rb +5 -5
  133. data/lib/active_admin/views/components/blank_slate.rb +1 -1
  134. data/lib/active_admin/views/components/dropdown_menu.rb +8 -8
  135. data/lib/active_admin/views/components/index_list.rb +3 -3
  136. data/lib/active_admin/views/components/menu.rb +1 -1
  137. data/lib/active_admin/views/components/menu_item.rb +4 -4
  138. data/lib/active_admin/views/components/paginated_collection.rb +19 -18
  139. data/lib/active_admin/views/components/panel.rb +1 -1
  140. data/lib/active_admin/views/components/scopes.rb +7 -5
  141. data/lib/active_admin/views/components/site_title.rb +1 -1
  142. data/lib/active_admin/views/components/status_tag.rb +11 -11
  143. data/lib/active_admin/views/components/table_for.rb +18 -17
  144. data/lib/active_admin/views/components/tabs.rb +3 -3
  145. data/lib/active_admin/views/footer.rb +2 -1
  146. data/lib/active_admin/views/header.rb +2 -2
  147. data/lib/active_admin/views/index_as_blog.rb +1 -1
  148. data/lib/active_admin/views/index_as_grid.rb +1 -1
  149. data/lib/active_admin/views/index_as_table.rb +16 -16
  150. data/lib/active_admin/views/pages/base.rb +15 -11
  151. data/lib/active_admin/views/pages/index.rb +15 -13
  152. data/lib/active_admin/views/tabbed_navigation.rb +2 -2
  153. data/lib/active_admin/views/title_bar.rb +1 -1
  154. data/lib/active_admin/views.rb +1 -1
  155. data/lib/active_admin.rb +61 -63
  156. data/lib/activeadmin.rb +1 -1
  157. data/lib/generators/active_admin/assets/assets_generator.rb +2 -2
  158. data/lib/generators/active_admin/assets/templates/active_admin.scss +2 -2
  159. data/lib/generators/active_admin/devise/devise_generator.rb +5 -5
  160. data/lib/generators/active_admin/install/install_generator.rb +14 -8
  161. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +9 -2
  162. data/lib/generators/active_admin/page/page_generator.rb +1 -1
  163. data/lib/generators/active_admin/resource/resource_generator.rb +3 -3
  164. data/lib/generators/active_admin/webpacker/plugins/jquery.js +7 -0
  165. data/lib/generators/active_admin/webpacker/templates/active_admin.js +5 -0
  166. data/lib/generators/active_admin/webpacker/templates/active_admin.scss +17 -0
  167. data/lib/generators/active_admin/webpacker/templates/print.scss +2 -0
  168. data/lib/generators/active_admin/webpacker/webpacker_generator.rb +26 -0
  169. data/lib/ransack_ext.rb +8 -8
  170. metadata +46 -84
  171. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  172. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  173. data/app/assets/images/active_admin/orderable.png +0 -0
  174. data/app/assets/javascripts/active_admin/base.es6 +0 -23
  175. data/app/assets/javascripts/active_admin/initializers/filters.es6 +0 -45
  176. data/app/assets/javascripts/active_admin/lib/active_admin.es6 +0 -41
  177. data/app/assets/javascripts/active_admin/lib/per_page.es6 +0 -47
  178. /data/{vendor → app}/assets/stylesheets/active_admin/_normalize.scss +0 -0
  179. /data/app/{assets/javascripts/active_admin/ext/jquery-ui.es6 → javascript/active_admin/ext/jquery-ui.js} +0 -0
  180. /data/app/{assets/javascripts/active_admin/ext/jquery.es6 → javascript/active_admin/ext/jquery.js} +0 -0
  181. /data/app/{assets/javascripts/active_admin/initializers/datepicker.es6 → javascript/active_admin/initializers/datepicker.js} +0 -0
  182. /data/app/{assets/javascripts/active_admin/lib/has_many.es6 → javascript/active_admin/initializers/has-many.js} +0 -0
  183. /data/app/{assets/javascripts/active_admin/initializers/tabs.es6 → javascript/active_admin/initializers/tabs.js} +0 -0
@@ -2,9 +2,9 @@
2
2
  .comments {
3
3
 
4
4
  .active_admin_comment {
5
- clear: both;
5
+ @include clearfix;
6
6
  margin-top: 10px;
7
- margin-bottom: 40px;
7
+ margin-bottom: 20px;
8
8
  max-width: 700px;
9
9
 
10
10
  .active_admin_comment_meta {
@@ -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,14 @@
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
+ $menu-arrow-right-light-icon-url: 'data:image/gif;base64,R0lGODlhBAAHAKECAKqqqszMzPkVFfkVFSH+EUNyZWF0ZWQgd2l0aCBHSU1QACH5BAEKAAIALAAAAAAEAAcAAAIJlA0XKbH9nmAFADs=' !default;
9
+ $menu-arrow-right-dark-icon-url: 'data:image/gif;base64,R0lGODlhBAAHAMIEAG1tbWxsbElJSVBQUPkVFfkVFfkVFfkVFSH+EUNyZWF0ZWQgd2l0aCBHSU1QACH5BAEKAAEALAAAAAAEAAcAAAMKGKqy02G8OGeACQA7' !default;
10
+
11
+ $orderable-icon-url: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAABGCAYAAAAAVo4aAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAH5JREFUeNpi3LhlOwMU1AExGxDXwARYoHQLEFdD2cxAXAliMKFJgEAFEHfBJEHGMKLhMpgkTsAEdch/NNwCk2xCdiEQtML4LEgCf6EubUX3Cgh0oNvJ+P//f7wOGpUclRwYSZb41CyidNbB8giNM+9oXhmVHHm5bJjUSAABBgDKKiwMMUxPwgAAAABJRU5ErkJggg==' !default;
12
+
5
13
  // Colors
6
14
  $body-background-color: #FFF !default;
7
15
  $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,28 @@
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"
20
+
21
+ import ModalDialog from "./lib/modal-dialog";
22
+
23
+ function modal_dialog(message, inputs, callback) {
24
+ console.warn("ActiveAdmin.modal_dialog is deprecated in favor of ActiveAdmin.ModalDialog, please update usage.");
25
+ return ModalDialog(message, inputs, callback);
26
+ }
27
+
28
+ export { ModalDialog, modal_dialog };
@@ -1,10 +1,12 @@
1
+ import ModalDialog from "../lib/modal-dialog";
2
+
1
3
  const onDOMReady = function() {
2
4
  // Detach any previously attached handlers before re-attaching them.
3
5
  // This avoids double-registered handlers when Turbolinks is enabled
4
6
  $('.batch_actions_selector li a').off('click confirm:complete');
5
7
 
6
8
  //
7
- // Use ActiveAdmin.modal_dialog to prompt user if
9
+ // Use ModalDialog to prompt user if
8
10
  // confirmation is required for current Batch Action
9
11
  //
10
12
  $('.batch_actions_selector li a').on('click', function(event){
@@ -12,7 +14,7 @@ const onDOMReady = function() {
12
14
  event.stopPropagation(); // prevent Rails UJS click event
13
15
  event.preventDefault();
14
16
  if ((message = $(this).data('confirm'))) {
15
- ActiveAdmin.modal_dialog(message, $(this).data('inputs'), inputs => {
17
+ ModalDialog(message, $(this).data('inputs'), inputs => {
16
18
  $(this).trigger('confirm:complete', inputs);
17
19
  });
18
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;
@@ -6,7 +6,7 @@ ActiveAdmin.CheckboxToggler = class CheckboxToggler {
6
6
  this._bind();
7
7
  }
8
8
 
9
- option(key, value) {
9
+ option(_key, _value) {
10
10
  }
11
11
 
12
12
  _init() {
@@ -30,7 +30,7 @@ ActiveAdmin.CheckboxToggler = class CheckboxToggler {
30
30
  this.toggle_all_checkbox.change(() => this._didChangeToggleAllCheckbox());
31
31
  }
32
32
 
33
- _didChangeCheckbox(checkbox){
33
+ _didChangeCheckbox(_checkbox){
34
34
  const numChecked = this.checkboxes.filter(':checked').length;
35
35
 
36
36
  const allChecked = numChecked === this.checkboxes.length;
@@ -44,6 +44,6 @@ ActiveAdmin.CheckboxToggler = class CheckboxToggler {
44
44
  this.checkboxes.prop({ checked: setting });
45
45
  return setting;
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;
@@ -112,12 +111,6 @@ ActiveAdmin.DropdownMenu = class DropdownMenu {
112
111
  this.$nipple.css('left', menu_center - nipple_center);
113
112
  }
114
113
  }
115
- };
116
-
117
- $.widget.bridge('aaDropdownMenu', ActiveAdmin.DropdownMenu);
118
-
119
- const onDOMReady = () => $('.dropdown_menu').aaDropdownMenu();
114
+ }
120
115
 
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,14 +1,14 @@
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
- var elem, opts, wrapper;
4
+ var opts, wrapper;
5
5
  let type = inputs[name];
6
6
  if (/^(datepicker|checkbox|text|number)$/.test(type)) {
7
7
  wrapper = 'input';
8
8
  } else if (type === 'textarea') {
9
9
  wrapper = 'textarea';
10
10
  } else if ($.isArray(type)) {
11
- [wrapper, elem, opts, type] = ['select', 'option', type, ''];
11
+ [wrapper, opts, type] = ['select', type, ''];
12
12
  } else {
13
13
  throw new Error(`Unsupported input type: {${name}: ${type}}`);
14
14
  }
@@ -21,20 +21,20 @@ ActiveAdmin.modal_dialog = function(message, inputs, callback){
21
21
  const result = [];
22
22
 
23
23
  opts.forEach(v => {
24
- const $elem = $(`<${elem}/>`);
24
+ const $elem = $('<option></option>');
25
25
  if ($.isArray(v)) {
26
26
  $elem.text(v[0]).val(v[1]);
27
27
  } else {
28
28
  $elem.text(v);
29
29
  }
30
- result.push($elem.wrap('<div>').parent().html());
30
+ result.push($elem.wrap('<div></div>').parent().html());
31
31
  });
32
32
 
33
33
  return result;
34
34
  })()).join('') : '') +
35
35
  `</${wrapper}>` +
36
36
  "</li>";
37
- [wrapper, elem, opts, type, klass] = []; // unset any temporary variables
37
+ [wrapper, opts, type, klass] = []; // unset any temporary variables
38
38
  }
39
39
 
40
40
  html += "</ul></form>";
@@ -44,7 +44,7 @@ ActiveAdmin.modal_dialog = function(message, inputs, callback){
44
44
 
45
45
  form.dialog({
46
46
  modal: true,
47
- open(event, ui) {
47
+ open(_event, _ui) {
48
48
  $('body').trigger('modal_dialog:after_open', [form]);
49
49
  },
50
50
  dialogClass: 'active_admin_dialog',
@@ -58,4 +58,6 @@ ActiveAdmin.modal_dialog = function(message, inputs, callback){
58
58
  }
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
 
@@ -31,6 +33,6 @@ ActiveAdmin.TableCheckboxToggler = class TableCheckboxToggler extends ActiveAdmi
31
33
  .find(':checkbox')
32
34
  .click();
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
+ };
@@ -2,7 +2,7 @@
2
2
 
3
3
  <p>Someone has requested a link to change your password, and you can do this through the link below.</p>
4
4
 
5
- <p><%= link_to 'Change my password', edit_password_url(@resource, reset_password_token: @resource.reset_password_token) %></p>
5
+ <p><%= link_to 'Change my password', edit_password_url(@resource, reset_password_token: @token) %></p>
6
6
 
7
7
  <p>If you didn't request this, please ignore this email.</p>
8
8
  <p>Your password won't change until you access the link above and create a new one.</p>
@@ -1,7 +1,7 @@
1
1
  <p>Hello <%= @resource.email %>!</p>
2
2
 
3
- <p>Your account has been locked due to an excessive amount of unsuccessful sign in attempts.</p>
3
+ <p>Your account has been locked due to an excessive number of unsuccessful sign in attempts.</p>
4
4
 
5
5
  <p>Click the link below to unlock your account:</p>
6
6
 
7
- <p><%= link_to 'Unlock my account', unlock_url(@resource, unlock_token: @resource.unlock_token) %></p>
7
+ <p><%= link_to 'Unlock my account', unlock_url(@resource, unlock_token: @token) %></p>
@@ -6,10 +6,18 @@
6
6
  <title><%= [@page_title, ActiveAdmin.application.site_title(self)].compact.join(" | ") %></title>
7
7
 
8
8
  <% ActiveAdmin.application.stylesheets.each do |style, options| %>
9
- <%= stylesheet_link_tag style, options %>
9
+ <% if ActiveAdmin.application.use_webpacker %>
10
+ <%= stylesheet_pack_tag style, **options %>
11
+ <% else %>
12
+ <%= stylesheet_link_tag style, **options %>
13
+ <% end %>
10
14
  <% end %>
11
15
  <% ActiveAdmin.application.javascripts.each do |path| %>
12
- <%= javascript_include_tag path %>
16
+ <% if ActiveAdmin.application.use_webpacker %>
17
+ <%= javascript_pack_tag path %>
18
+ <% else %>
19
+ <%= javascript_include_tag path %>
20
+ <% end %>
13
21
  <% end %>
14
22
 
15
23
  <%= favicon_link_tag ActiveAdmin.application.favicon if ActiveAdmin.application.favicon %>
@@ -24,9 +32,11 @@
24
32
  <div id="wrapper">
25
33
 
26
34
  <div id="content_wrapper">
27
- <% flash_messages.each do |type, message| %>
28
- <%= content_tag :div, message, class: "flash flash_#{type}" %>
29
- <% end %>
35
+ <div class="flashes">
36
+ <% flash_messages.each do |type, message| %>
37
+ <%= content_tag :div, message, class: "flash flash_#{type}" %>
38
+ <% end %>
39
+ </div>
30
40
  <div id="active_admin_content">
31
41
  <%= yield %>
32
42
  </div>
@@ -8,7 +8,7 @@ ar:
8
8
  edit: "تعديل"
9
9
  delete: "حذف"
10
10
  delete_confirmation: "هل تريد تأكيد الحذف؟"
11
- new_model: "جديد %{model}"
11
+ new_model: "%{model} جديد"
12
12
  edit_model: "تعديل %{model}"
13
13
  delete_model: "حذف %{model}"
14
14
  details: "تفاصيل %{model}"
@@ -97,12 +97,12 @@ ar:
97
97
  password:
98
98
  title: "كلمة المرور"
99
99
  sign_up:
100
- title: "تسجيل الدخول"
101
- submit: "تسجيل الدخول"
100
+ title: "تسجيل"
101
+ submit: "تسجيل"
102
102
  login:
103
- title: "دخول"
103
+ title: "تسجيل الدخول"
104
104
  remember_me: "تذكرني"
105
- submit: "تسحيل"
105
+ submit: "تسجيل الدخول"
106
106
  reset_password:
107
107
  title: "هل نسيت كلمة المرور؟"
108
108
  submit: "استرجاع كلمة المرور"
@@ -117,7 +117,7 @@ ar:
117
117
  submit: "إعادة ارسال تعليمات التأكيد"
118
118
  links:
119
119
  sign_up: "التسجيل"
120
- sign_in: "دخول"
120
+ sign_in: "تسجيل الدخول"
121
121
  forgot_your_password: "هل نسيت كلمة المرور؟"
122
122
  sign_in_with_omniauth_provider: "تسجيل الدخول بـ %{provider}"
123
123
  resend_unlock_instructions: "إعادة إرسال تعليمات تنشيط الحساب"