module BootstrapFormHelper
# Extend Bootstrap form builder
class BootstrapForm::FormBuilder
# Returns Bootstrap date-time picker of the "datetime" type tailored for accessing a specified datetime attribute (identified by +name+) on an object
# assigned to the template (identified by +object+). Additional options on the input tag can be passed as a
# hash with +options+. The supported options are shown in the following examples.
#
# ==== Examples
# Specify custom label (otherwise, a humanized version of +name+ is used)
# # => datetime_picker(:post, :published, label: "Published date")
#
# Specify custom CSS style on the element
# # => datetime_picker(:post, :published, style: "background-color: #000; margin-top: 20px;")
#
# Show a "clear" button on the bottom of the date picker.
# # => datetime_picker(:post, :published, clear: true)
#
# Show a "today" button on the bottom of the date picker.
# # => datetime_picker(:post, :published, today: true)
def datetime_picker(name, options = {})
id = "#{@object_name}_#{name.to_s}"
input_name = "#{@object_name}[#{name.to_s}]"
timestamp = @object[name] ? "#{@object[name].to_i}000" : ""
js_locale = I18n.locale.to_s
js_format = I18n.t("time.formats.full_js")
label = name.to_s.humanize
if options[:label] then
label = options[:label]
end
styleStr = ""
if options[:style] then
styleStr = "style='#{options[:style]}'"
end
jsOpts = ""
if options[:today] then
jsOpts << "showTodayButton: true, "
end
res = ""
res << "
"
if options[:clear] then
res << "
"
end
res << ""
if options[:clear] then
res << "
"
end
res << "
"
res.html_safe
end
# Returns Bootstrap button group for choosing a specified enum attribute (identified by +name+) on an object
# assigned to the template (identified by +object+). Additional options on the input tag can be passed as a
# hash with +options+. The supported options are shown in the following examples.
#
# ==== Examples
# Specify custom label (otherwise, a humanized version of +name+ is used)
# # => enum_btn_group(:car, :type, label: "Car type")
#
# Specify custom button names for enum values (a hash)
# # => enum_btn_groups(:car, :type, btn_names: { diesel: "Diesel car", electric: "Electric car" })
#
# Specify custom CSS style on the element
# # => enum_btn_group(:car, :type, style: "background-color: #000; margin-top: 20px;")
#
# Specify custom CSS classes on the element
# # => enum_btn_group(:car, :type, class: "class1 class2")
def enum_btn_group(name, options = {})
id = "#{@object_name}_#{name.to_s}"
input_name = "#{@object_name}[#{name.to_s}]"
enum_vals = @object.class.send(name.to_s.pluralize)
btn_names = Hash[enum_vals.keys.collect { |k| [k, k] }]
if options[:btn_names] then
btn_names = options[:btn_names]
end
btn_names = HashWithIndifferentAccess.new(btn_names)
label = name.to_s.humanize
if options[:label] then
label = options[:label]
end
style_str = ""
if options[:style] then
style_str = " style='#{options[:style]}'"
end
class_str = ""
if options[:class] then
class_str = " #{options[:class]}"
end
res = ""
res << "
"
res << ""
res << " "
res << "
"
enum_vals.keys.each do |val|
active = @object.send("#{val}?")
active_str = active ? " active" : ""
checked_str = active ? " checked='checked'" : ""
res << ""
end
res << "
"
res << "
"
res.html_safe
end
# Returns color picker as a dropdown (