activeadmin_addons_rails6 1.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,27 @@
1
+ module ActiveadminAddons
2
+ extend self
3
+
4
+ attr_writer :default_select, :datetime_picker_default_options, :datetime_picker_input_format
5
+
6
+ def default_select
7
+ return "select2" unless @default_select
8
+ @default_select
9
+ end
10
+
11
+ def datetime_picker_default_options
12
+ return {} unless @datetime_picker_default_options
13
+ @datetime_picker_default_options
14
+ end
15
+
16
+ def datetime_picker_input_format
17
+ return "%Y-%m-%d %H:%M" unless @datetime_picker_input_format
18
+ @datetime_picker_input_format
19
+ end
20
+
21
+ def setup
22
+ yield self
23
+ require "activeadmin_addons"
24
+ end
25
+ end
26
+
27
+ require_relative './activeadmin_addons/engine'
@@ -0,0 +1,9 @@
1
+ class ActiveAdmin::Views::Pages::Base
2
+ alias_method :original_build, :build
3
+
4
+ def build(*args)
5
+ original_build(args)
6
+ body = get_elements_by_tag_name("body").first
7
+ body.set_attribute "data-default-select", ActiveadminAddons.default_select
8
+ end
9
+ end
@@ -0,0 +1,60 @@
1
+ module ActiveAdminAddons
2
+ class AttachmentBuilder < CustomBuilder
3
+ KNOWN_EXTENSIONS = %w{
4
+ 3gp 7z ace ai aif aiff amr asf asx bat bin bmp bup cab cbr cda cdl cdr chm
5
+ dat divx dll dmg doc docx dss dvf dwg eml eps exe fla flv gif gz hqx htm html
6
+ ifo indd iso jar jpeg jpg lnk log m4a m4b m4p m4v mcd mdb mid mov mp2 mp3 mp4
7
+ mpeg mpg msi mswmm ogg pdf png pps ppt pptx ps psd pst ptb pub qbb qbw qxd ram
8
+ rar rm rmvb rtf sea ses sit sitx ss swf tgz thm tif tmp torrent ttf txt
9
+ vcd vob wav wma wmv wps xls xlsx xpi zip
10
+ }
11
+
12
+ def icon_for_filename(filename)
13
+ for_ext File.extname(filename.to_s)
14
+ end
15
+
16
+ def for_ext(file_extension)
17
+ ext = file_extension.start_with?(".") ? file_extension[1..-1] : file_extension
18
+ ext.downcase!
19
+ ext = "unknown" unless KNOWN_EXTENSIONS.include?(ext)
20
+ "fileicons/file_extension_#{ext}.png"
21
+ end
22
+
23
+ def build_label
24
+ icon = icon_for_filename(file.original_filename)
25
+ style = { width: "20", height: "20", style: "margin-right: 5px; vertical-align: middle;" }
26
+ icon_img = context.image_tag(icon, style)
27
+ text = label_text
28
+
29
+ context.content_tag(:span) do
30
+ context.concat(icon_img)
31
+ context.safe_concat(text)
32
+ end
33
+ end
34
+
35
+ def label_text
36
+ label = if options[:label].nil?
37
+ file.original_filename
38
+ elsif options[:label].is_a? Proc
39
+ options[:label].call(model).to_s
40
+ else
41
+ options[:label].to_s
42
+ end
43
+
44
+ options[:truncate] ? context.truncate(label) : label
45
+ end
46
+
47
+ def render
48
+ raise "you need to pass a paperclip attribute" unless file.respond_to?(:url)
49
+ options[:truncate] = options.fetch(:truncate, true)
50
+ return nil unless file.file?
51
+ context.link_to(build_label, file.url, target: "_blank", class: "attachment-link")
52
+ end
53
+
54
+ def file
55
+ model.send(attribute)
56
+ end
57
+ end
58
+ end
59
+
60
+ ActiveAdminAddons::AttachmentBuilder.create_view_methods
@@ -0,0 +1,31 @@
1
+ module ActiveAdminAddons
2
+ class BoolBuilder < CustomBuilder
3
+ DEFAULT_BOOLEAN_TRUE = "&#x2714;"
4
+ DEFAULT_BOOLEAN_FALSE = "&#x2717;"
5
+
6
+ def render
7
+ if data
8
+ i18n_lookup("true_value", DEFAULT_BOOLEAN_TRUE)
9
+ else
10
+ i18n_lookup("false_value", DEFAULT_BOOLEAN_FALSE)
11
+ end
12
+ end
13
+
14
+ private
15
+
16
+ def i18n_lookup(key, last_default)
17
+ model_name = model.class.model_name.i18n_key
18
+
19
+ scope = "activeadmin.addons.boolean"
20
+ value = I18n.t("models.#{model_name}.#{attribute}.#{key}", default: "", scope: scope)
21
+ value = I18n.t("models.#{model_name}.#{key}", default: "", scope: scope) if value.empty?
22
+ value = I18n.t("default.#{key}", default: last_default, scope: scope) if value.empty?
23
+
24
+ context.content_tag(:span, class: "bool-value #{key.dasherize}") do
25
+ context.safe_concat(value.html_safe)
26
+ end
27
+ end
28
+ end
29
+ end
30
+
31
+ ActiveAdminAddons::BoolBuilder.create_view_methods
@@ -0,0 +1,12 @@
1
+ module ActiveAdminAddons
2
+ class ImageBuilder < CustomBuilder
3
+ def render
4
+ return nil if data.nil?
5
+ raise "you need to pass a paperclip image attribute" unless data.respond_to?(:url)
6
+ style = options.fetch(:style, :original)
7
+ context.image_tag(data.url(style)) if data.file?
8
+ end
9
+ end
10
+ end
11
+
12
+ ActiveAdminAddons::ImageBuilder.create_view_methods
@@ -0,0 +1,73 @@
1
+ module ActiveAdminAddons
2
+ class ListBuilder < CustomBuilder
3
+ def render
4
+ options[:localize] = options.fetch(:localize, false)
5
+ options[:list_type] = options.fetch(:list_type, :ul)
6
+
7
+ return if data.nil?
8
+
9
+ raise "invalid list type (ul, ol)" unless [:ul, :ol].include?(options[:list_type])
10
+ raise "list must be Array or Hash" if !data.is_a?(Hash) && !data.is_a?(Array)
11
+
12
+ @level = []
13
+ render_list(data)
14
+ end
15
+
16
+ def render_list(_data)
17
+ _data.is_a?(Array) ? render_array(_data) : render_hash(_data)
18
+ end
19
+
20
+ def list?(_data)
21
+ _data.is_a?(Array) || _data.is_a?(Hash)
22
+ end
23
+
24
+ def localized_value(model, attribute)
25
+ I18n.t("addons_list.#{model.class.name.underscore}.#{attribute}.#{@level.join('_')}")
26
+ end
27
+
28
+ def render_array(_data)
29
+ context.content_tag(options[:list_type]) do
30
+ _data.each do |value|
31
+ @level.push(value)
32
+ if list? value
33
+ value = render_list(value)
34
+ elsif !!options[:localize]
35
+ value = localized_value(model, attribute)
36
+ end
37
+ @level.pop
38
+ context.concat(context.content_tag(:li, value))
39
+ end
40
+ end
41
+ end
42
+
43
+ def render_hash(_data)
44
+ context.content_tag(options[:list_type]) do
45
+ _data.keys.each do |key|
46
+ @level.push(key)
47
+ label = !!options[:localize] ? localized_value(model, attribute) : key
48
+ value = _data[key]
49
+ value = render_list(value) if list? value
50
+ @level.pop
51
+ hash_to_html(value, label)
52
+ end
53
+ end
54
+ end
55
+
56
+ def hash_to_html(_value, _label)
57
+ context.concat(context.content_tag(:li) do
58
+ if _value.blank?
59
+ context.content_tag(:span, _label)
60
+ else
61
+ context.content_tag(:span) do
62
+ context.concat("#{_label}:&nbsp".html_safe)
63
+ context.concat(context.content_tag(:span) do
64
+ context.content_tag(:i, _value)
65
+ end)
66
+ end
67
+ end
68
+ end)
69
+ end
70
+ end
71
+ end
72
+
73
+ ActiveAdminAddons::ListBuilder.create_view_methods
@@ -0,0 +1,25 @@
1
+ module ActiveAdminAddons
2
+ class NumberBuilder < CustomBuilder
3
+ NUMBER_TYPES = {
4
+ currency: :number_to_currency,
5
+ human: :number_to_human,
6
+ human_size: :number_to_human_size,
7
+ percentage: :number_to_percentage,
8
+ phone: :number_to_phone,
9
+ delimiter: :number_with_delimiter,
10
+ precision: :number_with_precision
11
+ }
12
+
13
+ def render
14
+ options[:as] = options.fetch(:as, :delimiter)
15
+
16
+ if !NUMBER_TYPES.keys.include?(options[:as])
17
+ raise "Invalid number type. Options are: #{NUMBER_TYPES.keys}"
18
+ end
19
+
20
+ context.send(NUMBER_TYPES[options[:as]], data, options)
21
+ end
22
+ end
23
+ end
24
+
25
+ ActiveAdminAddons::NumberBuilder.create_view_methods
@@ -0,0 +1,39 @@
1
+ module ActiveAdminAddons
2
+ class StateBuilder < CustomBuilder
3
+ DEFAULT_CLASS_BINDINGS = {
4
+ accepted: "ok",
5
+ confirmed: "ok",
6
+ ready: "ok",
7
+ rejected: "error",
8
+ canceled: "error"
9
+ }
10
+
11
+ def render
12
+ raise "you need to install AASM gem first" unless defined? AASM
13
+ raise "the #{attribute} is not an AASM state" unless state_attribute?
14
+ context.status_tag(model.aasm(machine_name).human_state, class: status_class_for_model)
15
+ end
16
+
17
+ private
18
+
19
+ def state_attribute?
20
+ model.class.respond_to?(:aasm) &&
21
+ attribute.present? &&
22
+ model.class.aasm(machine_name).attribute_name == attribute.to_sym
23
+ end
24
+
25
+ def status_class_for_model
26
+ class_bindings[data.to_sym] || data
27
+ end
28
+
29
+ def machine_name
30
+ @machine_name ||= options.fetch(:machine, :default)
31
+ end
32
+
33
+ def class_bindings
34
+ @class_bindings ||= DEFAULT_CLASS_BINDINGS.merge(options[:states] || {})
35
+ end
36
+ end
37
+ end
38
+
39
+ ActiveAdminAddons::StateBuilder.create_view_methods
@@ -0,0 +1,91 @@
1
+ module ActiveAdminAddons
2
+ class TagBuilder < CustomBuilder
3
+ def render
4
+ @enum_attr = if enumerize_attr?
5
+ :enumerize
6
+ elsif rails_enum_attr?
7
+ :enum
8
+ end
9
+
10
+ raise "you need to pass an enumerize or enum attribute" unless @enum_attr
11
+ append_tag
12
+ end
13
+
14
+ def append_tag
15
+ return context.status_tag(display_data, class: data) unless options[:interactive]
16
+
17
+ select_tag
18
+ end
19
+
20
+ def select_tag
21
+ context.div class: 'tag-select-container' do
22
+ context.div(interactive_tag_params) do
23
+ context.status_tag(display_data, class: data)
24
+ end
25
+
26
+ context.div(interactive_tag_select_params) do
27
+ context.select do
28
+ possible_values.each do |val|
29
+ context.option(value: val, selected: val == data) do
30
+ context.text_node val.capitalize
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ def display_data
39
+ @enum_attr == :enumerize ? data.text : data
40
+ end
41
+
42
+ def interactive_params(klass)
43
+ {
44
+ 'class' => klass,
45
+ 'data-model' => class_name,
46
+ 'data-object_id' => model.id,
47
+ 'data-field' => attribute,
48
+ 'data-url' => context.resource_path(model),
49
+ 'data-value' => data
50
+ }
51
+ end
52
+
53
+ def interactive_tag_params
54
+ interactive_tag_class = 'interactive-tag'
55
+ interactive_tag_class += " #{class_name}"
56
+ interactive_tag_class += " #{class_name}-#{attribute}-#{model.id}-tag"
57
+ interactive_tag_class += ' notify-success' if options[:success_message]
58
+ interactive_params(interactive_tag_class)
59
+ end
60
+
61
+ def interactive_tag_select_params
62
+ interactive_tag_select_klass = 'interactive-tag-select'
63
+ interactive_tag_select_klass += " #{class_name}-#{attribute}-#{model.id}-select"
64
+ interactive_tag_select_klass += ' select-container-hidden'
65
+ interactive_tag_select_klass += ' default-select'
66
+ interactive_params(interactive_tag_select_klass)
67
+ end
68
+
69
+ def possible_values
70
+ klass = model.class
71
+ if @enum_attr == :enumerize
72
+ klass.enumerized_attributes[attribute.to_s].values
73
+ else
74
+ klass.defined_enums[attribute.to_s].keys
75
+ end
76
+ end
77
+
78
+ def enumerize_attr?
79
+ data.is_a?("Enumerize::Value".constantize)
80
+ rescue NameError
81
+ false
82
+ end
83
+
84
+ def rails_enum_attr?
85
+ defined? Rails && Rails::VERSION::MAJOR == 4 && Rails::VERSION::MINOR >= 1 &&
86
+ model.defined_enums[attribute.to_s]
87
+ end
88
+ end
89
+ end
90
+
91
+ ActiveAdminAddons::TagBuilder.create_view_methods
@@ -0,0 +1,44 @@
1
+ module ActiveAdminAddons
2
+ class ToggleBoolBuilder < CustomBuilder
3
+ def render
4
+ raise ArgumentError, 'Block should not be used in toggle bool columns' if block
5
+ return if conditional_eval_hide?
6
+
7
+ context.div class: 'toggle-bool-switches-container' do
8
+ context.span toggle
9
+ end
10
+ end
11
+
12
+ def toggle
13
+ toggle_classes = 'toggle-bool-switch'
14
+ toggle_classes += ' on' if data
15
+ toggle_classes += ' notify-success' if options[:success_message]
16
+ return unless enabled_controller_action?(:update)
17
+
18
+ context.span(
19
+ '',
20
+ id: "toggle-#{class_name}-#{model.id}-#{attribute}",
21
+ class: toggle_classes,
22
+ 'data-model' => class_name,
23
+ 'data-object_id' => model.id,
24
+ 'data-field' => attribute,
25
+ 'data-value' => data,
26
+ 'data-url' => resource_url,
27
+ 'data-success_message' => options[:success_message]
28
+ )
29
+ end
30
+
31
+ def conditional_eval_hide?
32
+ [:if, :unless].any? do |cond|
33
+ if options[cond]
34
+ raise ArgumentError, "'#{cond}' option should be a proc" unless options[cond].is_a?(Proc)
35
+
36
+ result = options[cond].call(model)
37
+ cond == :if ? !result : result
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+
44
+ ActiveAdminAddons::ToggleBoolBuilder.create_view_methods
@@ -0,0 +1,19 @@
1
+ module ActiveAdminAddons
2
+ module Rails
3
+ class Engine < ::Rails::Engine
4
+ require 'sassc'
5
+ require 'sassc-rails'
6
+ require "xdan-datetimepicker-rails"
7
+ require "require_all"
8
+ require "active_material"
9
+
10
+ initializer "initialize addons" do |app|
11
+ require_rel "support"
12
+ require_rel "addons"
13
+ require_rel "active_admin_config"
14
+ app.config.assets.precompile += %w(select.scss fileicons/*.png switches/switch_*.png
15
+ material/icons *.svg)
16
+ end
17
+ end
18
+ end
19
+ end