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