Module: Formtastic::Inputs::Base::Choices

Included in:
CheckBoxesInput, RadioInput
Defined in:
lib/formtastic/inputs/base/choices.rb

Instance Method Summary collapse

Instance Method Details

#choice_html(choice) ⇒ Object



42
43
44
# File 'lib/formtastic/inputs/base/choices.rb', line 42

def choice_html(choice)
  raise "choice_html() needs to be implemented when including Formtastic::Inputs::Base::Choices"
end

#choice_html_options(choice) ⇒ Object



58
59
60
# File 'lib/formtastic/inputs/base/choices.rb', line 58

def choice_html_options(choice)
  custom_choice_html_options(choice).merge(default_choice_html_options(choice))
end

#choice_html_safe_value(choice) ⇒ Object



70
71
72
# File 'lib/formtastic/inputs/base/choices.rb', line 70

def choice_html_safe_value(choice)
  choice_value(choice).to_s.gsub(/\s/, '_').gsub(/[^\w-]/, '').downcase
end

#choice_input_dom_id(choice) ⇒ Object



74
75
76
77
78
79
80
81
82
# File 'lib/formtastic/inputs/base/choices.rb', line 74

def choice_input_dom_id(choice)
  [
    builder.dom_id_namespace,
    sanitized_object_name,
    builder.options[:index],
    association_primary_key || method,
    choice_html_safe_value(choice)
  ].compact.reject { |i| i.blank? }.join("_")
end

#choice_label(choice) ⇒ Object



46
47
48
49
50
51
52
# File 'lib/formtastic/inputs/base/choices.rb', line 46

def choice_label(choice)
  if choice.is_a?(Array)
    choice.first
  else
    choice
  end.to_s
end

#choice_value(choice) ⇒ Object



54
55
56
# File 'lib/formtastic/inputs/base/choices.rb', line 54

def choice_value(choice)
  choice.is_a?(Array) ? choice[1] : choice
end

#choice_wrapping(html_options, &block) ⇒ Object



28
29
30
31
32
33
# File 'lib/formtastic/inputs/base/choices.rb', line 28

def choice_wrapping(html_options, &block)
  template.(:li,
    template.capture(&block),
    html_options
  )
end

#choice_wrapping_html_options(choice) ⇒ Object



35
36
37
38
39
40
# File 'lib/formtastic/inputs/base/choices.rb', line 35

def choice_wrapping_html_options(choice)
  classes = ['choice']
  classes << "#{sanitized_method_name.singularize}_#{choice_html_safe_value(choice)}" if value_as_class?

  { :class => classes.join(" ") }
end

#choices_group_wrapping(&block) ⇒ Object



17
18
19
20
21
22
# File 'lib/formtastic/inputs/base/choices.rb', line 17

def choices_group_wrapping(&block)
  template.(:ol,
    template.capture(&block),
    choices_group_wrapping_html_options
  )
end

#choices_group_wrapping_html_optionsObject



24
25
26
# File 'lib/formtastic/inputs/base/choices.rb', line 24

def choices_group_wrapping_html_options
  { :class => "choices-group" }
end

#choices_wrapping(&block) ⇒ Object



6
7
8
9
10
11
# File 'lib/formtastic/inputs/base/choices.rb', line 6

def choices_wrapping(&block)
  template.(:fieldset,
    template.capture(&block),
    choices_wrapping_html_options
  )
end

#choices_wrapping_html_optionsObject



13
14
15
# File 'lib/formtastic/inputs/base/choices.rb', line 13

def choices_wrapping_html_options
  { :class => "choices" }
end

#custom_choice_html_options(choice) ⇒ Object



66
67
68
# File 'lib/formtastic/inputs/base/choices.rb', line 66

def custom_choice_html_options(choice)
  (choice.is_a?(Array) && choice.size > 2) ? choice.last : {}
end

#default_choice_html_options(choice) ⇒ Object



62
63
64
# File 'lib/formtastic/inputs/base/choices.rb', line 62

def default_choice_html_options(choice)
  { :id => choice_input_dom_id(choice) }
end

#label_html_optionsObject

Override to remove the for attribute since this isn't associated with any element, as it's nested inside the legend.



101
102
103
# File 'lib/formtastic/inputs/base/choices.rb', line 101

def label_html_options
  super.merge(:for => nil)
end

#legend_htmlObject



88
89
90
91
92
93
94
95
96
97
# File 'lib/formtastic/inputs/base/choices.rb', line 88

def legend_html
  if render_label?
    template.(:legend,
      template.(:label, label_text),
      label_html_options.merge(:class => "label")
    )
  else
    "".html_safe
  end
end

#value_as_class?Boolean



84
85
86
# File 'lib/formtastic/inputs/base/choices.rb', line 84

def value_as_class?
  options[:value_as_class]
end