activeadmin_addons_rails6 1.7.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/Rakefile +24 -0
- data/app/assets/images/fileicons/file_extension_3gp.png +0 -0
- data/app/assets/images/fileicons/file_extension_7z.png +0 -0
- data/app/assets/images/fileicons/file_extension_ace.png +0 -0
- data/app/assets/images/fileicons/file_extension_ai.png +0 -0
- data/app/assets/images/fileicons/file_extension_aif.png +0 -0
- data/app/assets/images/fileicons/file_extension_aiff.png +0 -0
- data/app/assets/images/fileicons/file_extension_amr.png +0 -0
- data/app/assets/images/fileicons/file_extension_asf.png +0 -0
- data/app/assets/images/fileicons/file_extension_asx.png +0 -0
- data/app/assets/images/fileicons/file_extension_bat.png +0 -0
- data/app/assets/images/fileicons/file_extension_bin.png +0 -0
- data/app/assets/images/fileicons/file_extension_bmp.png +0 -0
- data/app/assets/images/fileicons/file_extension_bup.png +0 -0
- data/app/assets/images/fileicons/file_extension_cab.png +0 -0
- data/app/assets/images/fileicons/file_extension_cbr.png +0 -0
- data/app/assets/images/fileicons/file_extension_cda.png +0 -0
- data/app/assets/images/fileicons/file_extension_cdl.png +0 -0
- data/app/assets/images/fileicons/file_extension_cdr.png +0 -0
- data/app/assets/images/fileicons/file_extension_chm.png +0 -0
- data/app/assets/images/fileicons/file_extension_dat.png +0 -0
- data/app/assets/images/fileicons/file_extension_divx.png +0 -0
- data/app/assets/images/fileicons/file_extension_dll.png +0 -0
- data/app/assets/images/fileicons/file_extension_dmg.png +0 -0
- data/app/assets/images/fileicons/file_extension_doc.png +0 -0
- data/app/assets/images/fileicons/file_extension_docx.png +0 -0
- data/app/assets/images/fileicons/file_extension_dss.png +0 -0
- data/app/assets/images/fileicons/file_extension_dvf.png +0 -0
- data/app/assets/images/fileicons/file_extension_dwg.png +0 -0
- data/app/assets/images/fileicons/file_extension_eml.png +0 -0
- data/app/assets/images/fileicons/file_extension_eps.png +0 -0
- data/app/assets/images/fileicons/file_extension_exe.png +0 -0
- data/app/assets/images/fileicons/file_extension_fla.png +0 -0
- data/app/assets/images/fileicons/file_extension_flv.png +0 -0
- data/app/assets/images/fileicons/file_extension_gif.png +0 -0
- data/app/assets/images/fileicons/file_extension_gz.png +0 -0
- data/app/assets/images/fileicons/file_extension_hqx.png +0 -0
- data/app/assets/images/fileicons/file_extension_htm.png +0 -0
- data/app/assets/images/fileicons/file_extension_html.png +0 -0
- data/app/assets/images/fileicons/file_extension_ifo.png +0 -0
- data/app/assets/images/fileicons/file_extension_indd.png +0 -0
- data/app/assets/images/fileicons/file_extension_iso.png +0 -0
- data/app/assets/images/fileicons/file_extension_jar.png +0 -0
- data/app/assets/images/fileicons/file_extension_jpeg.png +0 -0
- data/app/assets/images/fileicons/file_extension_jpg.png +0 -0
- data/app/assets/images/fileicons/file_extension_lnk.png +0 -0
- data/app/assets/images/fileicons/file_extension_log.png +0 -0
- data/app/assets/images/fileicons/file_extension_m4a.png +0 -0
- data/app/assets/images/fileicons/file_extension_m4b.png +0 -0
- data/app/assets/images/fileicons/file_extension_m4p.png +0 -0
- data/app/assets/images/fileicons/file_extension_m4v.png +0 -0
- data/app/assets/images/fileicons/file_extension_mcd.png +0 -0
- data/app/assets/images/fileicons/file_extension_mdb.png +0 -0
- data/app/assets/images/fileicons/file_extension_mid.png +0 -0
- data/app/assets/images/fileicons/file_extension_mov.png +0 -0
- data/app/assets/images/fileicons/file_extension_mp2.png +0 -0
- data/app/assets/images/fileicons/file_extension_mp3.png +0 -0
- data/app/assets/images/fileicons/file_extension_mp4.png +0 -0
- data/app/assets/images/fileicons/file_extension_mpeg.png +0 -0
- data/app/assets/images/fileicons/file_extension_mpg.png +0 -0
- data/app/assets/images/fileicons/file_extension_msi.png +0 -0
- data/app/assets/images/fileicons/file_extension_mswmm.png +0 -0
- data/app/assets/images/fileicons/file_extension_ogg.png +0 -0
- data/app/assets/images/fileicons/file_extension_pdf.png +0 -0
- data/app/assets/images/fileicons/file_extension_png.png +0 -0
- data/app/assets/images/fileicons/file_extension_pps.png +0 -0
- data/app/assets/images/fileicons/file_extension_ppt.png +0 -0
- data/app/assets/images/fileicons/file_extension_pptx.png +0 -0
- data/app/assets/images/fileicons/file_extension_ps.png +0 -0
- data/app/assets/images/fileicons/file_extension_psd.png +0 -0
- data/app/assets/images/fileicons/file_extension_pst.png +0 -0
- data/app/assets/images/fileicons/file_extension_ptb.png +0 -0
- data/app/assets/images/fileicons/file_extension_pub.png +0 -0
- data/app/assets/images/fileicons/file_extension_qbb.png +0 -0
- data/app/assets/images/fileicons/file_extension_qbw.png +0 -0
- data/app/assets/images/fileicons/file_extension_qxd.png +0 -0
- data/app/assets/images/fileicons/file_extension_ram.png +0 -0
- data/app/assets/images/fileicons/file_extension_rar.png +0 -0
- data/app/assets/images/fileicons/file_extension_rm.png +0 -0
- data/app/assets/images/fileicons/file_extension_rmvb.png +0 -0
- data/app/assets/images/fileicons/file_extension_rtf.png +0 -0
- data/app/assets/images/fileicons/file_extension_sea.png +0 -0
- data/app/assets/images/fileicons/file_extension_ses.png +0 -0
- data/app/assets/images/fileicons/file_extension_sit.png +0 -0
- data/app/assets/images/fileicons/file_extension_sitx.png +0 -0
- data/app/assets/images/fileicons/file_extension_ss.png +0 -0
- data/app/assets/images/fileicons/file_extension_swf.png +0 -0
- data/app/assets/images/fileicons/file_extension_tgz.png +0 -0
- data/app/assets/images/fileicons/file_extension_thm.png +0 -0
- data/app/assets/images/fileicons/file_extension_tif.png +0 -0
- data/app/assets/images/fileicons/file_extension_tmp.png +0 -0
- data/app/assets/images/fileicons/file_extension_torrent.png +0 -0
- data/app/assets/images/fileicons/file_extension_ttf.png +0 -0
- data/app/assets/images/fileicons/file_extension_txt.png +0 -0
- data/app/assets/images/fileicons/file_extension_unknown.png +0 -0
- data/app/assets/images/fileicons/file_extension_vcd.png +0 -0
- data/app/assets/images/fileicons/file_extension_vob.png +0 -0
- data/app/assets/images/fileicons/file_extension_wav.png +0 -0
- data/app/assets/images/fileicons/file_extension_wma.png +0 -0
- data/app/assets/images/fileicons/file_extension_wmv.png +0 -0
- data/app/assets/images/fileicons/file_extension_wps.png +0 -0
- data/app/assets/images/fileicons/file_extension_xls.png +0 -0
- data/app/assets/images/fileicons/file_extension_xlsx.png +0 -0
- data/app/assets/images/fileicons/file_extension_xpi.png +0 -0
- data/app/assets/images/fileicons/file_extension_zip.png +0 -0
- data/app/assets/images/material/icons/keyboard_arrow_down.svg +4 -0
- data/app/assets/images/material/icons/keyboard_arrow_left.svg +4 -0
- data/app/assets/images/material/icons/keyboard_arrow_right.svg +4 -0
- data/app/assets/images/material/icons/keyboard_arrow_up.svg +4 -0
- data/app/assets/images/material/icons/today.svg +4 -0
- data/app/assets/javascripts/activeadmin_addons/all.js +753 -0
- data/app/assets/stylesheets/activeadmin_addons/addons/interactive_select_tag.scss +30 -0
- data/app/assets/stylesheets/activeadmin_addons/addons/material-datepicker.scss +173 -0
- data/app/assets/stylesheets/activeadmin_addons/addons/material-toggle_bool.scss +52 -0
- data/app/assets/stylesheets/activeadmin_addons/addons/toggle_bool.scss +52 -0
- data/app/assets/stylesheets/activeadmin_addons/all.scss +19 -0
- data/app/assets/stylesheets/activeadmin_addons/imports/jquery-datepicker.scss +1 -0
- data/app/assets/stylesheets/activeadmin_addons/imports/webpack/jquery-datepicker.scss +1 -0
- data/app/assets/stylesheets/activeadmin_addons/inputs/color-picker.scss +4 -0
- data/app/assets/stylesheets/activeadmin_addons/inputs/date-time-picker.scss +5 -0
- data/app/assets/stylesheets/activeadmin_addons/inputs/numeric-range-filter.scss +12 -0
- data/app/assets/stylesheets/activeadmin_addons/inputs/select2.scss +3 -0
- data/app/assets/stylesheets/activeadmin_addons/inputs/selected-list.scss +27 -0
- data/app/assets/stylesheets/activeadmin_addons/material.scss +53 -0
- data/app/assets/stylesheets/activeadmin_addons/vendor/palette-color-picker.scss +155 -0
- data/app/inputs/active_admin/inputs/select_input.rb +11 -0
- data/app/inputs/ajax_filter_input.rb +6 -0
- data/app/inputs/color_picker_input.rb +37 -0
- data/app/inputs/date_range_input.rb +5 -0
- data/app/inputs/date_time_picker_input.rb +64 -0
- data/app/inputs/nested_level_input.rb +51 -0
- data/app/inputs/nested_select_input.rb +88 -0
- data/app/inputs/numeric_range_filter_input.rb +27 -0
- data/app/inputs/range_select_input.rb +6 -0
- data/app/inputs/search_select_filter_input.rb +12 -0
- data/app/inputs/search_select_input.rb +29 -0
- data/app/inputs/selected_list_input.rb +54 -0
- data/app/inputs/tags_input.rb +55 -0
- data/app/javascript/activeadmin_addons/addons/interactive_select_tag.js +95 -0
- data/app/javascript/activeadmin_addons/addons/toggle_bool.js +39 -0
- data/app/javascript/activeadmin_addons/all.js +14 -0
- data/app/javascript/activeadmin_addons/config.js +10 -0
- data/app/javascript/activeadmin_addons/inputs/color-picker.js +16 -0
- data/app/javascript/activeadmin_addons/inputs/date-time-picker.js +28 -0
- data/app/javascript/activeadmin_addons/inputs/nested-select.js +170 -0
- data/app/javascript/activeadmin_addons/inputs/search-select.js +76 -0
- data/app/javascript/activeadmin_addons/inputs/select2.js +52 -0
- data/app/javascript/activeadmin_addons/inputs/selected-list.js +107 -0
- data/app/javascript/activeadmin_addons/inputs/tags.js +76 -0
- data/app/javascript/activeadmin_addons/vendor/jquery_palette_color_picker/palette-color-picker.js +265 -0
- data/lib/activeadmin_addons.rb +27 -0
- data/lib/activeadmin_addons/active_admin_config.rb +9 -0
- data/lib/activeadmin_addons/addons/attachment_builder.rb +60 -0
- data/lib/activeadmin_addons/addons/bool_builder.rb +31 -0
- data/lib/activeadmin_addons/addons/image_builder.rb +12 -0
- data/lib/activeadmin_addons/addons/list_builder.rb +73 -0
- data/lib/activeadmin_addons/addons/number_builder.rb +25 -0
- data/lib/activeadmin_addons/addons/state_builder.rb +39 -0
- data/lib/activeadmin_addons/addons/tag_builder.rb +91 -0
- data/lib/activeadmin_addons/addons/toggle_bool_builder.rb +44 -0
- data/lib/activeadmin_addons/engine.rb +19 -0
- data/lib/activeadmin_addons/support/custom_builder.rb +91 -0
- data/lib/activeadmin_addons/support/enumerize_formtastic_support.rb +18 -0
- data/lib/activeadmin_addons/support/input_base.rb +53 -0
- data/lib/activeadmin_addons/support/input_helpers/filter_input.rb +8 -0
- data/lib/activeadmin_addons/support/input_helpers/filter_input_methods.rb +32 -0
- data/lib/activeadmin_addons/support/input_helpers/input_html_helpers.rb +43 -0
- data/lib/activeadmin_addons/support/input_helpers/input_methods.rb +67 -0
- data/lib/activeadmin_addons/support/input_helpers/input_options_handler.rb +90 -0
- data/lib/activeadmin_addons/support/input_helpers/select_helpers.rb +89 -0
- data/lib/activeadmin_addons/support/set_datepicker.rb +13 -0
- data/lib/activeadmin_addons/version.rb +3 -0
- data/lib/activeadmin_addons_rails_6.rb +5 -0
- data/lib/generators/activeadmin_addons/assets/assets_generator.rb +53 -0
- data/lib/generators/activeadmin_addons/install/install_generator.rb +19 -0
- data/lib/generators/activeadmin_addons/install/templates/initializer.rb +12 -0
- data/lib/generators/activeadmin_addons/webpacker/webpacker_generator.rb +35 -0
- data/lib/tasks/activeadmin_addons_tasks.rake +4 -0
- data/vendor/assets/select2/select2.css +481 -0
- data/vendor/assets/select2/select2.full.js +6820 -0
- 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,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 = "✔"
|
4
|
+
DEFAULT_BOOLEAN_FALSE = "✗"
|
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}: ".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
|