activeadmin_addons 2.0.0.beta.0 → 2.0.0.beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/inputs/active_admin/inputs/select_input.rb +4 -4
- data/app/inputs/nested_level_input.rb +11 -6
- data/app/inputs/nested_select_input.rb +19 -13
- data/app/inputs/search_select_filter_input.rb +15 -1
- data/app/inputs/search_select_input.rb +5 -4
- data/app/inputs/tags_input.rb +4 -33
- data/app/javascript/activeadmin_addons/inputs/slim-select-nested.js +7 -5
- data/app/javascript/activeadmin_addons/inputs/slim-select-tags.js +1 -40
- data/app/javascript/activeadmin_addons/inputs/slim-select.js +28 -10
- data/app/javascript/activeadmin_addons/stylesheets/all.scss +1 -1
- data/lib/activeadmin_addons/addons/state_builder.rb +1 -0
- data/lib/activeadmin_addons/engine.rb +1 -1
- data/lib/activeadmin_addons/support/custom_builder.rb +1 -1
- data/lib/activeadmin_addons/support/input_base.rb +0 -42
- data/lib/activeadmin_addons/support/input_helpers/filter_input_methods.rb +1 -0
- data/lib/activeadmin_addons/support/input_helpers/input_html_helpers.rb +42 -0
- data/lib/activeadmin_addons/support/input_helpers/select_helpers.rb +9 -11
- data/lib/activeadmin_addons/support/select_filter_input_extension.rb +1 -3
- data/lib/activeadmin_addons/support/select_input_base.rb +11 -0
- data/lib/activeadmin_addons/version.rb +1 -1
- data/lib/activeadmin_addons.rb +3 -0
- data/lib/generators/activeadmin_addons/install/templates/initializer.rb +1 -1
- data/lib/generators/activeadmin_addons/webpacker/webpacker_generator.rb +2 -5
- metadata +65 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 44f61829c24cb573ef14551b359f25c763d2740f72a17e0c64fedb80090afcd6
|
4
|
+
data.tar.gz: d0f6bb02709f7c23cb16e10bc882e3c10aecade16cfcf70bf9369beca8050ecd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 207fb0c30ec42531af763ccb9b346a6fd86b68b522890745c6f2c378e53914ea86132f3e63a461a7750a577bff1fe20a08d383b5e26147395e06caff77869f6f
|
7
|
+
data.tar.gz: c831f634ef1529f9706b4357c13c0eb2970aa0f87e3ca271b6a26dbb4ff293a9bae3cefcef229e7604e4db5b4492f350a25674826a6e25559ceb804c02dfe588
|
@@ -9,10 +9,10 @@ class ActiveAdmin::Inputs::SelectInput < Formtastic::Inputs::SelectInput
|
|
9
9
|
|
10
10
|
def raw_collection
|
11
11
|
field_value = begin
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
12
|
+
object.send(method)
|
13
|
+
rescue NoMethodError
|
14
|
+
nil
|
15
|
+
end
|
16
16
|
|
17
17
|
@options[:tags].present? && field_value.present? ? (super.to_a << field_value).uniq : super
|
18
18
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class NestedLevelInput < ActiveAdminAddons::
|
1
|
+
class NestedLevelInput < ActiveAdminAddons::SelectInputBase
|
2
2
|
include ActiveAdminAddons::SelectHelpers
|
3
3
|
|
4
4
|
def render_custom_input
|
@@ -13,6 +13,7 @@ class NestedLevelInput < ActiveAdminAddons::InputBase
|
|
13
13
|
|
14
14
|
private
|
15
15
|
|
16
|
+
# rubocop:disable Metrics/MethodLength
|
16
17
|
def load_control_attributes
|
17
18
|
load_class(@options[:class])
|
18
19
|
load_data_attr(:association, value: association_name)
|
@@ -26,24 +27,28 @@ class NestedLevelInput < ActiveAdminAddons::InputBase
|
|
26
27
|
load_data_attr(:response_root, default: tableize_method)
|
27
28
|
load_data_attr(:width)
|
28
29
|
load_data_attr(:order,
|
29
|
-
|
30
|
-
|
30
|
+
value: @options[:order_by],
|
31
|
+
default: "#{get_data_attr_value(:fields).first}_desc")
|
31
32
|
load_parent_data_options
|
32
33
|
load_collection_data
|
33
34
|
end
|
35
|
+
# rubocop:enable Metrics/MethodLength
|
34
36
|
|
35
37
|
def load_parent_data_options
|
36
38
|
return unless @options[:parent_attribute]
|
39
|
+
|
37
40
|
load_data_attr(:parent, value: @options[:parent_attribute])
|
38
|
-
load_data_attr(
|
41
|
+
load_data_attr(
|
42
|
+
:parent_id, value: @object.send(@options[:parent_id_attribute]), default: -1
|
43
|
+
)
|
39
44
|
end
|
40
45
|
|
41
46
|
def load_collection_data
|
42
47
|
return unless @options[:collection]
|
43
48
|
|
44
49
|
collection_options = collection_to_select_options do |item, option|
|
45
|
-
if
|
46
|
-
option[@options[:parent_attribute]] = item.send(@options[:
|
50
|
+
if @options[:parent_attribute].present?
|
51
|
+
option[@options[:parent_attribute]] = item.send(@options[:parent_id_attribute])
|
47
52
|
end
|
48
53
|
end
|
49
54
|
|
@@ -59,32 +59,38 @@ class NestedSelectInput < ActiveAdminAddons::InputBase
|
|
59
59
|
parent_level_data = hierarchy[next_idx] if hierarchy.count != next_idx
|
60
60
|
if parent_level_data
|
61
61
|
level_data[:parent_attribute] = parent_level_data[:attribute]
|
62
|
+
level_data[:parent_id_attribute] = "#{level_data[:parent_attribute]}_id"
|
62
63
|
set_parent_value(level_data)
|
63
64
|
end
|
64
65
|
end
|
65
66
|
end
|
66
67
|
|
67
68
|
def set_parent_value(level_data)
|
68
|
-
|
69
|
-
build_virtual_attr(
|
70
|
-
instance =
|
71
|
-
if instance
|
72
|
-
@object.send(
|
69
|
+
build_virtual_attr(level_data[:parent_attribute])
|
70
|
+
build_virtual_attr(level_data[:parent_id_attribute])
|
71
|
+
instance = instance_from_attribute_id("#{level_data[:attribute]}_id")
|
72
|
+
if instance.respond_to?(level_data[:parent_id_attribute])
|
73
|
+
@object.send(
|
74
|
+
"#{level_data[:parent_attribute]}=", instance.send(level_data[:parent_attribute])
|
75
|
+
)
|
76
|
+
@object.send(
|
77
|
+
"#{level_data[:parent_id_attribute]}=", instance.send(level_data[:parent_id_attribute])
|
78
|
+
)
|
73
79
|
end
|
74
80
|
end
|
75
81
|
|
76
|
-
def
|
77
|
-
return unless
|
82
|
+
def instance_from_attribute_id(attribute_id)
|
83
|
+
return unless attribute_id
|
78
84
|
|
79
|
-
|
80
|
-
return unless
|
85
|
+
attribute_id_value = @object.send(attribute_id)
|
86
|
+
return unless attribute_id_value
|
81
87
|
|
82
|
-
klass =
|
83
|
-
klass.find_by(id:
|
88
|
+
klass = class_from_attribute_id(attribute_id)
|
89
|
+
klass.find_by(id: attribute_id_value)
|
84
90
|
end
|
85
91
|
|
86
|
-
def
|
87
|
-
association_name =
|
92
|
+
def class_from_attribute_id(attribute_id)
|
93
|
+
association_name = attribute_id.to_s.chomp("_id")
|
88
94
|
association_name.camelize.constantize
|
89
95
|
rescue NameError
|
90
96
|
object_class.reflect_on_association(association_name).klass
|
@@ -7,6 +7,20 @@ class SearchSelectFilterInput < SearchSelectInput
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def input_method
|
10
|
-
|
10
|
+
"#{input_name}_eq"
|
11
|
+
end
|
12
|
+
|
13
|
+
def input_html_options_name
|
14
|
+
"#{object_name}[#{input_method}]"
|
15
|
+
end
|
16
|
+
|
17
|
+
def input_value
|
18
|
+
result = valid_object.conditions.find do |condition|
|
19
|
+
condition.attributes.map(&:name).include?(input_name.to_s)
|
20
|
+
end
|
21
|
+
|
22
|
+
return unless result
|
23
|
+
|
24
|
+
result.values.first.value
|
11
25
|
end
|
12
26
|
end
|
@@ -1,10 +1,11 @@
|
|
1
|
-
class SearchSelectInput < ActiveAdminAddons::
|
1
|
+
class SearchSelectInput < ActiveAdminAddons::SelectInputBase
|
2
2
|
include ActiveAdminAddons::SelectHelpers
|
3
3
|
|
4
4
|
def render_custom_input
|
5
5
|
concat(label_html)
|
6
|
-
concat(
|
7
|
-
initial_collection_to_select_options, {}, input_html_options)
|
6
|
+
concat(
|
7
|
+
builder.select(input_method, initial_collection_to_select_options, {}, input_html_options)
|
8
|
+
)
|
8
9
|
end
|
9
10
|
|
10
11
|
def input_method
|
@@ -23,7 +24,7 @@ class SearchSelectInput < ActiveAdminAddons::InputBase
|
|
23
24
|
load_data_attr(
|
24
25
|
:order,
|
25
26
|
value: @options[:order_by],
|
26
|
-
default: get_data_attr_value(:fields).first
|
27
|
+
default: "#{get_data_attr_value(:fields).first}_desc"
|
27
28
|
)
|
28
29
|
end
|
29
30
|
end
|
data/app/inputs/tags_input.rb
CHANGED
@@ -1,17 +1,12 @@
|
|
1
|
-
class TagsInput < ActiveAdminAddons::
|
1
|
+
class TagsInput < ActiveAdminAddons::SelectInputBase
|
2
2
|
include ActiveAdminAddons::SelectHelpers
|
3
3
|
|
4
4
|
def render_custom_input
|
5
|
-
|
6
|
-
return render_collection_tags
|
7
|
-
end
|
8
|
-
|
9
|
-
render_array_tags
|
5
|
+
render_collection_tags
|
10
6
|
end
|
11
7
|
|
12
8
|
def load_control_attributes
|
13
|
-
|
14
|
-
load_data_attr(:method, value: method)
|
9
|
+
@options[:multiple] = true
|
15
10
|
load_data_attr(:width)
|
16
11
|
|
17
12
|
if active_record_select?
|
@@ -24,32 +19,8 @@ class TagsInput < ActiveAdminAddons::InputBase
|
|
24
19
|
|
25
20
|
private
|
26
21
|
|
27
|
-
def render_array_tags
|
28
|
-
render_tags_control { build_hidden_control(prefixed_method, method_to_input_name, input_value) }
|
29
|
-
end
|
30
|
-
|
31
22
|
def render_collection_tags
|
32
|
-
render_tags_control { render_selected_hidden_items }
|
33
|
-
end
|
34
|
-
|
35
|
-
def render_tags_control(&block)
|
36
23
|
concat(label_html)
|
37
|
-
concat(
|
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
|
24
|
+
concat(builder.select(method, [], input_options, input_html_options))
|
54
25
|
end
|
55
26
|
end
|
@@ -12,7 +12,7 @@ function ajaxSearch(search, currentData, args) {
|
|
12
12
|
});
|
13
13
|
|
14
14
|
if (!!args.parent) {
|
15
|
-
args.query.q[`${args.parent}
|
15
|
+
args.query.q[`${args.parent}_id_eq`] = args.parentId;
|
16
16
|
}
|
17
17
|
|
18
18
|
args.query.q = { ...args.query.q, ...args.filters };
|
@@ -25,10 +25,12 @@ function collectionSearch(search, args, collection) {
|
|
25
25
|
return Promise.reject('Search term too short');
|
26
26
|
}
|
27
27
|
|
28
|
-
const data = JSON.parse(collection).
|
28
|
+
const data = JSON.parse(collection).filter(
|
29
|
+
(item) => (!args.parent || item[args.parent] === Number(args.parentId)) &&
|
30
|
+
String(item.text).toLowerCase().includes(search.toLowerCase()),
|
31
|
+
).map(
|
29
32
|
(item) => ({ value: String(item.id), text: item.text }),
|
30
|
-
)
|
31
|
-
(item) => String(item.text).toLowerCase().includes(search.toLowerCase()));
|
33
|
+
);
|
32
34
|
|
33
35
|
return Promise.resolve(data);
|
34
36
|
}
|
@@ -48,7 +50,7 @@ function settings(el) {
|
|
48
50
|
const { model, association } = el.dataset;
|
49
51
|
const child = el.closest('.nested_level')
|
50
52
|
.parentNode
|
51
|
-
.querySelector(`.nested_level [data-model=${model}][data-parent=${association}
|
53
|
+
.querySelector(`.nested_level [data-model=${model}][data-parent=${association}]`);
|
52
54
|
|
53
55
|
if (child) {
|
54
56
|
child.slim.setSelected();
|
@@ -2,9 +2,6 @@ const classes = ['tags-input'];
|
|
2
2
|
|
3
3
|
// eslint-disable-next-line max-statements
|
4
4
|
function settings(el) {
|
5
|
-
const model = el.dataset.model;
|
6
|
-
const method = el.dataset.method;
|
7
|
-
const prefix = `${model}_${method}`;
|
8
5
|
const isRelation = el.dataset.relation === 'true';
|
9
6
|
const collection = el.dataset.collection ? JSON.parse(el.dataset.collection) : null;
|
10
7
|
|
@@ -14,38 +11,7 @@ function settings(el) {
|
|
14
11
|
return { ...rest, value: id, selected: !!item.selected };
|
15
12
|
});
|
16
13
|
|
17
|
-
|
18
|
-
const hiddenInput = document.querySelector(`#${prefix}`);
|
19
|
-
hiddenInput.value = values.map(val => val.value).join();
|
20
|
-
}
|
21
|
-
|
22
|
-
const events = {
|
23
|
-
afterChange: (newVal) => {
|
24
|
-
if (isRelation) {
|
25
|
-
const selectedItemsContainer = document.querySelector(`#${prefix}_selected_values`);
|
26
|
-
const itemName = `${model}[${method}][]`;
|
27
|
-
selectedItemsContainer.innerHTML = '';
|
28
|
-
|
29
|
-
newVal.forEach((data) => {
|
30
|
-
const itemId = `${prefix}_${data.value}`;
|
31
|
-
if (document.querySelectorAll(`#${itemId}`).length > 0) {
|
32
|
-
return;
|
33
|
-
}
|
34
|
-
|
35
|
-
const hiddenInput = document.createElement('input');
|
36
|
-
hiddenInput.id = itemId;
|
37
|
-
hiddenInput.name = itemName;
|
38
|
-
hiddenInput.value = data.value;
|
39
|
-
hiddenInput.type = 'hidden';
|
40
|
-
|
41
|
-
selectedItemsContainer.appendChild(hiddenInput);
|
42
|
-
});
|
43
|
-
} else {
|
44
|
-
fillHiddenInput(newVal);
|
45
|
-
}
|
46
|
-
},
|
47
|
-
};
|
48
|
-
|
14
|
+
const events = {};
|
49
15
|
if (!isRelation) {
|
50
16
|
events.addable = (value) => value;
|
51
17
|
}
|
@@ -56,12 +22,7 @@ function settings(el) {
|
|
56
22
|
};
|
57
23
|
}
|
58
24
|
|
59
|
-
function init(el) {
|
60
|
-
el.multiple = true;
|
61
|
-
}
|
62
|
-
|
63
25
|
export {
|
64
26
|
settings,
|
65
27
|
classes,
|
66
|
-
init,
|
67
28
|
};
|
@@ -18,15 +18,8 @@ const selectTypes = {
|
|
18
18
|
tagsSelect,
|
19
19
|
};
|
20
20
|
|
21
|
-
// eslint-disable-next-line max-statements
|
21
|
+
// eslint-disable-next-line max-statements, complexity
|
22
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
23
|
let settings = {
|
31
24
|
select: el,
|
32
25
|
settings: {
|
@@ -35,6 +28,31 @@ function setupSelect(el) {
|
|
35
28
|
},
|
36
29
|
};
|
37
30
|
|
31
|
+
const selectStyles = window.getComputedStyle(el);
|
32
|
+
el.style.width = el.dataset.width;
|
33
|
+
el.style.fontSize = selectStyles.fontSize;
|
34
|
+
|
35
|
+
const searchSelectFilter = el.closest('.filter_form_field');
|
36
|
+
if (searchSelectFilter) {
|
37
|
+
if (searchSelectFilter.classList.contains('search_select_filter') ||
|
38
|
+
searchSelectFilter.classList.contains('filter_string')) {
|
39
|
+
settings.settings.allowDeselect = false;
|
40
|
+
}
|
41
|
+
|
42
|
+
if (el.options.length > 0) {
|
43
|
+
el.style.width = el.dataset.width || selectStyles.width;
|
44
|
+
if (selectStyles.display === 'inline-block') {
|
45
|
+
el.style.display = 'inline-flex';
|
46
|
+
}
|
47
|
+
}
|
48
|
+
}
|
49
|
+
|
50
|
+
const emptyOption = el.querySelector('option[value=""]');
|
51
|
+
if (!emptyOption) {
|
52
|
+
el.insertAdjacentHTML('afterbegin', '<option value=""></option>');
|
53
|
+
}
|
54
|
+
el.querySelector('option[value=""]').dataset.placeholder = true;
|
55
|
+
|
38
56
|
Object.keys(selectTypes).forEach((type) => {
|
39
57
|
if (selectTypes[type].classes.some((className) => el.classList.contains(className))) {
|
40
58
|
settings = merge({}, settings, selectTypes[type].settings(el));
|
@@ -44,8 +62,8 @@ function setupSelect(el) {
|
|
44
62
|
}
|
45
63
|
});
|
46
64
|
|
47
|
-
|
48
|
-
|
65
|
+
// eslint-disable-next-line no-new
|
66
|
+
new SlimSelect(settings);
|
49
67
|
}
|
50
68
|
|
51
69
|
function initSelects(node = document) {
|
@@ -11,6 +11,7 @@ module ActiveAdminAddons
|
|
11
11
|
def render
|
12
12
|
raise "you need to install AASM gem first" unless defined? AASM
|
13
13
|
raise "the #{attribute} is not an AASM state" unless state_attribute?
|
14
|
+
|
14
15
|
context.status_tag(model.aasm(machine_name).human_state, class: status_class_for_model)
|
15
16
|
end
|
16
17
|
|
@@ -7,47 +7,5 @@ module ActiveAdminAddons
|
|
7
7
|
include InputOptionsHandler
|
8
8
|
include InputMethods
|
9
9
|
include InputHtmlHelpers
|
10
|
-
|
11
|
-
def to_html
|
12
|
-
load_input_class
|
13
|
-
load_control_attributes
|
14
|
-
render_custom_input
|
15
|
-
if parts.any?
|
16
|
-
return input_wrapping { parts_to_html }
|
17
|
-
else
|
18
|
-
super
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def input_html_options
|
23
|
-
# maxwidth and size are added by Formtastic::Inputs::StringInput
|
24
|
-
# but according to the HTML standard these are not valid attributes
|
25
|
-
# on the inputs provided by this module
|
26
|
-
super.except(:maxlength, :size).merge(control_attributes)
|
27
|
-
end
|
28
|
-
|
29
|
-
def parts_to_html
|
30
|
-
parts.flatten.join("\n").html_safe
|
31
|
-
end
|
32
|
-
|
33
|
-
def load_input_class
|
34
|
-
load_class(self.class.to_s.underscore.dasherize)
|
35
|
-
end
|
36
|
-
|
37
|
-
def load_control_attributes
|
38
|
-
# Override on child classes if needed
|
39
|
-
end
|
40
|
-
|
41
|
-
def render_custom_input
|
42
|
-
# Override on child classes if needed
|
43
|
-
end
|
44
|
-
|
45
|
-
def parts
|
46
|
-
@parts ||= []
|
47
|
-
end
|
48
|
-
|
49
|
-
def concat(part)
|
50
|
-
parts << part
|
51
|
-
end
|
52
10
|
end
|
53
11
|
end
|
@@ -40,5 +40,47 @@ module ActiveAdminAddons
|
|
40
40
|
value: value
|
41
41
|
)
|
42
42
|
end
|
43
|
+
|
44
|
+
def to_html
|
45
|
+
load_input_class
|
46
|
+
load_control_attributes
|
47
|
+
render_custom_input
|
48
|
+
if parts.any?
|
49
|
+
input_wrapping { parts_to_html }
|
50
|
+
else
|
51
|
+
super
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def input_html_options
|
56
|
+
# maxwidth and size are added by Formtastic::Inputs::StringInput
|
57
|
+
# but according to the HTML standard these are not valid attributes
|
58
|
+
# on the inputs provided by this module
|
59
|
+
super.except(:maxlength, :size).merge(control_attributes)
|
60
|
+
end
|
61
|
+
|
62
|
+
def load_input_class
|
63
|
+
load_class(self.class.to_s.underscore.dasherize)
|
64
|
+
end
|
65
|
+
|
66
|
+
def load_control_attributes
|
67
|
+
# Override on child classes if needed
|
68
|
+
end
|
69
|
+
|
70
|
+
def render_custom_input
|
71
|
+
# Override on child classes if needed
|
72
|
+
end
|
73
|
+
|
74
|
+
def parts_to_html
|
75
|
+
parts.flatten.join("\n").html_safe # rubocop:disable Rails/OutputSafety
|
76
|
+
end
|
77
|
+
|
78
|
+
def concat(part)
|
79
|
+
parts << part
|
80
|
+
end
|
81
|
+
|
82
|
+
def parts
|
83
|
+
@parts ||= []
|
84
|
+
end
|
43
85
|
end
|
44
86
|
end
|
@@ -57,21 +57,19 @@ module ActiveAdminAddons
|
|
57
57
|
end
|
58
58
|
|
59
59
|
def selected_collection
|
60
|
-
@selected_collection ||=
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
end
|
66
|
-
end
|
60
|
+
@selected_collection ||= if active_record_relation?(collection)
|
61
|
+
collection.model.where(id: input_value)
|
62
|
+
else
|
63
|
+
method_model.where(id: input_value)
|
64
|
+
end
|
67
65
|
end
|
68
66
|
|
69
67
|
def selected_item
|
70
68
|
@selected_item ||= begin
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
69
|
+
input_association_value
|
70
|
+
rescue NoMethodError
|
71
|
+
selected_collection.first
|
72
|
+
end
|
75
73
|
end
|
76
74
|
|
77
75
|
private
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require_relative "input_helpers/input_options_handler"
|
2
|
+
require_relative "input_helpers/input_methods"
|
3
|
+
require_relative "input_helpers/input_html_helpers"
|
4
|
+
|
5
|
+
module ActiveAdminAddons
|
6
|
+
class SelectInputBase < Formtastic::Inputs::SelectInput
|
7
|
+
include InputOptionsHandler
|
8
|
+
include InputMethods
|
9
|
+
include InputHtmlHelpers
|
10
|
+
end
|
11
|
+
end
|
data/lib/activeadmin_addons.rb
CHANGED
@@ -5,16 +5,19 @@ module ActiveadminAddons
|
|
5
5
|
|
6
6
|
def default_select
|
7
7
|
return "slim-select" unless @default_select
|
8
|
+
|
8
9
|
@default_select
|
9
10
|
end
|
10
11
|
|
11
12
|
def datetime_picker_default_options
|
12
13
|
return {} unless @datetime_picker_default_options
|
14
|
+
|
13
15
|
@datetime_picker_default_options
|
14
16
|
end
|
15
17
|
|
16
18
|
def datetime_picker_input_format
|
17
19
|
return "%Y-%m-%d %H:%M" unless @datetime_picker_input_format
|
20
|
+
|
18
21
|
@datetime_picker_input_format
|
19
22
|
end
|
20
23
|
|
@@ -3,7 +3,7 @@ ActiveadminAddons.setup do |config|
|
|
3
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
|
-
# xdan's datetimepicker library (https://github.com/xdan/datetimepicker/tree/2.5.4).
|
6
|
+
# xdan's datetimepicker library (https://github.com/xdan/datetimepicker/tree/2.5.4). You need to
|
7
7
|
# pass a ruby hash, avoid camelCase keys. For example: use min_date instead of minDate key.
|
8
8
|
# config.datetime_picker_default_options = {}
|
9
9
|
|
@@ -11,9 +11,7 @@ module ActiveadminAddons
|
|
11
11
|
def add_stylesheets
|
12
12
|
file_path = 'app/javascript/stylesheets/active_admin.scss'
|
13
13
|
|
14
|
-
|
15
|
-
prepend_file(file_path, css_assets)
|
16
|
-
end
|
14
|
+
prepend_file(file_path, css_assets)
|
17
15
|
end
|
18
16
|
|
19
17
|
def install_package
|
@@ -23,8 +21,7 @@ module ActiveadminAddons
|
|
23
21
|
private
|
24
22
|
|
25
23
|
def js_assets
|
26
|
-
|
27
|
-
to_add
|
24
|
+
"import \"activeadmin_addons\"\n"
|
28
25
|
end
|
29
26
|
|
30
27
|
def css_assets
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activeadmin_addons
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.beta.
|
4
|
+
version: 2.0.0.beta.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Platanus
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2023-
|
14
|
+
date: 2023-06-12 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: railties
|
@@ -181,6 +181,20 @@ dependencies:
|
|
181
181
|
- - ">="
|
182
182
|
- !ruby/object:Gem::Version
|
183
183
|
version: '0'
|
184
|
+
- !ruby/object:Gem::Dependency
|
185
|
+
name: pry-byebug
|
186
|
+
requirement: !ruby/object:Gem::Requirement
|
187
|
+
requirements:
|
188
|
+
- - ">="
|
189
|
+
- !ruby/object:Gem::Version
|
190
|
+
version: '0'
|
191
|
+
type: :development
|
192
|
+
prerelease: false
|
193
|
+
version_requirements: !ruby/object:Gem::Requirement
|
194
|
+
requirements:
|
195
|
+
- - ">="
|
196
|
+
- !ruby/object:Gem::Version
|
197
|
+
version: '0'
|
184
198
|
- !ruby/object:Gem::Dependency
|
185
199
|
name: pry-rails
|
186
200
|
requirement: !ruby/object:Gem::Requirement
|
@@ -243,6 +257,20 @@ dependencies:
|
|
243
257
|
- - ">="
|
244
258
|
- !ruby/object:Gem::Version
|
245
259
|
version: '0'
|
260
|
+
- !ruby/object:Gem::Dependency
|
261
|
+
name: rspec_junit_formatter
|
262
|
+
requirement: !ruby/object:Gem::Requirement
|
263
|
+
requirements:
|
264
|
+
- - ">="
|
265
|
+
- !ruby/object:Gem::Version
|
266
|
+
version: '0'
|
267
|
+
type: :development
|
268
|
+
prerelease: false
|
269
|
+
version_requirements: !ruby/object:Gem::Requirement
|
270
|
+
requirements:
|
271
|
+
- - ">="
|
272
|
+
- !ruby/object:Gem::Version
|
273
|
+
version: '0'
|
246
274
|
- !ruby/object:Gem::Dependency
|
247
275
|
name: rspec-rails
|
248
276
|
requirement: !ruby/object:Gem::Requirement
|
@@ -272,7 +300,21 @@ dependencies:
|
|
272
300
|
- !ruby/object:Gem::Version
|
273
301
|
version: '0'
|
274
302
|
- !ruby/object:Gem::Dependency
|
275
|
-
name:
|
303
|
+
name: rubocop
|
304
|
+
requirement: !ruby/object:Gem::Requirement
|
305
|
+
requirements:
|
306
|
+
- - "~>"
|
307
|
+
- !ruby/object:Gem::Version
|
308
|
+
version: '1.50'
|
309
|
+
type: :development
|
310
|
+
prerelease: false
|
311
|
+
version_requirements: !ruby/object:Gem::Requirement
|
312
|
+
requirements:
|
313
|
+
- - "~>"
|
314
|
+
- !ruby/object:Gem::Version
|
315
|
+
version: '1.50'
|
316
|
+
- !ruby/object:Gem::Dependency
|
317
|
+
name: rubocop-performance
|
276
318
|
requirement: !ruby/object:Gem::Requirement
|
277
319
|
requirements:
|
278
320
|
- - ">="
|
@@ -286,19 +328,33 @@ dependencies:
|
|
286
328
|
- !ruby/object:Gem::Version
|
287
329
|
version: '0'
|
288
330
|
- !ruby/object:Gem::Dependency
|
289
|
-
name: rubocop
|
331
|
+
name: rubocop-rails
|
332
|
+
requirement: !ruby/object:Gem::Requirement
|
333
|
+
requirements:
|
334
|
+
- - ">="
|
335
|
+
- !ruby/object:Gem::Version
|
336
|
+
version: '0'
|
337
|
+
type: :development
|
338
|
+
prerelease: false
|
339
|
+
version_requirements: !ruby/object:Gem::Requirement
|
340
|
+
requirements:
|
341
|
+
- - ">="
|
342
|
+
- !ruby/object:Gem::Version
|
343
|
+
version: '0'
|
344
|
+
- !ruby/object:Gem::Dependency
|
345
|
+
name: rubocop-rspec
|
290
346
|
requirement: !ruby/object:Gem::Requirement
|
291
347
|
requirements:
|
292
348
|
- - "~>"
|
293
349
|
- !ruby/object:Gem::Version
|
294
|
-
version:
|
350
|
+
version: '2.2'
|
295
351
|
type: :development
|
296
352
|
prerelease: false
|
297
353
|
version_requirements: !ruby/object:Gem::Requirement
|
298
354
|
requirements:
|
299
355
|
- - "~>"
|
300
356
|
- !ruby/object:Gem::Version
|
301
|
-
version:
|
357
|
+
version: '2.2'
|
302
358
|
- !ruby/object:Gem::Dependency
|
303
359
|
name: shoulda-matchers
|
304
360
|
requirement: !ruby/object:Gem::Requirement
|
@@ -428,6 +484,7 @@ files:
|
|
428
484
|
- lib/activeadmin_addons/support/input_helpers/input_options_handler.rb
|
429
485
|
- lib/activeadmin_addons/support/input_helpers/select_helpers.rb
|
430
486
|
- lib/activeadmin_addons/support/select_filter_input_extension.rb
|
487
|
+
- lib/activeadmin_addons/support/select_input_base.rb
|
431
488
|
- lib/activeadmin_addons/support/set_datepicker.rb
|
432
489
|
- lib/activeadmin_addons/version.rb
|
433
490
|
- lib/generators/activeadmin_addons/install/install_generator.rb
|
@@ -446,14 +503,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
446
503
|
requirements:
|
447
504
|
- - ">="
|
448
505
|
- !ruby/object:Gem::Version
|
449
|
-
version:
|
506
|
+
version: 2.7.0
|
450
507
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
451
508
|
requirements:
|
452
509
|
- - ">"
|
453
510
|
- !ruby/object:Gem::Version
|
454
511
|
version: 1.3.1
|
455
512
|
requirements: []
|
456
|
-
rubygems_version: 3.
|
513
|
+
rubygems_version: 3.4.10
|
457
514
|
signing_key:
|
458
515
|
specification_version: 4
|
459
516
|
summary: Set of addons to help with the activeadmin ui
|