activeadmin_addons_rails6 1.7.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (183) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Rakefile +24 -0
  4. data/app/assets/images/fileicons/file_extension_3gp.png +0 -0
  5. data/app/assets/images/fileicons/file_extension_7z.png +0 -0
  6. data/app/assets/images/fileicons/file_extension_ace.png +0 -0
  7. data/app/assets/images/fileicons/file_extension_ai.png +0 -0
  8. data/app/assets/images/fileicons/file_extension_aif.png +0 -0
  9. data/app/assets/images/fileicons/file_extension_aiff.png +0 -0
  10. data/app/assets/images/fileicons/file_extension_amr.png +0 -0
  11. data/app/assets/images/fileicons/file_extension_asf.png +0 -0
  12. data/app/assets/images/fileicons/file_extension_asx.png +0 -0
  13. data/app/assets/images/fileicons/file_extension_bat.png +0 -0
  14. data/app/assets/images/fileicons/file_extension_bin.png +0 -0
  15. data/app/assets/images/fileicons/file_extension_bmp.png +0 -0
  16. data/app/assets/images/fileicons/file_extension_bup.png +0 -0
  17. data/app/assets/images/fileicons/file_extension_cab.png +0 -0
  18. data/app/assets/images/fileicons/file_extension_cbr.png +0 -0
  19. data/app/assets/images/fileicons/file_extension_cda.png +0 -0
  20. data/app/assets/images/fileicons/file_extension_cdl.png +0 -0
  21. data/app/assets/images/fileicons/file_extension_cdr.png +0 -0
  22. data/app/assets/images/fileicons/file_extension_chm.png +0 -0
  23. data/app/assets/images/fileicons/file_extension_dat.png +0 -0
  24. data/app/assets/images/fileicons/file_extension_divx.png +0 -0
  25. data/app/assets/images/fileicons/file_extension_dll.png +0 -0
  26. data/app/assets/images/fileicons/file_extension_dmg.png +0 -0
  27. data/app/assets/images/fileicons/file_extension_doc.png +0 -0
  28. data/app/assets/images/fileicons/file_extension_docx.png +0 -0
  29. data/app/assets/images/fileicons/file_extension_dss.png +0 -0
  30. data/app/assets/images/fileicons/file_extension_dvf.png +0 -0
  31. data/app/assets/images/fileicons/file_extension_dwg.png +0 -0
  32. data/app/assets/images/fileicons/file_extension_eml.png +0 -0
  33. data/app/assets/images/fileicons/file_extension_eps.png +0 -0
  34. data/app/assets/images/fileicons/file_extension_exe.png +0 -0
  35. data/app/assets/images/fileicons/file_extension_fla.png +0 -0
  36. data/app/assets/images/fileicons/file_extension_flv.png +0 -0
  37. data/app/assets/images/fileicons/file_extension_gif.png +0 -0
  38. data/app/assets/images/fileicons/file_extension_gz.png +0 -0
  39. data/app/assets/images/fileicons/file_extension_hqx.png +0 -0
  40. data/app/assets/images/fileicons/file_extension_htm.png +0 -0
  41. data/app/assets/images/fileicons/file_extension_html.png +0 -0
  42. data/app/assets/images/fileicons/file_extension_ifo.png +0 -0
  43. data/app/assets/images/fileicons/file_extension_indd.png +0 -0
  44. data/app/assets/images/fileicons/file_extension_iso.png +0 -0
  45. data/app/assets/images/fileicons/file_extension_jar.png +0 -0
  46. data/app/assets/images/fileicons/file_extension_jpeg.png +0 -0
  47. data/app/assets/images/fileicons/file_extension_jpg.png +0 -0
  48. data/app/assets/images/fileicons/file_extension_lnk.png +0 -0
  49. data/app/assets/images/fileicons/file_extension_log.png +0 -0
  50. data/app/assets/images/fileicons/file_extension_m4a.png +0 -0
  51. data/app/assets/images/fileicons/file_extension_m4b.png +0 -0
  52. data/app/assets/images/fileicons/file_extension_m4p.png +0 -0
  53. data/app/assets/images/fileicons/file_extension_m4v.png +0 -0
  54. data/app/assets/images/fileicons/file_extension_mcd.png +0 -0
  55. data/app/assets/images/fileicons/file_extension_mdb.png +0 -0
  56. data/app/assets/images/fileicons/file_extension_mid.png +0 -0
  57. data/app/assets/images/fileicons/file_extension_mov.png +0 -0
  58. data/app/assets/images/fileicons/file_extension_mp2.png +0 -0
  59. data/app/assets/images/fileicons/file_extension_mp3.png +0 -0
  60. data/app/assets/images/fileicons/file_extension_mp4.png +0 -0
  61. data/app/assets/images/fileicons/file_extension_mpeg.png +0 -0
  62. data/app/assets/images/fileicons/file_extension_mpg.png +0 -0
  63. data/app/assets/images/fileicons/file_extension_msi.png +0 -0
  64. data/app/assets/images/fileicons/file_extension_mswmm.png +0 -0
  65. data/app/assets/images/fileicons/file_extension_ogg.png +0 -0
  66. data/app/assets/images/fileicons/file_extension_pdf.png +0 -0
  67. data/app/assets/images/fileicons/file_extension_png.png +0 -0
  68. data/app/assets/images/fileicons/file_extension_pps.png +0 -0
  69. data/app/assets/images/fileicons/file_extension_ppt.png +0 -0
  70. data/app/assets/images/fileicons/file_extension_pptx.png +0 -0
  71. data/app/assets/images/fileicons/file_extension_ps.png +0 -0
  72. data/app/assets/images/fileicons/file_extension_psd.png +0 -0
  73. data/app/assets/images/fileicons/file_extension_pst.png +0 -0
  74. data/app/assets/images/fileicons/file_extension_ptb.png +0 -0
  75. data/app/assets/images/fileicons/file_extension_pub.png +0 -0
  76. data/app/assets/images/fileicons/file_extension_qbb.png +0 -0
  77. data/app/assets/images/fileicons/file_extension_qbw.png +0 -0
  78. data/app/assets/images/fileicons/file_extension_qxd.png +0 -0
  79. data/app/assets/images/fileicons/file_extension_ram.png +0 -0
  80. data/app/assets/images/fileicons/file_extension_rar.png +0 -0
  81. data/app/assets/images/fileicons/file_extension_rm.png +0 -0
  82. data/app/assets/images/fileicons/file_extension_rmvb.png +0 -0
  83. data/app/assets/images/fileicons/file_extension_rtf.png +0 -0
  84. data/app/assets/images/fileicons/file_extension_sea.png +0 -0
  85. data/app/assets/images/fileicons/file_extension_ses.png +0 -0
  86. data/app/assets/images/fileicons/file_extension_sit.png +0 -0
  87. data/app/assets/images/fileicons/file_extension_sitx.png +0 -0
  88. data/app/assets/images/fileicons/file_extension_ss.png +0 -0
  89. data/app/assets/images/fileicons/file_extension_swf.png +0 -0
  90. data/app/assets/images/fileicons/file_extension_tgz.png +0 -0
  91. data/app/assets/images/fileicons/file_extension_thm.png +0 -0
  92. data/app/assets/images/fileicons/file_extension_tif.png +0 -0
  93. data/app/assets/images/fileicons/file_extension_tmp.png +0 -0
  94. data/app/assets/images/fileicons/file_extension_torrent.png +0 -0
  95. data/app/assets/images/fileicons/file_extension_ttf.png +0 -0
  96. data/app/assets/images/fileicons/file_extension_txt.png +0 -0
  97. data/app/assets/images/fileicons/file_extension_unknown.png +0 -0
  98. data/app/assets/images/fileicons/file_extension_vcd.png +0 -0
  99. data/app/assets/images/fileicons/file_extension_vob.png +0 -0
  100. data/app/assets/images/fileicons/file_extension_wav.png +0 -0
  101. data/app/assets/images/fileicons/file_extension_wma.png +0 -0
  102. data/app/assets/images/fileicons/file_extension_wmv.png +0 -0
  103. data/app/assets/images/fileicons/file_extension_wps.png +0 -0
  104. data/app/assets/images/fileicons/file_extension_xls.png +0 -0
  105. data/app/assets/images/fileicons/file_extension_xlsx.png +0 -0
  106. data/app/assets/images/fileicons/file_extension_xpi.png +0 -0
  107. data/app/assets/images/fileicons/file_extension_zip.png +0 -0
  108. data/app/assets/images/material/icons/keyboard_arrow_down.svg +4 -0
  109. data/app/assets/images/material/icons/keyboard_arrow_left.svg +4 -0
  110. data/app/assets/images/material/icons/keyboard_arrow_right.svg +4 -0
  111. data/app/assets/images/material/icons/keyboard_arrow_up.svg +4 -0
  112. data/app/assets/images/material/icons/today.svg +4 -0
  113. data/app/assets/javascripts/activeadmin_addons/all.js +753 -0
  114. data/app/assets/stylesheets/activeadmin_addons/addons/interactive_select_tag.scss +30 -0
  115. data/app/assets/stylesheets/activeadmin_addons/addons/material-datepicker.scss +173 -0
  116. data/app/assets/stylesheets/activeadmin_addons/addons/material-toggle_bool.scss +52 -0
  117. data/app/assets/stylesheets/activeadmin_addons/addons/toggle_bool.scss +52 -0
  118. data/app/assets/stylesheets/activeadmin_addons/all.scss +19 -0
  119. data/app/assets/stylesheets/activeadmin_addons/imports/jquery-datepicker.scss +1 -0
  120. data/app/assets/stylesheets/activeadmin_addons/imports/webpack/jquery-datepicker.scss +1 -0
  121. data/app/assets/stylesheets/activeadmin_addons/inputs/color-picker.scss +4 -0
  122. data/app/assets/stylesheets/activeadmin_addons/inputs/date-time-picker.scss +5 -0
  123. data/app/assets/stylesheets/activeadmin_addons/inputs/numeric-range-filter.scss +12 -0
  124. data/app/assets/stylesheets/activeadmin_addons/inputs/select2.scss +3 -0
  125. data/app/assets/stylesheets/activeadmin_addons/inputs/selected-list.scss +27 -0
  126. data/app/assets/stylesheets/activeadmin_addons/material.scss +53 -0
  127. data/app/assets/stylesheets/activeadmin_addons/vendor/palette-color-picker.scss +155 -0
  128. data/app/inputs/active_admin/inputs/select_input.rb +11 -0
  129. data/app/inputs/ajax_filter_input.rb +6 -0
  130. data/app/inputs/color_picker_input.rb +37 -0
  131. data/app/inputs/date_range_input.rb +5 -0
  132. data/app/inputs/date_time_picker_input.rb +64 -0
  133. data/app/inputs/nested_level_input.rb +51 -0
  134. data/app/inputs/nested_select_input.rb +88 -0
  135. data/app/inputs/numeric_range_filter_input.rb +27 -0
  136. data/app/inputs/range_select_input.rb +6 -0
  137. data/app/inputs/search_select_filter_input.rb +12 -0
  138. data/app/inputs/search_select_input.rb +29 -0
  139. data/app/inputs/selected_list_input.rb +54 -0
  140. data/app/inputs/tags_input.rb +55 -0
  141. data/app/javascript/activeadmin_addons/addons/interactive_select_tag.js +95 -0
  142. data/app/javascript/activeadmin_addons/addons/toggle_bool.js +39 -0
  143. data/app/javascript/activeadmin_addons/all.js +14 -0
  144. data/app/javascript/activeadmin_addons/config.js +10 -0
  145. data/app/javascript/activeadmin_addons/inputs/color-picker.js +16 -0
  146. data/app/javascript/activeadmin_addons/inputs/date-time-picker.js +28 -0
  147. data/app/javascript/activeadmin_addons/inputs/nested-select.js +170 -0
  148. data/app/javascript/activeadmin_addons/inputs/search-select.js +76 -0
  149. data/app/javascript/activeadmin_addons/inputs/select2.js +52 -0
  150. data/app/javascript/activeadmin_addons/inputs/selected-list.js +107 -0
  151. data/app/javascript/activeadmin_addons/inputs/tags.js +76 -0
  152. data/app/javascript/activeadmin_addons/vendor/jquery_palette_color_picker/palette-color-picker.js +265 -0
  153. data/lib/activeadmin_addons.rb +27 -0
  154. data/lib/activeadmin_addons/active_admin_config.rb +9 -0
  155. data/lib/activeadmin_addons/addons/attachment_builder.rb +60 -0
  156. data/lib/activeadmin_addons/addons/bool_builder.rb +31 -0
  157. data/lib/activeadmin_addons/addons/image_builder.rb +12 -0
  158. data/lib/activeadmin_addons/addons/list_builder.rb +73 -0
  159. data/lib/activeadmin_addons/addons/number_builder.rb +25 -0
  160. data/lib/activeadmin_addons/addons/state_builder.rb +39 -0
  161. data/lib/activeadmin_addons/addons/tag_builder.rb +91 -0
  162. data/lib/activeadmin_addons/addons/toggle_bool_builder.rb +44 -0
  163. data/lib/activeadmin_addons/engine.rb +19 -0
  164. data/lib/activeadmin_addons/support/custom_builder.rb +91 -0
  165. data/lib/activeadmin_addons/support/enumerize_formtastic_support.rb +18 -0
  166. data/lib/activeadmin_addons/support/input_base.rb +53 -0
  167. data/lib/activeadmin_addons/support/input_helpers/filter_input.rb +8 -0
  168. data/lib/activeadmin_addons/support/input_helpers/filter_input_methods.rb +32 -0
  169. data/lib/activeadmin_addons/support/input_helpers/input_html_helpers.rb +43 -0
  170. data/lib/activeadmin_addons/support/input_helpers/input_methods.rb +67 -0
  171. data/lib/activeadmin_addons/support/input_helpers/input_options_handler.rb +90 -0
  172. data/lib/activeadmin_addons/support/input_helpers/select_helpers.rb +89 -0
  173. data/lib/activeadmin_addons/support/set_datepicker.rb +13 -0
  174. data/lib/activeadmin_addons/version.rb +3 -0
  175. data/lib/activeadmin_addons_rails_6.rb +5 -0
  176. data/lib/generators/activeadmin_addons/assets/assets_generator.rb +53 -0
  177. data/lib/generators/activeadmin_addons/install/install_generator.rb +19 -0
  178. data/lib/generators/activeadmin_addons/install/templates/initializer.rb +12 -0
  179. data/lib/generators/activeadmin_addons/webpacker/webpacker_generator.rb +35 -0
  180. data/lib/tasks/activeadmin_addons_tasks.rake +4 -0
  181. data/vendor/assets/select2/select2.css +481 -0
  182. data/vendor/assets/select2/select2.full.js +6820 -0
  183. metadata +544 -0
