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,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