Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jun 17th, 2012  |  syntax: None  |  size: 1.61 KB  |  hits: 14  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. class BootstrapFormBuilder < ActionView::Helpers::FormBuilder
  2.  
  3.   delegate :capture, :content_tag, :tag, to: :@template
  4.  
  5.   %w[text_field text_area password_field collection_select].each do |method_name|
  6.     define_method(method_name) do |name, *args|
  7.       errors = object.errors[name].any?? " error" : ""
  8.       error_msg = object.errors[name].any?? content_tag(:span, object.errors[name].join(","), class: "help-inline") : ""
  9.    
  10.       content_tag :div, class: "clearfix#{errors}" do
  11.         field_label(name, *args) + content_tag(:div, class: "input#{errors}") do
  12.           super(name, *args) + " " + error_msg
  13.         end
  14.       end
  15.     end
  16.   end
  17.  
  18.   def check_box(name, *args)
  19.     content_tag :div, class: "clearfix" do
  20.       content_tag(:div, class:"input") do
  21.         content_tag(:ul, class:"inputs-list") do
  22.           content_tag(:li) do
  23.             content_tag(:label) do
  24.               super(name, *args) + content_tag(:span) do
  25.                 field_label(name, *args)
  26.               end
  27.             end
  28.           end
  29.         end
  30.       end
  31.     end
  32.   end
  33.  
  34.  
  35.   def div(*args, &block)
  36.     options = args.extract_options!
  37.     data = block_given? ? capture(&block) : ''
  38.     content_tag(:div, data, class: options[:class])
  39.   end
  40.  
  41.  
  42.   def submit(*args)
  43.     super(*args, class: "btn primary")
  44.   end
  45.  
  46. private
  47.  
  48.   def field_label(name, *args)
  49.     options = args.extract_options!
  50.     required = object.class.validators_on(name).any? { |v| v.kind_of? ActiveModel::Validations::PresenceValidator}
  51.     label(name, options[:label], class: ("required" if required))
  52.   end
  53.  
  54.   def objectify_options(options)
  55.     super.except(:label)
  56.   end
  57.  
  58. end