@@ -0,0 +1,6 @@
1
+ class RangeSelectInput < NumericRangeFilterInput
2
+ def to_html
3
+ warn "[DEPRECATION] use :numeric_range_filter instead of :range_select"
4
+ super
5
+ end
6
+ end
@@ -0,0 +1,12 @@
1
+ class SearchSelectFilterInput < SearchSelectInput
2
+ include ActiveAdminAddons::FilterInput
3
+
4
+ def load_control_attributes
5
+ super
6
+ load_data_attr(:width, default: "resolve")
7
+ end
8
+
9
+ def input_method
10
+ eq_input_name
11
+ end
12
+ end
@@ -0,0 +1,29 @@
1
+ class SearchSelectInput < ActiveAdminAddons::InputBase
2
+ include ActiveAdminAddons::SelectHelpers
3
+
4
+ def render_custom_input
5
+ concat(label_html)
6
+ concat(builder.select(input_method,
7
+ initial_collection_to_select_options, {}, input_html_options))
8
+ end
9
+
10
+ def input_method
11
+ valid_method
12
+ end
13
+
14
+ def load_control_attributes
15
+ load_class(@options[:class])
16
+ load_data_attr(:fields, default: ["name"], formatter: :to_json)
17
+ load_data_attr(:predicate, default: "contains")
18
+ load_data_attr(:url, default: url_from_method)
19
+ load_data_attr(:response_root, default: tableize_method)
20
+ load_data_attr(:display_name, default: "name")
21
+ load_data_attr(:minimum_input_length, default: 1)
22
+ load_data_attr(:width, default: "80%")
23
+ load_data_attr(
24
+ :order,
25
+ value: @options[:order_by],
26
+ default: get_data_attr_value(:fields).first.to_s + "_desc"
27
+ )
28
+ end
29
+ end
@@ -0,0 +1,54 @@
1
+ class SelectedListInput < ActiveAdminAddons::InputBase
2
+ def render_custom_input
3
+ concat(label_html)
4
+ concat(render_control_wrapper)
5
+ end
6
+
7
+ def load_control_attributes
8
+ load_class(@options[:class])
9
+ load_data_attr(:model, value: model_name)
10
+ load_data_attr(:method, value: method)
11
+ load_data_attr(:url, default: url_from_method)
12
+ load_data_attr(:response_root, default: tableize_method)
13
+ load_data_attr(:fields, default: ["name"], formatter: :to_json)
14
+ load_data_attr(:predicate, default: "contains")
15
+ load_data_attr(:display_name, default: "name")
16
+ load_data_attr(:minimum_input_length, default: 1)
17
+ load_data_attr(:width, default: "100%")
18
+ load_data_attr(
19
+ :order,
20
+ value: @options[:order_by],
21
+ default: get_data_attr_value(:fields).first.to_s + "_desc"
22
+ )
23
+ end
24
+
25
+ private
26
+
27
+ def render_control_wrapper
28
+ template.content_tag(:div, class: "selected-list-container") do
29
+ template.content_tag(label_html)
30
+ template.concat(render_items_list)
31
+ template.concat(builder.select(build_virtual_attr, [], {}, input_html_options))
32
+ end
33
+ end
34
+
35
+ def render_items_list
36
+ template.content_tag(:div, id: selected_values_id, class: "selected-values") do
37
+ template.concat(build_hidden_control(empty_input_id, method_to_input_array_name, ""))
38
+ input_related_items.each { |item| template.concat(render_item(item)) }
39
+ end
40
+ end
41
+
42
+ def render_item(item)
43
+ template.content_tag(:div, id: method_to_input_id(item.id), class: "selected-item") do
44
+ template.concat(item_label(item))
45
+ template.concat(
46
+ build_hidden_control(method_to_input_id(item.id), method_to_input_array_name, item.id.to_s)
47
+ )
48
+ end
49
+ end
50
+
51
+ def item_label(item)
52
+ item.send(@options[:display_name] || "name")
53
+ end
54
+ end
@@ -0,0 +1,55 @@
1
+ class TagsInput < ActiveAdminAddons::InputBase
2
+ include ActiveAdminAddons::SelectHelpers
3
+
4
+ def render_custom_input
5
+ if active_record_select?
6
+ return render_collection_tags
7
+ end
8
+
9
+ render_array_tags
10
+ end
11
+
12
+ def load_control_attributes
13
+ load_data_attr(:model, value: model_name)
14
+ load_data_attr(:method, value: method)
15
+ load_data_attr(:width, default: "80%")
16
+
17
+ if active_record_select?
18
+ load_data_attr(:relation, value: true)
19
+ load_data_attr(:collection, value: collection_to_select_options, formatter: :to_json)
20
+ else
21
+ load_data_attr(:collection, value: array_to_select_options, formatter: :to_json)
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def render_array_tags
28
+ render_tags_control { build_hidden_control(prefixed_method, method_to_input_name, input_value) }
29
+ end
30
+
31
+ def render_collection_tags
32
+ render_tags_control { render_selected_hidden_items }
33
+ end
34
+
35
+ def render_tags_control(&block)
36
+ concat(label_html)
37
+ concat(block.call)
38
+ concat(builder.select(build_virtual_attr, [], {}, input_html_options))
39
+ end
40
+
41
+ def render_selected_hidden_items
42
+ template.content_tag(:div, id: selected_values_id) do
43
+ template.concat(build_hidden_control(empty_input_id, method_to_input_array_name, ""))
44
+ input_value.each do |item_id|
45
+ template.concat(
46
+ build_hidden_control(
47
+ method_to_input_id(item_id),
48
+ method_to_input_array_name,
49
+ item_id.to_s
50
+ )
51
+ )
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,95 @@
1
+ var initializer = function() {
2
+ configureInteractiveSelect(document);
3
+
4
+ $(document).on('has_many_add:after', function(event, container) {
5
+ configureInteractiveSelect(container);
6
+ });
7
+
8
+ function configureInteractiveSelect(container) {
9
+ $('.interactive-tag-select select', container).each(function(i, el) {
10
+ setupSelect2(el);
11
+ });
12
+
13
+ function setupSelect2(select) {
14
+ var selectConfig = {
15
+ placeholder: '',
16
+ allowClear: false,
17
+ width: '125px',
18
+ };
19
+
20
+ $(select).select2(selectConfig);
21
+
22
+ // Related with https://github.com/select2/select2/issues/3320
23
+ $(select).on('select2:unselecting', function() {
24
+ $(this).data('unselecting', true);
25
+ }).on('select2:open', function() {
26
+ if ($(this).data('unselecting')) {
27
+ $(this).select2('close').removeData('unselecting');
28
+ }
29
+ });
30
+ }
31
+ }
32
+
33
+ $('.interactive-tag').click(function(e) {
34
+ var tag = $(e.target).parent();
35
+ var model = tag.data('model');
36
+ var objectId = tag.data('object_id');
37
+ var field = tag.data('field');
38
+ var selectTag = $('.' + model + '-' + field + '-' + objectId + '-select');
39
+ selectTag.removeClass('select-container-hidden');
40
+ tag.addClass('interactive-tag-hidden');
41
+ selectTag.find('select').select2('open');
42
+ });
43
+
44
+ $('.interactive-tag-select').on('select2:close', function(e) {
45
+ var selectTag = $(e.target).parent();
46
+
47
+ var model = selectTag.data('model');
48
+ var objectId = selectTag.data('object_id');
49
+ var field = selectTag.data('field');
50
+
51
+ var tagContainer = $('.' + model + '-' + field + '-' + objectId + '-tag');
52
+ var statusTag = tagContainer.find('.status_tag');
53
+
54
+ var newValue = e.target.value;
55
+ var newText = e.target.selectedOptions[0].text;
56
+ var oldValue = selectTag.data('value');
57
+
58
+ if (newValue === oldValue) {
59
+ selectTag.addClass('select-container-hidden');
60
+ tagContainer.removeClass('interactive-tag-hidden');
61
+ } else {
62
+ var url = tagContainer.data('url');
63
+ var data = { id: objectId };
64
+ data[model] = {};
65
+ data[model][field] = newValue;
66
+
67
+ $.ajax({
68
+ url: url,
69
+ data: data,
70
+ dataType: 'json',
71
+ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') },
72
+ error: function() {
73
+ var errorMsg = 'Error: Update Unsuccessful';
74
+ console.log(errorMsg);
75
+ },
76
+ success: function() {
77
+ statusTag.text(newText);
78
+ statusTag.removeClass(oldValue);
79
+ statusTag.addClass(newValue);
80
+
81
+ tagContainer.data('value', newValue);
82
+ selectTag.data('value', newValue);
83
+ },
84
+ complete: function() {
85
+ selectTag.addClass('select-container-hidden');
86
+ tagContainer.removeClass('interactive-tag-hidden');
87
+ },
88
+ type: 'PATCH',
89
+ });
90
+ }
91
+ });
92
+ };
93
+
94
+ $(initializer);
95
+ $(document).on('turbolinks:load', initializer);
@@ -0,0 +1,39 @@
1
+ var initializer = function() {
2
+ $('.toggle-bool-switch').click(function(e) {
3
+ var boolSwitch = $(e.target);
4
+
5
+ var objectId = boolSwitch.data('object_id');
6
+ var model = boolSwitch.data('model');
7
+ var field = boolSwitch.data('field');
8
+
9
+ var url = boolSwitch.data('url');
10
+ var value = boolSwitch.data('value');
11
+ var successMessage = boolSwitch.data('success_message');
12
+ var data = { id: objectId };
13
+ data[model] = {};
14
+ data[model][field] = !value;
15
+
16
+ $.ajax({
17
+ url: url,
18
+ data: data,
19
+ dataType: 'json',
20
+ headers : {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
21
+ error: function() {
22
+ var errorMsg = 'Error: Update Unsuccessful';
23
+ alert(errorMsg);
24
+ },
25
+ success: function() {
26
+ boolSwitch.data('value', !value);
27
+ boolSwitch.toggleClass('on');
28
+ if (!boolSwitch.hasClass('notify-success')) return;
29
+ $(function() {
30
+ setTimeout(alert(successMessage), 500);
31
+ });
32
+ },
33
+ type: 'PATCH',
34
+ });
35
+ });
36
+ };
37
+
38
+ $(initializer);
39
+ $(document).on('turbolinks:load', initializer);
@@ -0,0 +1,14 @@
1
+ import 'select2';
2
+ import 'jquery-datetimepicker';
3
+ import './vendor/jquery_palette_color_picker/palette-color-picker';
4
+
5
+ import './config';
6
+ import './inputs/select2';
7
+ import './inputs/search-select';
8
+ import './inputs/nested-select';
9
+ import './inputs/tags';
10
+ import './inputs/selected-list';
11
+ import './inputs/date-time-picker';
12
+ import './inputs/color-picker';
13
+ import './addons/toggle_bool';
14
+ import './addons/interactive_select_tag';
@@ -0,0 +1,10 @@
1
+ var initializer = function() {
2
+ window.ActiveadminAddons = {
3
+ config: {
4
+ defaultSelect: $('body').data('default-select'),
5
+ },
6
+ };
7
+ };
8
+
9
+ $(initializer);
10
+ $(document).on('turbolinks:load', initializer);
@@ -0,0 +1,16 @@
1
+ var initializer = function() {
2
+ setupColorPicker();
3
+
4
+ $(document).on('has_many_add:after', setupColorPicker);
5
+
6
+ function setupColorPicker() {
7
+ $('.color-picker-input').each(function(i, el) {
8
+ $(el).paletteColorPicker({
9
+ 'clear_btn': 'last',
10
+ });
11
+ });
12
+ }
13
+ };
14
+
15
+ $(initializer);
16
+ $(document).on('turbolinks:load', initializer);
@@ -0,0 +1,28 @@
1
+ var initializer = function() {
2
+ setupDateTimePicker(document);
3
+
4
+ $(document).on('has_many_add:after', '.has_many_container', function(event, fieldset) {
5
+ return setupDateTimePicker(fieldset);
6
+ });
7
+
8
+ function setupDateTimePicker(container) {
9
+ var defaults = {
10
+ formatDate: 'y-m-d',
11
+ format: 'Y-m-d H:i',
12
+ allowBlank: true,
13
+ defaultSelect: false,
14
+ validateOnBlur: false,
15
+ scrollInput: false,
16
+ };
17
+
18
+ var entries = $(container).find('input.date-time-picker-input');
19
+ return entries.each(function(index, entry) {
20
+ var options = $(entry).data('picker-options');
21
+ var mixedOptions = $.extend(defaults, options);
22
+ return $(entry).datetimepicker(mixedOptions);
23
+ });
24
+ }
25
+ };
26
+
27
+ $(initializer);
28
+ $(document).on('turbolinks:load', initializer);
@@ -0,0 +1,170 @@
1
+ $.fn.select2.amd.define('select2/data/nestedCustomAdapter', ['select2/data/array', 'select2/utils'], function(ArrayData, Utils) {
2
+ function CustomData($element, options) {
3
+ CustomData.__super__.constructor.call(this, $element, options);
4
+ }
5
+
6
+ Utils.Extend(CustomData, ArrayData);
7
+
8
+ CustomData.prototype.query = function(params, callback) {
9
+ var data = { results: [] };
10
+ var element = this.$element;
11
+ var collection = element.data('collection');
12
+ var parent = element.data('parent');
13
+ var parentId = element.data('parent-id');
14
+
15
+ collection.forEach(function(record) {
16
+ var regex = new RegExp(params.term, 'i');
17
+ var matched = !!record.text.match(regex);
18
+
19
+ if ((!parent || record[parent] == parentId) && matched) {
20
+ data.results.push(record);
21
+ }
22
+ });
23
+
24
+ callback(data);
25
+ };
26
+
27
+ CustomData.prototype.current = function(callback) {
28
+ var currentOption = null;
29
+ var element = this.$element;
30
+ var selectedOption = element.data('selected');
31
+ var collection = element.data('collection');
32
+ var data = [];
33
+
34
+ $.each(collection, function(index, option) {
35
+ if (!!selectedOption && option.id == selectedOption.id) {
36
+ currentOption = option;
37
+ element.data('selected', null);
38
+ return;
39
+ }
40
+
41
+ if (element.val() == option.id) {
42
+ currentOption = option;
43
+ return;
44
+ }
45
+ });
46
+
47
+ if (currentOption) {
48
+ data.push(currentOption);
49
+ }
50
+
51
+ callback(data);
52
+ };
53
+
54
+ return CustomData;
55
+ });
56
+
57
+ var initializer = function() {
58
+ configureSelect2(document);
59
+
60
+ $(document).on('has_many_add:after', function(event, container) {
61
+ configureSelect2(container);
62
+ });
63
+
64
+ function configureSelect2(container) {
65
+ var INVALID_PARENT_ID = -1;
66
+
67
+ $('.nested-level-input', container).each(function(i, el) {
68
+ var element = $(el);
69
+ var url = element.data('url');
70
+ var fields = element.data('fields');
71
+ var predicate = element.data('predicate');
72
+ var filters = element.data('filters');
73
+ var displayName = element.data('display-name');
74
+ var parent = element.data('parent');
75
+ var width = element.data('width');
76
+ var model = element.data('model');
77
+ var responseRoot = element.data('response-root');
78
+ var collection = element.data('collection');
79
+ var minimumInputLength = element.data('minimum-input-length');
80
+ var order = element.data('order');
81
+ var parentId = element.data('parent-id');
82
+ var selectInstance;
83
+
84
+ var select2Config = {
85
+ width: width,
86
+ minimumInputLength: minimumInputLength,
87
+ placeholder: '',
88
+ allowClear: true,
89
+ };
90
+
91
+ if (collection) {
92
+ select2Config.dataAdapter = $.fn.select2.amd.require('select2/data/nestedCustomAdapter');
93
+ } else {
94
+ var ajaxConfig = {
95
+ url: url,
96
+ dataType: 'json',
97
+ delay: 250,
98
+ cache: true,
99
+ data: function(params) {
100
+ var textQuery = { m: 'or' };
101
+ fields.forEach(function(field) {
102
+ if (field == 'id') {
103
+ textQuery[field + '_eq'] = params.term;
104
+ } else {
105
+ textQuery[field + '_' + predicate] = params.term;
106
+ }
107
+ });
108
+
109
+ var query = {
110
+ order: order,
111
+ q: {
112
+ groupings: [textQuery],
113
+ combinator: 'and',
114
+ },
115
+ };
116
+
117
+ if (!!parent) {
118
+ query.q[parent + '_eq'] = parentId;
119
+ }
120
+
121
+ Object.assign(query.q, filters);
122
+
123
+ return query;
124
+ },
125
+ processResults: function(data) {
126
+ if (data.constructor == Object) {
127
+ data = data[responseRoot];
128
+ }
129
+
130
+ return {
131
+ results: jQuery.map(data, function(resource) {
132
+ if (!resource[displayName]) {
133
+ resource[displayName] = 'No display name for id #' + resource.id.toString();
134
+ }
135
+ return {
136
+ id: resource.id,
137
+ text: resource[displayName].toString(),
138
+ };
139
+ }),
140
+ };
141
+ },
142
+ };
143
+
144
+ select2Config.ajax = ajaxConfig;
145
+ }
146
+
147
+ selectInstance = element.select2(select2Config);
148
+
149
+ function setParentValue(e) {
150
+ selectInstance.val(null).trigger('select2:select').trigger('change');
151
+ parentId = (e.params && e.params.data.id) ? e.params.data.id : INVALID_PARENT_ID;
152
+ element.data('parent-id', parentId);
153
+ }
154
+
155
+ if (!!parent) {
156
+ var parentSelectorId = '#' + model + '_' + parent;
157
+ if (!$(parentSelectorId).length) {
158
+ parentSelectorId = $(container).find('*[id*=' + parent + ']')[0];
159
+ }
160
+ var parentSelector = $(parentSelectorId)[0];
161
+
162
+ $(parentSelector).on('select2:select', setParentValue);
163
+ $(parentSelector).on('select2:unselect', setParentValue);
164
+ }
165
+ });
166
+ }
167
+ };
168
+
169
+ $(initializer);
170
+ $(document).on('turbolinks:load', initializer);