app/models/effective/form_inputs/submit.rb
# frozen_string_literal: true module Effective module FormInputs class Submit < Effective::FormInput def to_html(&block) return nil if form_readonly? super() end def build_input(&block) tags = [ icon('check', style: 'display: none;'), icon('x', style: 'display: none;'), icon('spinner'), ( if block_given? capture(&block) else content_tag(:button, options[:input]) do icon_name.present? ? (icon(icon_name) + name) : name end end ) ] (left? ? tags.reverse.join : tags.join).html_safe end def wrapper_options @right = true unless (left? || center? || right?) classes = [ ('row' if layout == :horizontal), 'form-group form-actions', ('form-actions-inline' if inline?), ('form-actions-bordered' if border?), ('form-actions-reset' if reset?), ('justify-content-start' if left? && layout == :vertical), ('justify-content-center' if center? && layout == :vertical), ('justify-content-end' if right? && layout == :vertical) ].compact.join(' ') { class: classes, id: tag_id } end def input_html_options { class: 'btn btn-primary', type: 'submit', name: 'commit', value: name } end def label_options false end private def border? return @border unless @border.nil? @border = options.key?(:border) ? options.delete(:border) : true end # Changes the svg feedback to use position absolute. def inline? return @form_actions_inline unless @form_actions_inline.nil? @form_actions_inline = (options.delete(:inline) || false) end def left? return @left unless @left.nil? @left = (options.delete(:left) || false) end def center? return @center unless @center.nil? @center = (options.delete(:center) || false) end def right? return @right unless @right.nil? @right = (options.delete(:right) || false) end def reset? return @reset unless @reset.nil? @reset = (options.delete(:reset) || false) end def icon_name return @icon unless @icon.nil? @icon = options[:input].delete(:icon) || ''.html_safe end def feedback_options # case layout # when :inline # false # else # { # valid: { class: 'valid-feedback', text: 'Looks good! Submitting...' }, # invalid: { # class: 'invalid-feedback', # text: 'one or more errors are present. please fix the errors above and try again.' # } # } # end false end end end end