def input_checkbox(label, name, checked = nil, args = {})
id = args[:id] ? args[:id] : "#{id_for(name)}_0"
if args.key?(:show_value)
show_value = args.delete(:show_value)
else
show_value = true
end
if args.key?(:show_label)
show_label = args.delete(:show_label)
else
show_label = true
end
if !args[:values] and @form_values.respond_to?(name)
args[:values] = @form_values.send(name)
end
if args[:span_class]
span_class = args[:span_class]
args.delete(:span_class)
else
span_class = "checkbox_wrap"
end
args[:type] = :checkbox if !args[:type]
if args[:values].class != Hash and args[:values].class != Array
args[:values] = [args[:values]]
end
if !args[:values].empty?
@g.p do
if show_label === true
label_for(id, label, name)
end
args[:values].each_with_index do |value, index|
id = args[:id] ? args[:id] : "#{id_for(name)}_#{index}"
if args[:type] == :checkbox
checkbox_name = "#{name}[]"
else
checkbox_name = name
end
opts = args.clone
opts.delete(:values)
if value.class == Array
checkbox_text = value[0]
checkbox_value = value[1]
else
checkbox_text = checkbox_value = value
end
if checked.class == Array
if checked.include?(checkbox_value)
opts[:checked] = 'checked'
end
else
if checkbox_value == checked
opts[:checked] = 'checked'
end
end
opts = opts.merge(
:name => checkbox_name, :id => id, :value => checkbox_value
)
@g.span(:class => span_class) do
@g.input(opts)
" #{checkbox_text}" if show_value === true
end
end
end
end
end