forked from fixin.me/fixin.me
41 lines
1.3 KiB
Ruby
41 lines
1.3 KiB
Ruby
module ApplicationHelper
|
|
class TabularFormBuilder < ActionView::Helpers::FormBuilder
|
|
(field_helpers - [:label]).each do |selector|
|
|
class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
|
|
def #{selector}(method, options = {})
|
|
@template.content_tag :div, class: "form-row" do
|
|
label_text = label(method, options.delete(:label))
|
|
label_class = ["form-label"]
|
|
label_class << "required" if options[:required]
|
|
label_class << "error" if @object&.errors[method].present?
|
|
|
|
@template.content_tag(:div, label_text, class: label_class) +
|
|
@template.content_tag(:div, super, class: "form-field")
|
|
end
|
|
end
|
|
RUBY_EVAL
|
|
end
|
|
|
|
def submit(value, options = {})
|
|
@template.content_tag :div, super, class: "form-actions"
|
|
end
|
|
end
|
|
|
|
def tabular_form_for(record, options = {}, &block)
|
|
options.merge! builder: TabularFormBuilder
|
|
form_for(record, **options, &block)
|
|
end
|
|
|
|
def image_link_to(name, image = nil, options = nil, html_options = nil)
|
|
name = svg_tag("pictograms/#{image}.svg#icon") + name if image
|
|
link_to name, options, html_options
|
|
end
|
|
|
|
def svg_tag(source, options = {})
|
|
image_name, id = source.split('#')
|
|
content_tag :svg, options do
|
|
tag.use href: "#{image_path(image_name)}##{id}"
|
|
end
|
|
end
|
|
end
|