activeadmin_addons 1.9.0 → 2.0.0.beta.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +1 -17
- data/app/inputs/active_admin/inputs/select_input.rb +5 -1
- data/app/inputs/nested_level_input.rb +2 -1
- data/app/inputs/search_select_input.rb +1 -1
- data/app/inputs/tags_input.rb +1 -1
- data/app/javascript/activeadmin_addons/addons/slim-select-interactive-tag.js +78 -0
- data/app/javascript/activeadmin_addons/addons/toggle_bool.js +1 -1
- data/app/javascript/activeadmin_addons/all.js +2 -7
- data/app/javascript/activeadmin_addons/config.js +8 -5
- data/app/javascript/activeadmin_addons/inputs/color-picker.js +1 -1
- data/app/javascript/activeadmin_addons/inputs/date-time-picker.js +1 -1
- data/app/javascript/activeadmin_addons/inputs/slim-select-nested.js +93 -0
- data/app/javascript/activeadmin_addons/inputs/slim-select-search.js +37 -0
- data/app/javascript/activeadmin_addons/inputs/slim-select-selected-list.js +103 -0
- data/app/javascript/activeadmin_addons/inputs/slim-select-simple-tags.js +22 -0
- data/app/javascript/activeadmin_addons/inputs/slim-select-tags.js +67 -0
- data/app/javascript/activeadmin_addons/inputs/slim-select-utils.js +70 -0
- data/app/javascript/activeadmin_addons/inputs/slim-select.js +75 -0
- data/app/{assets/stylesheets/activeadmin_addons → javascript/activeadmin_addons/stylesheets}/all.scss +5 -11
- data/app/javascript/activeadmin_addons/stylesheets/imports/slimselect.css +1 -0
- data/app/{assets/stylesheets/activeadmin_addons → javascript/activeadmin_addons/stylesheets}/inputs/selected-list.scss +0 -1
- data/app/javascript/activeadmin_addons/stylesheets/inputs/slim-select.scss +9 -0
- data/lib/activeadmin_addons/addons/image_builder.rb +21 -3
- data/lib/activeadmin_addons/addons/markdown_builder.rb +38 -0
- data/lib/activeadmin_addons/addons/tag_builder.rb +6 -21
- data/lib/activeadmin_addons/engine.rb +0 -5
- data/lib/activeadmin_addons/support/enum_utils.rb +19 -0
- data/lib/activeadmin_addons/support/input_helpers/select_helpers.rb +1 -1
- data/lib/activeadmin_addons/support/select_filter_input_extension.rb +19 -0
- data/lib/activeadmin_addons/version.rb +1 -1
- data/lib/activeadmin_addons.rb +1 -1
- data/lib/generators/activeadmin_addons/install/install_generator.rb +2 -1
- data/lib/generators/activeadmin_addons/install/templates/initializer.rb +1 -1
- data/lib/generators/activeadmin_addons/webpacker/webpacker_generator.rb +1 -1
- metadata +83 -181
- 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 +0 -4
- data/app/assets/images/material/icons/keyboard_arrow_left.svg +0 -4
- data/app/assets/images/material/icons/keyboard_arrow_right.svg +0 -4
- data/app/assets/images/material/icons/keyboard_arrow_up.svg +0 -4
- data/app/assets/images/material/icons/today.svg +0 -4
- data/app/assets/javascripts/activeadmin_addons/all.js +0 -753
- data/app/assets/stylesheets/activeadmin_addons/addons/material-datepicker.scss +0 -173
- data/app/assets/stylesheets/activeadmin_addons/addons/material-toggle_bool.scss +0 -52
- data/app/assets/stylesheets/activeadmin_addons/inputs/select2.scss +0 -3
- data/app/assets/stylesheets/activeadmin_addons/material.scss +0 -53
- data/app/javascript/activeadmin_addons/addons/interactive_select_tag.js +0 -95
- data/app/javascript/activeadmin_addons/inputs/nested-select.js +0 -170
- data/app/javascript/activeadmin_addons/inputs/search-select.js +0 -76
- data/app/javascript/activeadmin_addons/inputs/select2.js +0 -52
- data/app/javascript/activeadmin_addons/inputs/selected-list.js +0 -107
- data/app/javascript/activeadmin_addons/inputs/tags.js +0 -76
- data/lib/activeadmin_addons/addons/attachment_builder.rb +0 -60
- data/lib/activeadmin_addons/support/enumerize_formtastic_support.rb +0 -18
- data/lib/generators/activeadmin_addons/assets/assets_generator.rb +0 -53
- data/vendor/assets/select2/select2.css +0 -481
- data/vendor/assets/select2/select2.full.js +0 -6820
- /data/app/{assets/stylesheets/activeadmin_addons → javascript/activeadmin_addons/stylesheets}/addons/interactive_select_tag.scss +0 -0
- /data/app/{assets/stylesheets/activeadmin_addons → javascript/activeadmin_addons/stylesheets}/addons/toggle_bool.scss +0 -0
- /data/app/{assets/stylesheets/activeadmin_addons → javascript/activeadmin_addons/stylesheets}/imports/jquery-datepicker.scss +0 -0
- /data/app/{assets/stylesheets/activeadmin_addons → javascript/activeadmin_addons/stylesheets}/inputs/color-picker.scss +0 -0
- /data/app/{assets/stylesheets/activeadmin_addons → javascript/activeadmin_addons/stylesheets}/inputs/date-time-picker-filter.scss +0 -0
- /data/app/{assets/stylesheets/activeadmin_addons → javascript/activeadmin_addons/stylesheets}/inputs/date-time-picker.scss +0 -0
- /data/app/{assets/stylesheets/activeadmin_addons → javascript/activeadmin_addons/stylesheets}/inputs/numeric-range-filter.scss +0 -0
- /data/app/{assets/stylesheets/activeadmin_addons → javascript/activeadmin_addons/stylesheets}/vendor/palette-color-picker.scss +0 -0
@@ -0,0 +1,75 @@
|
|
1
|
+
import SlimSelect from 'slim-select';
|
2
|
+
import merge from 'lodash.merge';
|
3
|
+
|
4
|
+
import * as searchSelect from './slim-select-search';
|
5
|
+
import * as simpleTagsSelect from './slim-select-simple-tags';
|
6
|
+
import * as nestedSelect from './slim-select-nested';
|
7
|
+
import * as selectedListSelect from './slim-select-selected-list';
|
8
|
+
import * as tagsSelect from './slim-select-tags';
|
9
|
+
|
10
|
+
const SELECT_CLASS = 'select:not(.default-select)';
|
11
|
+
const SLIM_SELECT_CLASS = 'select.slim-select';
|
12
|
+
|
13
|
+
const selectTypes = {
|
14
|
+
searchSelect,
|
15
|
+
simpleTagsSelect,
|
16
|
+
nestedSelect,
|
17
|
+
selectedListSelect,
|
18
|
+
tagsSelect,
|
19
|
+
};
|
20
|
+
|
21
|
+
// eslint-disable-next-line max-statements
|
22
|
+
function setupSelect(el) {
|
23
|
+
const emptyOption = el.querySelector('option[value=""]');
|
24
|
+
if (!emptyOption) {
|
25
|
+
el.insertAdjacentHTML('afterbegin', '<option value=""></option>');
|
26
|
+
}
|
27
|
+
el.querySelector('option[value=""]').dataset.placeholder = true;
|
28
|
+
|
29
|
+
el.style.width = el.dataset.width;
|
30
|
+
let settings = {
|
31
|
+
select: el,
|
32
|
+
settings: {
|
33
|
+
allowDeselect: true,
|
34
|
+
placeholderText: 'Select Value',
|
35
|
+
},
|
36
|
+
};
|
37
|
+
|
38
|
+
Object.keys(selectTypes).forEach((type) => {
|
39
|
+
if (selectTypes[type].classes.some((className) => el.classList.contains(className))) {
|
40
|
+
settings = merge({}, settings, selectTypes[type].settings(el));
|
41
|
+
if (selectTypes[type].init) {
|
42
|
+
selectTypes[type].init(el);
|
43
|
+
}
|
44
|
+
}
|
45
|
+
});
|
46
|
+
|
47
|
+
const slim = new SlimSelect(settings);
|
48
|
+
el.dataset.slimSelectId = slim.settings.id;
|
49
|
+
}
|
50
|
+
|
51
|
+
function initSelects(node = document) {
|
52
|
+
if (document.querySelector('body').dataset.defaultSelect === 'slim-select') {
|
53
|
+
node.querySelectorAll(SELECT_CLASS).forEach(setupSelect);
|
54
|
+
}
|
55
|
+
|
56
|
+
node.querySelectorAll(SLIM_SELECT_CLASS).forEach(setupSelect);
|
57
|
+
}
|
58
|
+
|
59
|
+
// mutation observer to add slim select to new elements
|
60
|
+
const observer = new MutationObserver((mutations) => {
|
61
|
+
mutations.forEach((mutation) => {
|
62
|
+
if (mutation.type === 'childList') {
|
63
|
+
mutation.addedNodes.forEach((node) => {
|
64
|
+
if (node instanceof Element) {
|
65
|
+
initSelects(node);
|
66
|
+
}
|
67
|
+
});
|
68
|
+
}
|
69
|
+
});
|
70
|
+
});
|
71
|
+
|
72
|
+
window.addEventListener('load', () => {
|
73
|
+
initSelects();
|
74
|
+
observer.observe(document.querySelector('body'), { attributes: false, childList: true, subtree: true });
|
75
|
+
});
|
@@ -1,20 +1,14 @@
|
|
1
|
-
@import '
|
2
|
-
@import 'imports/jquery-datepicker';
|
1
|
+
@import 'jquery-datetimepicker/build/jquery.datetimepicker.min.css';
|
3
2
|
@import 'vendor/palette-color-picker';
|
3
|
+
@import 'imports/slimselect';
|
4
|
+
|
5
|
+
$error-color: #932419;
|
4
6
|
|
5
7
|
@import 'inputs/numeric-range-filter';
|
6
8
|
@import 'inputs/date-time-picker-filter';
|
7
9
|
@import 'inputs/color-picker';
|
8
10
|
@import 'inputs/date-time-picker';
|
9
|
-
@import 'inputs/select2';
|
10
11
|
@import 'inputs/selected-list';
|
12
|
+
@import 'inputs/slim-select';
|
11
13
|
@import 'addons/toggle_bool';
|
12
14
|
@import 'addons/interactive_select_tag';
|
13
|
-
|
14
|
-
$error-color: #932419;
|
15
|
-
|
16
|
-
li.error {
|
17
|
-
.select2-selection {
|
18
|
-
border-color: $error-color;
|
19
|
-
}
|
20
|
-
}
|
@@ -0,0 +1 @@
|
|
1
|
+
:root{--ss-primary-color: #5897fb;--ss-bg-color: #ffffff;--ss-font-color: #4d4d4d;--ss-font-placeholder-color: #8d8d8d;--ss-disabled-color: #dcdee2;--ss-border-color: #dcdee2;--ss-highlight-color: #fffb8c;--ss-success-color: #00b755;--ss-error-color: #dc3545;--ss-main-height: 30px;--ss-content-height: 300px;--ss-spacing-l: 7px;--ss-spacing-m: 5px;--ss-spacing-s: 3px;--ss-animation-timing: 0.2s;--ss-border-radius: 4px}@keyframes ss-valueIn{0%{transform:scale(0);opacity:0}100%{transform:scale(1);opacity:1}}@keyframes ss-valueOut{0%{transform:scale(1);opacity:1}100%{transform:scale(0);opacity:0}}.ss-hide{display:none !important}.ss-main{display:flex;flex-direction:row;position:relative;user-select:none;color:var(--ss-font-color);min-height:var(--ss-main-height);width:100%;padding:var(--ss-spacing-s);cursor:pointer;border:1px solid var(--ss-border-color);border-radius:var(--ss-border-radius);background-color:var(--ss-bg-color);outline:0;box-sizing:border-box;transition:background-color var(--ss-animation-timing)}.ss-main:focus{box-shadow:0 0 5px var(--ss-primary-color)}.ss-main.ss-disabled{background-color:var(--ss-disabled-color);cursor:not-allowed}.ss-main.ss-disabled .ss-values .ss-disabled{color:var(--ss-font-color)}.ss-main.ss-disabled .ss-values .ss-value .ss-value-delete{cursor:not-allowed}.ss-main.ss-open-above{border-top-left-radius:0px;border-top-right-radius:0px}.ss-main.ss-open-below{border-bottom-left-radius:0px;border-bottom-right-radius:0px}.ss-main .ss-values{display:inline-flex;flex-wrap:wrap;gap:var(--ss-spacing-m);flex:1 1 100%}.ss-main .ss-values .ss-placeholder{display:flex;padding:var(--ss-spacing-s) var(--ss-spacing-m) var(--ss-spacing-s) var(--ss-spacing-m);margin:auto 0px auto 0px;line-height:1em;align-items:center;width:100%;color:var(--ss-font-placeholder-color);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ss-main .ss-values .ss-max{display:flex;user-select:none;align-items:center;width:fit-content;font-size:12px;color:var(--ss-bg-color);line-height:1;padding:var(--ss-spacing-s) var(--ss-spacing-m);background-color:var(--ss-primary-color);border-radius:var(--ss-border-radius)}.ss-main .ss-values .ss-single{display:flex;margin:auto 0px auto var(--ss-spacing-s)}.ss-main .ss-values .ss-value{display:flex;user-select:none;align-items:center;width:fit-content;background-color:var(--ss-primary-color);border-radius:var(--ss-border-radius);animation-name:ss-valueIn;animation-duration:var(--ss-animation-timing);animation-timing-function:ease-out;animation-fill-mode:both}.ss-main .ss-values .ss-value.ss-value-out{animation-name:ss-valueOut;animation-duration:var(--ss-animation-timing);animation-timing-function:ease-out}.ss-main .ss-values .ss-value .ss-value-text{font-size:12px;color:var(--ss-bg-color);line-height:1;padding:var(--ss-spacing-s) var(--ss-spacing-m)}.ss-main .ss-values .ss-value .ss-value-delete{display:flex;align-items:center;height:var(--ss-spacing-l);width:var(--ss-spacing-l);padding:var(--ss-spacing-s) var(--ss-spacing-m);cursor:pointer;border-left:solid 1px var(--ss-bg-color)}.ss-main .ss-values .ss-value .ss-value-delete svg{height:var(--ss-spacing-l);width:var(--ss-spacing-l)}.ss-main .ss-values .ss-value .ss-value-delete svg path{fill:none;stroke:var(--ss-bg-color);stroke-width:18;stroke-linecap:round;stroke-linejoin:round}.ss-main .ss-deselect{display:flex;align-self:center;justify-content:flex-end;flex:0 1 auto;width:8px;height:8px;margin:0 var(--ss-spacing-m) 0 var(--ss-spacing-m)}.ss-main .ss-deselect svg{width:8px;height:8px}.ss-main .ss-deselect svg path{fill:none;stroke:var(--ss-font-color);stroke-width:20;stroke-linecap:round;stroke-linejoin:round}.ss-main .ss-arrow{display:flex;align-items:center;justify-content:flex-end;flex:0 1 auto;width:12px;height:12px;margin:auto var(--ss-spacing-m) auto var(--ss-spacing-m)}.ss-main .ss-arrow path{fill:none;stroke:var(--ss-font-color);stroke-width:18;stroke-linecap:round;stroke-linejoin:round;transition-timing-function:ease-out;transition:var(--ss-animation-timing)}.ss-content{position:absolute;display:flex;height:auto;flex-direction:column;width:auto;max-height:var(--ss-content-height);box-sizing:border-box;border:solid 1px var(--ss-border-color);background-color:var(--ss-bg-color);transition:transform var(--ss-animation-timing),opacity var(--ss-animation-timing);opacity:0;transform:scaleY(0);transform-origin:center top;overflow:hidden;z-index:10000}.ss-content.ss-relative{position:relative;height:100%}.ss-content.ss-open-above{flex-direction:column-reverse;opacity:1;transform:scaleY(1);transform-origin:center bottom;border-top-left-radius:var(--ss-border-radius);border-top-right-radius:var(--ss-border-radius)}.ss-content.ss-open-below{opacity:1;transform:scaleY(1);transform-origin:center top;border-bottom-left-radius:var(--ss-border-radius);border-bottom-right-radius:var(--ss-border-radius)}.ss-content .ss-search{flex:0 1 auto;display:flex;flex-direction:row;padding:var(--ss-spacing-l) var(--ss-spacing-l) var(--ss-spacing-m) var(--ss-spacing-l)}.ss-content .ss-search input{display:inline-flex;font-size:inherit;line-height:inherit;flex:1 1 auto;width:100%;min-width:0px;padding:var(--ss-spacing-m) var(--ss-spacing-l);margin:0;border:1px solid var(--ss-border-color);border-radius:var(--ss-border-radius);background-color:var(--ss-bg-color);outline:0;text-align:left;box-sizing:border-box}.ss-content .ss-search input::placeholder{color:var(--ss-font-placeholder-color);vertical-align:middle}.ss-content .ss-search input:focus{box-shadow:0 0 5px var(--ss-primary-color)}.ss-content .ss-search .ss-addable{display:inline-flex;justify-content:center;align-items:center;cursor:pointer;flex:0 0 auto;height:auto;margin:0 0 0 var(--ss-spacing-m);border:1px solid var(--ss-border-color);border-radius:var(--ss-border-radius)}.ss-content .ss-search .ss-addable svg{display:flex;align-items:center;justify-content:flex-end;flex:0 1 auto;width:12px;height:12px;margin:auto var(--ss-spacing-m) auto var(--ss-spacing-m)}.ss-content .ss-search .ss-addable svg path{fill:none;stroke:var(--ss-font-color);stroke-width:18;stroke-linecap:round;stroke-linejoin:round}.ss-content .ss-list{flex:1 1 auto;height:auto;overflow-x:hidden;overflow-y:auto}.ss-content .ss-list .ss-error{color:var(--ss-error-color);padding:var(--ss-spacing-l)}.ss-content .ss-list .ss-searching{color:var(--ss-font-color);padding:var(--ss-spacing-l)}.ss-content .ss-list .ss-optgroup.ss-close .ss-option{display:none !important}.ss-content .ss-list .ss-optgroup .ss-optgroup-label{display:flex;flex-direction:row;align-items:center;justify-content:space-between;padding:var(--ss-spacing-m) var(--ss-spacing-l) var(--ss-spacing-m) var(--ss-spacing-l)}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-label-text{flex:1 1 auto;font-weight:bold;color:var(--ss-font-color)}.ss-content .ss-list .ss-optgroup .ss-optgroup-label:has(.ss-arrow){cursor:pointer}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions{flex:0 1 auto;display:flex;flex-direction:row;align-items:center;justify-content:center;gap:var(--ss-spacing-m)}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-selectall{flex:0 0 auto;display:flex;flex-direction:row;cursor:pointer}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-selectall:hover{opacity:.5}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-selectall.ss-selected svg path{stroke:var(--ss-error-color)}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-selectall span{flex:0 1 auto;display:flex;align-items:center;justify-content:center;font-size:60%;text-align:center;padding:0 var(--ss-spacing-s) 0 0}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-selectall svg{flex:0 1 auto;width:13px;height:13px}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-selectall svg path{fill:none;stroke:var(--ss-success-color);stroke-linecap:round;stroke-linejoin:round}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-selectall svg:first-child{stroke-width:5}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-selectall svg:last-child{stroke-width:11}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-closable{flex:0 1 auto;display:flex;flex-direction:row;cursor:pointer}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-closable .ss-arrow{flex:1 1 auto;width:10px;height:10px}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-closable .ss-arrow path{fill:none;stroke:var(--ss-font-color);stroke-width:18;stroke-linecap:round;stroke-linejoin:round;transition-timing-function:ease-out;transition:var(--ss-animation-timing)}.ss-content .ss-list .ss-optgroup .ss-option{padding:var(--ss-spacing-s) var(--ss-spacing-s) var(--ss-spacing-s) calc(var(--ss-spacing-l)*3)}.ss-content .ss-list .ss-option{display:flex;padding:var(--ss-spacing-m) var(--ss-spacing-l) var(--ss-spacing-m) var(--ss-spacing-l);color:var(--ss-font-color);cursor:pointer;user-select:none}.ss-content .ss-list .ss-option:hover{color:var(--ss-bg-color);background-color:var(--ss-primary-color)}.ss-content .ss-list .ss-option.ss-highlighted,.ss-content .ss-list .ss-option:not(.ss-disabled).ss-selected{color:var(--ss-bg-color);background-color:var(--ss-primary-color)}.ss-content .ss-list .ss-option.ss-disabled{cursor:not-allowed;background-color:var(--ss-disabled-color)}.ss-content .ss-list .ss-option.ss-disabled:hover{color:var(--ss-font-color)}.ss-content .ss-list .ss-option .ss-search-highlight{background-color:var(--ss-highlight-color)}
|
@@ -2,9 +2,27 @@ module ActiveAdminAddons
|
|
2
2
|
class ImageBuilder < CustomBuilder
|
3
3
|
def render
|
4
4
|
return nil if data.nil?
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
|
6
|
+
if Object.const_defined?('Shrine::UploadedFile') && data.is_a?(Shrine::UploadedFile)
|
7
|
+
shrine_data
|
8
|
+
else
|
9
|
+
raise "you need to pass a shrine image attribute"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def shrine_data
|
16
|
+
image_options = options[:image_options].presence || {}
|
17
|
+
if options[:style] && derivatives.include?(options[:style])
|
18
|
+
context.image_tag(model.send("#{attribute}_url", options[:style]), image_options)
|
19
|
+
else
|
20
|
+
context.image_tag(data.url, image_options)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def derivatives
|
25
|
+
model.send("#{attribute}_derivatives")
|
8
26
|
end
|
9
27
|
end
|
10
28
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'redcarpet'
|
2
|
+
|
3
|
+
module ActiveAdminAddons
|
4
|
+
class MarkdownBuilder < CustomBuilder
|
5
|
+
def render
|
6
|
+
return if data.blank?
|
7
|
+
|
8
|
+
Redcarpet::Markdown.new(renderer, extensions).render(@data).html_safe
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def extensions_default
|
14
|
+
{ fenced_code_blocks: true,
|
15
|
+
no_intra_emphasis: true,
|
16
|
+
strikethrough: true,
|
17
|
+
superscript: true }
|
18
|
+
end
|
19
|
+
|
20
|
+
def renderer_options_default
|
21
|
+
{ filter_html: true, hard_wrap: true }
|
22
|
+
end
|
23
|
+
|
24
|
+
def extensions
|
25
|
+
@extensions ||= extensions_default.merge(options[:extensions] || {})
|
26
|
+
end
|
27
|
+
|
28
|
+
def render_options
|
29
|
+
@render_options ||= renderer_options_default.merge(options[:render_options] || {})
|
30
|
+
end
|
31
|
+
|
32
|
+
def renderer
|
33
|
+
@renderer ||= Redcarpet::Render::HTML.new(render_options)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
ActiveAdminAddons::MarkdownBuilder.create_view_methods
|
@@ -1,13 +1,8 @@
|
|
1
1
|
module ActiveAdminAddons
|
2
2
|
class TagBuilder < CustomBuilder
|
3
3
|
def render
|
4
|
-
|
5
|
-
:enumerize
|
6
|
-
elsif rails_enum_attr?
|
7
|
-
:enum
|
8
|
-
end
|
4
|
+
raise "you need to pass an enum attribute" unless rails_enum_attr?
|
9
5
|
|
10
|
-
raise "you need to pass an enumerize or enum attribute" unless @enum_attr
|
11
6
|
append_tag
|
12
7
|
end
|
13
8
|
|
@@ -25,9 +20,9 @@ module ActiveAdminAddons
|
|
25
20
|
|
26
21
|
context.div(interactive_tag_select_params) do
|
27
22
|
context.select do
|
28
|
-
possible_values.each do |
|
29
|
-
context.option(value:
|
30
|
-
context.text_node
|
23
|
+
possible_values.each do |label, value|
|
24
|
+
context.option(value: value, selected: value == data) do
|
25
|
+
context.text_node label
|
31
26
|
end
|
32
27
|
end
|
33
28
|
end
|
@@ -36,7 +31,7 @@ module ActiveAdminAddons
|
|
36
31
|
end
|
37
32
|
|
38
33
|
def display_data
|
39
|
-
|
34
|
+
EnumUtils.translate_enum_option(model.class, attribute.to_s, data)
|
40
35
|
end
|
41
36
|
|
42
37
|
def interactive_params(klass)
|
@@ -68,17 +63,7 @@ module ActiveAdminAddons
|
|
68
63
|
|
69
64
|
def possible_values
|
70
65
|
klass = model.class
|
71
|
-
|
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
|
66
|
+
EnumUtils.options_for_select(klass, attribute.to_s)
|
82
67
|
end
|
83
68
|
|
84
69
|
def rails_enum_attr?
|
@@ -1,18 +1,13 @@
|
|
1
1
|
module ActiveAdminAddons
|
2
2
|
module Rails
|
3
3
|
class Engine < ::Rails::Engine
|
4
|
-
require 'sassc'
|
5
|
-
require 'sassc-rails'
|
6
4
|
require "xdan-datetimepicker-rails"
|
7
5
|
require "require_all"
|
8
|
-
require "active_material"
|
9
6
|
|
10
7
|
initializer "initialize addons" do |app|
|
11
8
|
require_rel "support"
|
12
9
|
require_rel "addons"
|
13
10
|
require_rel "active_admin_config"
|
14
|
-
app.config.assets.precompile += %w(select.scss fileicons/*.png switches/switch_*.png
|
15
|
-
material/icons *.svg)
|
16
11
|
end
|
17
12
|
end
|
18
13
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module ActiveAdminAddons
|
2
|
+
class EnumUtils
|
3
|
+
def self.options_for_select(klass, enum_name, use_db_value: false)
|
4
|
+
enum_options_hash = klass.defined_enums[enum_name]
|
5
|
+
enum_options_hash.map do |enum_option_name, db_value|
|
6
|
+
value = use_db_value ? db_value : enum_option_name
|
7
|
+
[translate_enum_option(klass, enum_name, enum_option_name), value]
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.translate_enum_option(klass, enum_name, enum_option_name)
|
12
|
+
return if enum_option_name.blank?
|
13
|
+
|
14
|
+
klass_key = klass.model_name.i18n_key
|
15
|
+
key = "activerecord.attributes.#{klass_key}.#{enum_name.pluralize}.#{enum_option_name}"
|
16
|
+
I18n.t(key, default: enum_option_name)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module ActiveAdminAddons
|
2
|
+
module SelectFilterInputExtension
|
3
|
+
def collection_from_enum?
|
4
|
+
klass.respond_to?(:defined_enums) && klass.defined_enums.has_key?(method.to_s)
|
5
|
+
end
|
6
|
+
|
7
|
+
def collection
|
8
|
+
if !options[:collection] && collection_from_enum?
|
9
|
+
EnumUtils.options_for_select(klass, method.to_s, use_db_value: true)
|
10
|
+
else
|
11
|
+
super
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
::ActiveAdmin::Inputs::Filters::SelectInput.send(
|
18
|
+
:prepend, ActiveAdminAddons::SelectFilterInputExtension
|
19
|
+
)
|
data/lib/activeadmin_addons.rb
CHANGED
@@ -11,7 +11,8 @@ module ActiveadminAddons
|
|
11
11
|
if use_webpacker?
|
12
12
|
generate "activeadmin_addons:webpacker"
|
13
13
|
else
|
14
|
-
|
14
|
+
puts "ActiveAdmin Addons requires ActiveAdmin installed with webpacker. "\
|
15
|
+
"Please run 'rails generate active_admin:install --webpacker' and then 'rails generate activeadmin_addons:install'"
|
15
16
|
end
|
16
17
|
end
|
17
18
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
ActiveadminAddons.setup do |config|
|
2
2
|
# Change to "default" if you want to use ActiveAdmin's default select control.
|
3
|
-
# config.default_select = "
|
3
|
+
# config.default_select = "slim-select"
|
4
4
|
|
5
5
|
# Set default options for DateTimePickerInput. The options you can provide are the same as in
|
6
6
|
# xdan's datetimepicker library (https://github.com/xdan/datetimepicker/tree/2.5.4). Yo need to
|