# Rails helper methods associated with forms for Bootstrap.
#
# @example +#submit_button_tag()+ instead of +#submit_button()+
# submit_button_tag
# submit_button_tag('Save')
# submit_button_tag('Delete', :danger)
# submit_button_tag('Big', :large)
# submit_button_tag('With Options', :small, :info, id: 'my-id')
module Bootstrap::FormHelper
InvalidButtonModifierError = Class.new(StandardError)
# Returns similar to +#submit_tag()+ but:
# * styled like a Bootstrap button, type :primary
# * has +:disable_with+ set to "Processing ..."
# See {Bootstrap::ButtonHelper} for documentation on button type and size
# @overload submit_button_tag(options={})
# @param [Hash] options all options except +:disable_with+ become html attributes for tag
# @option options [String, false] :disable_with either override or turn off the disabling of the button
# @overload submit_button_tag(text, options={})
# @param [String] text value of
# @param [Hash] options see +options+ param in first method signature
# @overload submit_button_tag(text, type, options={})
# @param [String] text value of
# @param [String, Symbol] type type of button
# @param [Hash] options see +options+ param in first method signature
# @overload submit_button_tag(text, size, options={})
# @param [String] text value of
# @param [String, Symbol] size size of button
# @param [Hash] options see +options+ param in first method signature
# @overload submit_button_tag(text, type, size, options={})
# @param [String] text value of
# @param [String, Symbol] type type of button
# @param [String, Symbol] size size of button
# @param [Hash] options see +options+ param in first method signature
# @return [String]
def submit_button_tag(*args)
options = canonicalize_options(args.extract_options!)
value = if Bootstrap::ButtonHelper::BUTTON_ALL.include?(args.first.to_s)
"Save changes"
else
args.shift.presence || "Save changes"
end
button_classes = if args.present?
args.each { |e| raise(InvalidButtonModifierError, e.inspect) unless
Bootstrap::ButtonHelper::BUTTON_ALL.include?(e.to_s) }
['btn'] + args.map { |e| "btn-#{e}" }
else
['btn', 'btn-primary']
end
options = ensure_class(options, button_classes)
options[:disable_with] = "Processing ..." unless options.has_key?(:disable_with)
submit_tag(value, options)
end
end