headmin 0.4.0 → 0.5.0
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/.lock-487e157d270f3062a98b7b2a012753708-1272821827 +0 -0
- data/CHANGELOG.md +16 -2
- data/Gemfile.lock +77 -79
- data/app/assets/javascripts/headmin/controllers/autocomplete_controller.js +84 -21
- data/app/assets/javascripts/headmin/controllers/date_range_controller.js +12 -6
- data/app/assets/javascripts/headmin/controllers/filter_controller.js +61 -11
- data/app/assets/javascripts/headmin/controllers/filter_row_controller.js +50 -0
- data/app/assets/javascripts/headmin/controllers/flatpickr_controller.js +2 -6
- data/app/assets/javascripts/headmin/controllers/popup_controller.js +14 -5
- data/app/assets/javascripts/headmin/controllers/table_actions_controller.js +16 -21
- data/app/assets/javascripts/headmin/index.js +2 -0
- data/app/assets/javascripts/headmin.js +186 -56
- data/app/assets/stylesheets/headmin/filter.scss +74 -0
- data/app/assets/stylesheets/headmin/general.scss +8 -0
- data/app/assets/stylesheets/headmin/layout/body.scss +5 -0
- data/app/assets/stylesheets/headmin/popup.scss +0 -1
- data/app/assets/stylesheets/headmin.css +70 -1
- data/app/controllers/concerns/headmin/filterable.rb +27 -0
- data/app/models/concerns/headmin/field.rb +4 -2
- data/app/models/concerns/headmin/fieldable.rb +138 -44
- data/app/models/headmin/filter/base.rb +238 -0
- data/app/models/headmin/filter/base_view.rb +64 -0
- data/app/models/headmin/filter/boolean.rb +15 -0
- data/app/models/headmin/filter/boolean_view.rb +61 -0
- data/app/models/headmin/filter/button_view.rb +25 -0
- data/app/models/headmin/filter/conditional_view.rb +16 -0
- data/app/models/headmin/filter/date.rb +19 -0
- data/app/models/headmin/filter/date_view.rb +52 -0
- data/app/models/headmin/filter/flatpickr_view.rb +54 -0
- data/app/models/headmin/filter/menu_item_view.rb +6 -0
- data/app/models/headmin/filter/money.rb +13 -0
- data/app/models/headmin/filter/number.rb +27 -0
- data/app/models/headmin/filter/number_view.rb +54 -0
- data/app/models/headmin/filter/operator_view.rb +30 -0
- data/app/models/headmin/filter/options_view.rb +61 -0
- data/app/models/headmin/filter/row_view.rb +13 -0
- data/app/models/headmin/filter/search.rb +18 -0
- data/app/models/headmin/filter/search_view.rb +31 -0
- data/app/models/headmin/filter/text.rb +25 -0
- data/app/models/headmin/filter/text_view.rb +53 -0
- data/app/models/headmin/filters.rb +29 -0
- data/app/models/headmin/form/blocks_view.rb +1 -1
- data/app/models/headmin/form/checkbox_view.rb +3 -3
- data/app/models/headmin/form/date_range_view.rb +2 -2
- data/app/models/headmin/form/date_view.rb +5 -5
- data/app/models/headmin/form/datetime_range_view.rb +25 -0
- data/app/models/headmin/form/datetime_view.rb +45 -0
- data/app/models/headmin/form/email_view.rb +7 -7
- data/app/models/headmin/form/file_view.rb +6 -6
- data/app/models/headmin/form/flatpickr_range_view.rb +11 -22
- data/app/models/headmin/form/flatpickr_view.rb +4 -13
- data/app/models/headmin/form/input_group_view.rb +1 -1
- data/app/models/headmin/form/label_view.rb +1 -1
- data/app/models/headmin/form/number_view.rb +5 -5
- data/app/models/headmin/form/password_view.rb +5 -5
- data/app/models/headmin/form/redactorx_view.rb +2 -2
- data/app/models/headmin/form/search_view.rb +7 -7
- data/app/models/headmin/form/select_view.rb +6 -6
- data/app/models/headmin/form/switch_view.rb +1 -1
- data/app/models/headmin/form/text_view.rb +7 -7
- data/app/models/headmin/form/textarea_view.rb +5 -5
- data/app/models/headmin/form/url_view.rb +7 -7
- data/app/models/headmin/form/wrapper_view.rb +1 -1
- data/app/models/headmin/form/wysiwyg_view.rb +1 -1
- data/app/models/view_model.rb +1 -1
- data/app/views/examples/admin.html.erb +13 -13
- data/app/views/examples/auth.html.erb +1 -1
- data/app/views/headmin/_filters.html.erb +6 -6
- data/app/views/headmin/_form.html.erb +2 -2
- data/app/views/headmin/_index.html.erb +1 -1
- data/app/views/headmin/_pagination.html.erb +1 -1
- data/app/views/headmin/_popup.html.erb +2 -2
- data/app/views/headmin/_table.html.erb +1 -1
- data/app/views/headmin/dropdown/_devise.html.erb +8 -8
- data/app/views/headmin/dropdown/_locale.html.erb +4 -4
- data/app/views/headmin/filters/_base.html.erb +95 -0
- data/app/views/headmin/filters/_boolean.html.erb +23 -0
- data/app/views/headmin/filters/_date.html.erb +14 -38
- data/app/views/headmin/filters/_flatpickr.html.erb +15 -48
- data/app/views/headmin/filters/_number.html.erb +23 -0
- data/app/views/headmin/filters/_options.html.erb +24 -0
- data/app/views/headmin/filters/_search.html.erb +14 -12
- data/app/views/headmin/filters/_text.html.erb +23 -0
- data/app/views/headmin/filters/filter/_button.html.erb +9 -10
- data/app/views/headmin/filters/filter/_conditional.html.erb +18 -0
- data/app/views/headmin/filters/filter/_menu_item.html.erb +5 -2
- data/app/views/headmin/filters/filter/_null_select.html.erb +8 -0
- data/app/views/headmin/filters/filter/_operator.html.erb +16 -0
- data/app/views/headmin/filters/filter/_row.html.erb +11 -0
- data/app/views/headmin/forms/_blocks.html.erb +1 -1
- data/app/views/headmin/forms/_date_range.html.erb +3 -3
- data/app/views/headmin/forms/_datetime.html.erb +41 -0
- data/app/views/headmin/forms/_datetime_range.html.erb +40 -0
- data/app/views/headmin/forms/_file.html.erb +3 -3
- data/app/views/headmin/forms/_flatpickr.html.erb +1 -1
- data/app/views/headmin/forms/_flatpickr_range.html.erb +3 -4
- data/app/views/headmin/forms/_label.html.erb +1 -1
- data/app/views/headmin/forms/_repeater.html.erb +12 -12
- data/app/views/headmin/forms/fields/_base.html.erb +1 -1
- data/app/views/headmin/forms/fields/_file.html.erb +3 -3
- data/app/views/headmin/forms/fields/_files.html.erb +17 -0
- data/app/views/headmin/forms/fields/_group.html.erb +10 -5
- data/app/views/headmin/forms/fields/_list.html.erb +4 -4
- data/app/views/headmin/forms/fields/_text.html.erb +2 -2
- data/app/views/headmin/layout/_footer.html.erb +1 -1
- data/app/views/headmin/layout/_main.html.erb +1 -1
- data/app/views/headmin/nav/_dropdown.html.erb +3 -3
- data/app/views/headmin/nav/_item.html.erb +2 -2
- data/app/views/headmin/nav/item/_devise.html.erb +8 -8
- data/app/views/headmin/nav/item/_locale.html.erb +4 -4
- data/app/views/headmin/table/_actions.html.erb +3 -6
- data/app/views/headmin/table/actions/_export.html.erb +1 -1
- data/app/views/headmin/table/body/_row.html.erb +3 -3
- data/app/views/headmin/table/foot/_id.html.erb +1 -1
- data/app/views/headmin/views/devise/confirmations/_new.html.erb +1 -1
- data/app/views/headmin/views/devise/passwords/_edit.html.erb +2 -2
- data/app/views/headmin/views/devise/passwords/_new.html.erb +1 -1
- data/app/views/headmin/views/devise/registrations/_edit.html.erb +4 -4
- data/app/views/headmin/views/devise/registrations/_new.html.erb +3 -3
- data/app/views/headmin/views/devise/sessions/_new.html.erb +3 -3
- data/app/views/headmin/views/devise/unlocks/_new.html.erb +1 -1
- data/config/locales/en.yml +4 -0
- data/config/locales/headmin/dropdown/en.yml +6 -0
- data/config/locales/headmin/dropdown/nl.yml +6 -0
- data/config/locales/headmin/filters/en.yml +26 -1
- data/config/locales/headmin/filters/nl.yml +26 -1
- data/config/locales/headmin/forms/en.yml +1 -1
- data/config/locales/headmin/forms/nl.yml +1 -1
- data/config/locales/headmin/layout/en.yml +0 -9
- data/config/locales/headmin/layout/nl.yml +0 -9
- data/config/locales/headmin/nav/en.yml +7 -0
- data/config/locales/headmin/nav/nl.yml +7 -0
- data/config/locales/nl.yml +4 -0
- data/lib/generators/templates/views/layouts/auth.html.erb +1 -1
- data/lib/headmin/version.rb +1 -1
- data/package.json +1 -1
- metadata +44 -7
- data/app/controllers/concerns/headmin/filter.rb +0 -5
- data/app/controllers/concerns/headmin/searchable.rb +0 -15
- data/app/views/headmin/filters/_select.html.erb +0 -45
- data/app/views/headmin/filters/filter/_template.html.erb +0 -13
- data/app/views/headmin/forms/fields/_image.html.erb +0 -17
@@ -0,0 +1,25 @@
|
|
1
|
+
module Headmin
|
2
|
+
module Form
|
3
|
+
class DatetimeRangeView < ViewModel
|
4
|
+
def start_options
|
5
|
+
default_start_options.deep_merge(@start || {})
|
6
|
+
end
|
7
|
+
|
8
|
+
def end_options
|
9
|
+
default_end_options.deep_merge(@end || {})
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def default_start_options
|
15
|
+
keys = attributes - %i[start]
|
16
|
+
to_h.slice(*keys)
|
17
|
+
end
|
18
|
+
|
19
|
+
def default_end_options
|
20
|
+
keys = attributes - %i[end]
|
21
|
+
to_h.slice(*keys)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Headmin
|
2
|
+
module Form
|
3
|
+
class DatetimeView < ViewModel
|
4
|
+
include Headmin::Form::Hintable
|
5
|
+
include Headmin::Form::InputGroupable
|
6
|
+
include Headmin::Form::Labelable
|
7
|
+
include Headmin::Form::Listable
|
8
|
+
include Headmin::Form::Placeholderable
|
9
|
+
include Headmin::Form::Validatable
|
10
|
+
include Headmin::Form::Wrappable
|
11
|
+
|
12
|
+
def input_options
|
13
|
+
keys = attributes - %i[append attribute float form input_group input_group label prepend validate wrapper]
|
14
|
+
options = to_h.slice(*keys)
|
15
|
+
default_input_options.deep_merge(options)
|
16
|
+
end
|
17
|
+
|
18
|
+
def input_group_options
|
19
|
+
default_input_group_options
|
20
|
+
.deep_merge(label_input_group_options)
|
21
|
+
.deep_merge(@input_group || {})
|
22
|
+
end
|
23
|
+
|
24
|
+
def wrapper_options
|
25
|
+
default_wrapper_options.deep_merge({
|
26
|
+
class: ["mb-3", ("form-floating" if float)]
|
27
|
+
}).deep_merge(@wrapper || {})
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def default_input_options
|
33
|
+
{
|
34
|
+
aria: {describedby: validation_id},
|
35
|
+
class: [form_control_class, validation_class],
|
36
|
+
placeholder: placeholder
|
37
|
+
}
|
38
|
+
end
|
39
|
+
|
40
|
+
def form_control_class
|
41
|
+
plaintext ? "form-control-plaintext" : "form-control"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -13,21 +13,21 @@ module Headmin
|
|
13
13
|
def input_options
|
14
14
|
keys = attributes - %i[append attribute collection float form input_group label prepend validate wrapper]
|
15
15
|
options = to_h.slice(*keys)
|
16
|
-
options = default_input_options.
|
17
|
-
options.
|
16
|
+
options = default_input_options.deep_merge(options)
|
17
|
+
options.deep_merge(autocomplete_input_options)
|
18
18
|
end
|
19
19
|
|
20
20
|
def input_group_options
|
21
21
|
default_input_group_options
|
22
|
-
.
|
23
|
-
.
|
24
|
-
.
|
22
|
+
.deep_merge(autocomplete_input_group_options)
|
23
|
+
.deep_merge(label_input_group_options)
|
24
|
+
.deep_merge(@input_group || {})
|
25
25
|
end
|
26
26
|
|
27
27
|
def wrapper_options
|
28
|
-
default_wrapper_options.
|
28
|
+
default_wrapper_options.deep_merge({
|
29
29
|
class: ["mb-3", ("form-floating" if float)]
|
30
|
-
}).
|
30
|
+
}).deep_merge(@wrapper || {})
|
31
31
|
end
|
32
32
|
|
33
33
|
private
|
@@ -11,24 +11,24 @@ module Headmin
|
|
11
11
|
def input_options
|
12
12
|
keys = attributes - %i[append attribute dropzone destroy form input_group label prepend preview validate wrapper]
|
13
13
|
options = to_h.slice(*keys)
|
14
|
-
options = default_input_options.
|
15
|
-
options = options.
|
14
|
+
options = default_input_options.deep_merge(options)
|
15
|
+
options = options.deep_merge(required: false) if attachments.any?
|
16
16
|
options
|
17
17
|
end
|
18
18
|
|
19
19
|
def input_group_options
|
20
20
|
default_input_group_options
|
21
|
-
.
|
22
|
-
.
|
21
|
+
.deep_merge(label_input_group_options)
|
22
|
+
.deep_merge(@input_group || {})
|
23
23
|
end
|
24
24
|
|
25
25
|
def wrapper_options
|
26
|
-
default_wrapper_options.
|
26
|
+
default_wrapper_options.deep_merge({
|
27
27
|
class: ["mb-3 h-form-file", ("form-floating" if float)],
|
28
28
|
data: {
|
29
29
|
controller: ("file-preview" if preview)
|
30
30
|
}
|
31
|
-
}).
|
31
|
+
}).deep_merge(@wrapper || {})
|
32
32
|
end
|
33
33
|
|
34
34
|
def preview
|
@@ -22,32 +22,29 @@ module Headmin
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def start_options
|
25
|
-
default_start_options.
|
25
|
+
default_start_options.deep_merge(@start || {})
|
26
26
|
end
|
27
27
|
|
28
28
|
def end_options
|
29
|
-
default_end_options.
|
29
|
+
default_end_options.deep_merge(@end || {})
|
30
30
|
end
|
31
31
|
|
32
32
|
def input_options
|
33
33
|
keys = attributes - %i[append attribute end float form input_group label prepend start validate wrapper]
|
34
34
|
options = to_h.slice(*keys)
|
35
|
-
default_input_options.
|
35
|
+
default_input_options.deep_merge(options)
|
36
36
|
end
|
37
37
|
|
38
38
|
def input_group_options
|
39
39
|
default_input_group_options
|
40
|
-
.
|
41
|
-
.
|
40
|
+
.deep_merge(label_input_group_options)
|
41
|
+
.deep_merge(@input_group || {})
|
42
42
|
end
|
43
43
|
|
44
44
|
def wrapper_options
|
45
|
-
default_wrapper_options.
|
46
|
-
class: ["mb-3", ("form-floating" if float)]
|
47
|
-
|
48
|
-
controller: "flatpickr date-range"
|
49
|
-
}
|
50
|
-
}).merge(@wrapper || {})
|
45
|
+
default_wrapper_options.deep_merge({
|
46
|
+
class: ["mb-3", ("form-floating" if float)]
|
47
|
+
}).deep_merge(@wrapper || {})
|
51
48
|
end
|
52
49
|
|
53
50
|
private
|
@@ -59,19 +56,11 @@ module Headmin
|
|
59
56
|
end
|
60
57
|
|
61
58
|
def default_start_options
|
62
|
-
{
|
63
|
-
data: {
|
64
|
-
'date-range-target': "startDateInput"
|
65
|
-
}
|
66
|
-
}
|
59
|
+
{}
|
67
60
|
end
|
68
61
|
|
69
62
|
def default_end_options
|
70
|
-
{
|
71
|
-
data: {
|
72
|
-
'date-range-target': "endDateInput"
|
73
|
-
}
|
74
|
-
}
|
63
|
+
{}
|
75
64
|
end
|
76
65
|
|
77
66
|
def default_input_options
|
@@ -81,7 +70,7 @@ module Headmin
|
|
81
70
|
placeholder: placeholder,
|
82
71
|
name: nil,
|
83
72
|
data: {
|
84
|
-
"flatpickr-
|
73
|
+
controller: "flatpickr date-range",
|
85
74
|
action: "change->date-range#update",
|
86
75
|
flatpickr: {
|
87
76
|
mode: "range",
|
@@ -2,36 +2,27 @@ module Headmin
|
|
2
2
|
module Form
|
3
3
|
class FlatpickrView < ViewModel
|
4
4
|
def options
|
5
|
-
keys = attributes - %i[data
|
5
|
+
keys = attributes - %i[data]
|
6
6
|
options = to_h.slice(*keys)
|
7
|
-
default_options.
|
7
|
+
default_options.deep_merge(options)
|
8
8
|
end
|
9
9
|
|
10
10
|
private
|
11
11
|
|
12
12
|
def default_options
|
13
13
|
{
|
14
|
-
data: default_data.
|
15
|
-
wrapper: default_wrapper_options.merge(wrapper || {})
|
14
|
+
data: default_data.deep_merge(data || {})
|
16
15
|
}
|
17
16
|
end
|
18
17
|
|
19
18
|
def default_data
|
20
19
|
{
|
21
|
-
|
20
|
+
controller: "flatpickr",
|
22
21
|
flatpickr: {
|
23
22
|
defaultDate: form.object&.send(attribute)&.strftime("%d/%m/%Y")
|
24
23
|
}
|
25
24
|
}
|
26
25
|
end
|
27
|
-
|
28
|
-
def default_wrapper_options
|
29
|
-
{
|
30
|
-
data: {
|
31
|
-
controller: "flatpickr"
|
32
|
-
}
|
33
|
-
}
|
34
|
-
end
|
35
26
|
end
|
36
27
|
end
|
37
28
|
end
|
@@ -12,19 +12,19 @@ module Headmin
|
|
12
12
|
def input_options
|
13
13
|
keys = attributes - %i[append attribute float form input_group label prepend validate wrapper]
|
14
14
|
options = to_h.slice(*keys)
|
15
|
-
default_input_options.
|
15
|
+
default_input_options.deep_merge(options)
|
16
16
|
end
|
17
17
|
|
18
18
|
def input_group_options
|
19
19
|
default_input_group_options
|
20
|
-
.
|
21
|
-
.
|
20
|
+
.deep_merge(label_input_group_options)
|
21
|
+
.deep_merge(@input_group || {})
|
22
22
|
end
|
23
23
|
|
24
24
|
def wrapper_options
|
25
|
-
default_wrapper_options.
|
25
|
+
default_wrapper_options.deep_merge({
|
26
26
|
class: ["mb-3", float_class]
|
27
|
-
}).
|
27
|
+
}).deep_merge(@wrapper || {})
|
28
28
|
end
|
29
29
|
|
30
30
|
private
|
@@ -11,19 +11,19 @@ module Headmin
|
|
11
11
|
def input_options
|
12
12
|
keys = attributes - %i[append attribute float form input_group label prepend validate wrapper]
|
13
13
|
options = to_h.slice(*keys)
|
14
|
-
default_input_options.
|
14
|
+
default_input_options.deep_merge(options)
|
15
15
|
end
|
16
16
|
|
17
17
|
def input_group_options
|
18
18
|
default_input_group_options
|
19
|
-
.
|
20
|
-
.
|
19
|
+
.deep_merge(label_input_group_options)
|
20
|
+
.deep_merge(@input_group || {})
|
21
21
|
end
|
22
22
|
|
23
23
|
def wrapper_options
|
24
|
-
default_wrapper_options.
|
24
|
+
default_wrapper_options.deep_merge({
|
25
25
|
class: ["mb-3", ("form-floating" if float)]
|
26
|
-
}).
|
26
|
+
}).deep_merge(@wrapper || {})
|
27
27
|
end
|
28
28
|
|
29
29
|
private
|
@@ -2,7 +2,7 @@ module Headmin
|
|
2
2
|
module Form
|
3
3
|
class RedactorxView < ViewModel
|
4
4
|
def options
|
5
|
-
default_options.
|
5
|
+
default_options.deep_merge(to_h)
|
6
6
|
end
|
7
7
|
|
8
8
|
private
|
@@ -39,7 +39,7 @@ module Headmin
|
|
39
39
|
attr_reader :topbar
|
40
40
|
|
41
41
|
def redactor_options
|
42
|
-
default_redactor_options.
|
42
|
+
default_redactor_options.deep_merge(redactor || {})
|
43
43
|
end
|
44
44
|
|
45
45
|
def default_redactor_options
|
@@ -13,21 +13,21 @@ module Headmin
|
|
13
13
|
def input_options
|
14
14
|
keys = attributes - %i[append attribute collection float form input_group label prepend validate wrapper]
|
15
15
|
options = to_h.slice(*keys)
|
16
|
-
options = default_input_options.
|
17
|
-
options.
|
16
|
+
options = default_input_options.deep_merge(options)
|
17
|
+
options.deep_merge(autocomplete_input_options)
|
18
18
|
end
|
19
19
|
|
20
20
|
def input_group_options
|
21
21
|
default_input_group_options
|
22
|
-
.
|
23
|
-
.
|
24
|
-
.
|
22
|
+
.deep_merge(autocomplete_input_group_options)
|
23
|
+
.deep_merge(label_input_group_options)
|
24
|
+
.deep_merge(@input_group || {})
|
25
25
|
end
|
26
26
|
|
27
27
|
def wrapper_options
|
28
|
-
default_wrapper_options.
|
28
|
+
default_wrapper_options.deep_merge({
|
29
29
|
class: ["mb-3", ("form-floating" if float)]
|
30
|
-
}).
|
30
|
+
}).deep_merge(@wrapper || {})
|
31
31
|
end
|
32
32
|
|
33
33
|
private
|
@@ -12,25 +12,25 @@ module Headmin
|
|
12
12
|
def input_options
|
13
13
|
keys = attributes - %i[append attribute collection float form input_group include_blank label prepend validate selected tags wrapper]
|
14
14
|
options = to_h.slice(*keys)
|
15
|
-
default_input_options.
|
15
|
+
default_input_options.deep_merge(options)
|
16
16
|
end
|
17
17
|
|
18
18
|
def input_group_options
|
19
19
|
default_input_group_options
|
20
|
-
.
|
21
|
-
.
|
20
|
+
.deep_merge(label_input_group_options)
|
21
|
+
.deep_merge(@input_group || {})
|
22
22
|
end
|
23
23
|
|
24
24
|
def wrapper_options
|
25
|
-
default_wrapper_options.
|
25
|
+
default_wrapper_options.deep_merge({
|
26
26
|
class: ["mb-3", ("form-floating" if float)]
|
27
|
-
}).
|
27
|
+
}).deep_merge(@wrapper || {})
|
28
28
|
end
|
29
29
|
|
30
30
|
def select_options
|
31
31
|
keys = %i[include_blank selected]
|
32
32
|
options = to_h.slice(*keys)
|
33
|
-
default_options.
|
33
|
+
default_options.deep_merge(options)
|
34
34
|
end
|
35
35
|
|
36
36
|
private
|
@@ -13,21 +13,21 @@ module Headmin
|
|
13
13
|
def input_options
|
14
14
|
keys = attributes - %i[append attribute collection float form input_group label prepend validate wrapper]
|
15
15
|
options = to_h.slice(*keys)
|
16
|
-
options = default_input_options.
|
17
|
-
options.
|
16
|
+
options = default_input_options.deep_merge(options)
|
17
|
+
options.deep_merge(autocomplete_input_options)
|
18
18
|
end
|
19
19
|
|
20
20
|
def input_group_options
|
21
21
|
default_input_group_options
|
22
|
-
.
|
23
|
-
.
|
24
|
-
.
|
22
|
+
.deep_merge(autocomplete_input_group_options)
|
23
|
+
.deep_merge(label_input_group_options)
|
24
|
+
.deep_merge(@input_group || {})
|
25
25
|
end
|
26
26
|
|
27
27
|
def wrapper_options
|
28
|
-
default_wrapper_options.
|
28
|
+
default_wrapper_options.deep_merge({
|
29
29
|
class: ["mb-3", ("form-floating" if float)]
|
30
|
-
}).
|
30
|
+
}).deep_merge(@wrapper || {})
|
31
31
|
end
|
32
32
|
|
33
33
|
private
|
@@ -11,19 +11,19 @@ module Headmin
|
|
11
11
|
def input_options
|
12
12
|
keys = attributes - %i[attribute float form input_group label validate wrapper]
|
13
13
|
options = to_h.slice(*keys)
|
14
|
-
default_input_options.
|
14
|
+
default_input_options.deep_merge(options)
|
15
15
|
end
|
16
16
|
|
17
17
|
def input_group_options
|
18
18
|
default_input_group_options
|
19
|
-
.
|
20
|
-
.
|
19
|
+
.deep_merge(label_input_group_options)
|
20
|
+
.deep_merge(@input_group || {})
|
21
21
|
end
|
22
22
|
|
23
23
|
def wrapper_options
|
24
|
-
default_wrapper_options.
|
24
|
+
default_wrapper_options.deep_merge({
|
25
25
|
class: ["mb-3", ("form-floating" if float)]
|
26
|
-
}).
|
26
|
+
}).deep_merge(@wrapper || {})
|
27
27
|
end
|
28
28
|
|
29
29
|
private
|
@@ -13,21 +13,21 @@ module Headmin
|
|
13
13
|
def input_options
|
14
14
|
keys = attributes - %i[append attribute collection float form input_group label prepend validate wrapper]
|
15
15
|
options = to_h.slice(*keys)
|
16
|
-
options = default_input_options.
|
17
|
-
options.
|
16
|
+
options = default_input_options.deep_merge(options)
|
17
|
+
options.deep_merge(autocomplete_input_options)
|
18
18
|
end
|
19
19
|
|
20
20
|
def input_group_options
|
21
21
|
default_input_group_options
|
22
|
-
.
|
23
|
-
.
|
24
|
-
.
|
22
|
+
.deep_merge(autocomplete_input_group_options)
|
23
|
+
.deep_merge(label_input_group_options)
|
24
|
+
.deep_merge(@input_group || {})
|
25
25
|
end
|
26
26
|
|
27
27
|
def wrapper_options
|
28
|
-
default_wrapper_options.
|
28
|
+
default_wrapper_options.deep_merge({
|
29
29
|
class: ["mb-3", ("form-floating" if float)]
|
30
|
-
}).
|
30
|
+
}).deep_merge(@wrapper || {})
|
31
31
|
end
|
32
32
|
|
33
33
|
private
|
data/app/models/view_model.rb
CHANGED
@@ -11,26 +11,26 @@
|
|
11
11
|
</head>
|
12
12
|
|
13
13
|
<body>
|
14
|
-
<%= render
|
15
|
-
<%= render
|
16
|
-
<%= render
|
17
|
-
<%= render
|
14
|
+
<%= render "headmin/layout/main" do %>
|
15
|
+
<%= render "headmin/layout/sidebar", logo: inline_svg_tag('logo.svg') do %>
|
16
|
+
<%= render "headmin/layout/sidebar/menu" do %>
|
17
|
+
<%= render "headmin/layout/sidebar/menu/item", name: t('.dashboard'), link: admin_root_path, icon: 'speedometer' %>
|
18
18
|
<div class="d-block d-md-none">
|
19
|
-
<%= render
|
20
|
-
<%= render
|
19
|
+
<%= render "headmin/layout/sidebar/menu/locale" do end %>
|
20
|
+
<%= render "headmin/layout/sidebar/menu/account" do end %>
|
21
21
|
</div>
|
22
22
|
<% end %>
|
23
23
|
<% end %>
|
24
|
-
<%= render
|
25
|
-
<%= render
|
26
|
-
<%= render
|
27
|
-
<%= render
|
24
|
+
<%= render "headmin/layout/body" do %>
|
25
|
+
<%= render "headmin/layout/header" do %>
|
26
|
+
<%= render "headmin/layout/header/locale" do end %>
|
27
|
+
<%= render "headmin/layout/header/account" do end %>
|
28
28
|
<% end %>
|
29
|
-
<%= render
|
30
|
-
<%= render
|
29
|
+
<%= render "headmin/layout/content" do %>
|
30
|
+
<%= render "headmin/notifications" %>
|
31
31
|
<%= yield %>
|
32
32
|
<% end %>
|
33
|
-
<%= render
|
33
|
+
<%= render "headmin/layout/footer", class: 'text-secondary' do %>
|
34
34
|
<%= bootstrap_icon('question-circle') %>
|
35
35
|
<a class="text-secondary" href="mailto:info@insiting.com" title="<%= t('.help') %>">
|
36
36
|
<%= t('.help') %>
|
@@ -14,16 +14,16 @@
|
|
14
14
|
# <%= render "headmin/filters", url: admin_polls_path %#>
|
15
15
|
|
16
16
|
action = local_assigns.has_key?(:url) ? url : request.path
|
17
|
-
|
18
|
-
# Perform yield in order to capture content blocks
|
19
|
-
yield
|
20
17
|
%>
|
21
18
|
|
22
|
-
|
19
|
+
<%= form_with url: action, method: :get, data: {controller: "filters", filters_target: "form"} do |form| %>
|
20
|
+
|
21
|
+
<%# Perform yield in order to capture content blocks, pass form so we can use headmin form inputs %>
|
22
|
+
<%= yield(form) %>
|
23
23
|
|
24
24
|
<!-- Default parameters (e.g. sorting, pagination) -->
|
25
25
|
<% default_params.except('page').each do |name, value| %>
|
26
|
-
<%=
|
26
|
+
<%= form.hidden_field name.to_sym, value: value %>
|
27
27
|
<% end %>
|
28
28
|
|
29
29
|
<div class="d-flex flex-column flex-md-row align-content-start align-items-md-start">
|
@@ -69,8 +69,8 @@
|
|
69
69
|
|
70
70
|
<!-- Filter templates -->
|
71
71
|
<%= yield :filters_templates %>
|
72
|
-
</form>
|
73
72
|
|
73
|
+
<% end %>
|
74
74
|
|
75
75
|
<%
|
76
76
|
# Clears content blocks to make this view reusable
|
@@ -19,12 +19,12 @@
|
|
19
19
|
#
|
20
20
|
# === Examples
|
21
21
|
# Basic version
|
22
|
-
# <%= render
|
22
|
+
# <%= render "headmin/form", model: @product do |form| %#>
|
23
23
|
# Form content
|
24
24
|
# <% end %#>
|
25
25
|
#
|
26
26
|
# Specify URL to post to
|
27
|
-
# <%= render
|
27
|
+
# <%= render "headmin/form", model: @product, url: admin_products_path do |form| %#>
|
28
28
|
# Form content
|
29
29
|
# <% end %#>
|
30
30
|
|
@@ -11,7 +11,7 @@
|
|
11
11
|
|
12
12
|
<div class="d-flex flex-row-reverse flex-md-row align-items-center justify-content-between justify-content-md-end my-1">
|
13
13
|
<% content_for :collection_total_count, collection.total_count.to_s unless content_for?(:collection_total_count) %>
|
14
|
-
<div class="ms-2 me-md-2 text-secondary">
|
14
|
+
<div class="ms-2 me-md-2 text-secondary flex-grow-1 flex-shrink-0">
|
15
15
|
<%= t('.items', count: content_for(:collection_total_count).to_i) %>
|
16
16
|
</div>
|
17
17
|
<%= paginate collection, views_prefix: 'headmin/pagination' %>
|