diff --git a/app/assets/images/pictograms/alert-outline.svg b/app/assets/images/pictograms/alert-outline.svg
index 673af4c..41041d8 100644
--- a/app/assets/images/pictograms/alert-outline.svg
+++ b/app/assets/images/pictograms/alert-outline.svg
@@ -1 +1 @@
-
+
diff --git a/app/assets/images/pictograms/check-circle-outline.svg b/app/assets/images/pictograms/check-circle-outline.svg
index 17f5737..385f9e2 100644
--- a/app/assets/images/pictograms/check-circle-outline.svg
+++ b/app/assets/images/pictograms/check-circle-outline.svg
@@ -1 +1 @@
-
+
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 71d4d4c..ce658e3 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -12,6 +12,12 @@ module ApplicationHelper
labeled_field_for(method, options) { super }
end
+ def submit(value = nil, options = {})
+ value, options = nil, value if value.is_a?(Hash)
+ options[:class] = @template.class_names('button', options[:class])
+ super
+ end
+
private
def labeled_field_for(method, options)
@@ -72,13 +78,8 @@ module ApplicationHelper
end
def labeled_form_for(record, options = {}, &block)
- extra_options = {builder: LabeledFormBuilder,
- data: {turbo: false},
- html: {class: 'labeled-form'}}
- options = options.deep_merge(extra_options) do |key, left, right|
- key == :class ? class_names(left, right) : right
- end
- form_for(record, **options, &block)
+ extra_options = {builder: LabeledFormBuilder, html: {class: 'labeled-form'}}
+ form_for(record, **merge_attributes(options, extra_options), &block)
end
class TabularFormBuilder < ActionView::Helpers::FormBuilder
@@ -113,8 +114,12 @@ module ApplicationHelper
end
def button(value = nil, options = {}, &block)
- # button does not use #objectify_options
- options.merge!(@options.slice(:form))
+ # #button does not use #objectify_options/@default_options
+ value, options = nil, value if value.is_a?(Hash)
+ options = options.merge(
+ @default_options.slice(:form),
+ class: @template.class_names('button', options[:class])
+ )
super
end
@@ -135,20 +140,21 @@ module ApplicationHelper
# [autofocus]. Otherwise IDs are not unique when multiple forms are open
# and the first input gets focus.
record_object, options = nil, record_object if record_object.is_a?(Hash)
- options.merge!(builder: TabularFormBuilder, skip_default_ids: true)
+ extra_options = {builder: TabularFormBuilder, skip_default_ids: true}
+ options = merge_attributes(options, extra_options)
# TODO: set error message with setCustomValidity instead of rendering to flash?
render_errors(record_object || record_name)
fields_for(record_name, record_object, **options, &block)
end
def tabular_form_with(**options, &block)
- options = options.deep_merge(builder: TabularFormBuilder,
- html: {autocomplete: 'off'})
- form_with(**options, &block)
+ extra_options = {builder: TabularFormBuilder, html: {autocomplete: 'off'}}
+ form_with(**merge_attributes(options, extra_options), &block)
end
def svg_tag(source, label = nil, options = {})
- svg_tag = tag.svg(options) do
+ label, options = nil, label if label.is_a? Hash
+ svg_tag = tag.svg(**options) do
tag.use(href: "#{image_path(source + ".svg")}#icon")
end
label.blank? ? svg_tag : svg_tag + tag.span(label)
@@ -159,6 +165,7 @@ module ApplicationHelper
['measurements', 'scale-bathroom', :restricted],
['quantities', 'axis-arrow', :restricted, 'right'],
['units', 'weight-gram', :restricted],
+ # TODO: display users tab only if >1 user present; sole_user?/sole_admin?
['users', 'account-multiple-outline', :admin],
]
@@ -206,6 +213,7 @@ module ApplicationHelper
def render_errors(records)
# Conversion of flash to Array only required because of Devise
+ # TODO: override Devise message setting to Array()?
flash[:alert] = Array(flash[:alert])
Array(records).each { |record| flash[:alert] += record.errors.full_messages }
end
@@ -215,8 +223,8 @@ module ApplicationHelper
# Conversion of flash to Array only required because of Devise
Array(messages).map do |message|
tag.div class: "flash #{entry}" do
- tag.div(sanitize(message)) + tag.button(sanitize("×"), tabindex: -1,
- onclick: "this.parentElement.remove();")
+ tag.span(sanitize(message)) +
+ svg_tag('pictograms/close-outline', {onclick: "this.parentElement.remove()"})
end
end
end.join.html_safe
@@ -252,4 +260,11 @@ module ApplicationHelper
[name, html_options]
end
+
+ # Like Hash#deep_merge, but aware of HTML attributes.
+ def merge_attributes(left, right)
+ left.deep_merge(right) do |key, lvalue, rvalue|
+ key == :class ? class_names(lvalue, rvalue) : rvalue
+ end
+ end
end