49 lines
1.2 KiB
Ruby
49 lines
1.2 KiB
Ruby
# put this file in any autoloaded path on rails app. HINT: app/inputs/check_boxes_input.rb
|
|
|
|
class CheckBoxesInput < Formtastic::Inputs::CheckBoxesInput
|
|
|
|
def to_html
|
|
unless options[:nested_set]
|
|
super
|
|
else
|
|
nested_wrapping(options)
|
|
end
|
|
end
|
|
|
|
def nested_wrapping(options)
|
|
|
|
choices_wrapping do
|
|
legend_html <<
|
|
hidden_field_for_all <<
|
|
choices_group_wrapping do
|
|
html_template_for_nested_set(options)
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
def html_template_for_nested_set(options)
|
|
options[:collection].map{|menu|
|
|
html_for_nested(menu)
|
|
}.join("\n").html_safe
|
|
|
|
end
|
|
|
|
def html_for_nested(menu, from_nested=false)
|
|
choice = [menu.member_label , menu.id]
|
|
first_wrap = choice_wrapping(choice_wrapping_html_options(choice)) do
|
|
nested = from_nested ? "" : sub_children(menu)
|
|
choice_html(choice) << nested
|
|
end
|
|
end
|
|
|
|
def sub_children(menu)
|
|
template.content_tag( :ul,
|
|
menu.children.collect do |child|
|
|
html_for_nested(child, true)+sub_children(child)
|
|
end.join("\n").html_safe,
|
|
{:style=>"margin-left:20px", :class=>"sub_item-#{menu.id} sub-item"}
|
|
) unless menu.leaf?
|
|
end
|
|
|
|
end |