class Widget::GroupBys < Widget::Base def render_options(group_by_ary) group_by_ary.sort_by do |group_by| group_by.label end.collect do |group_by| next unless group_by.selectable? content_tag :option, :value => group_by.underscore_name, :'data-label' => "#{CGI::escapeHTML(h(group_by.label))}" do h(group_by.label) end end.join.html_safe end def render_group_caption(type) content_tag :span do out = content_tag :span, l("label_#{type}".to_sym), :class => 'in_row group_by_caption' out += content_tag :span, :class => 'arrow in_row arrow_group_by_caption' do '' #cannot use tag here as it would generate which leads to wrong interpretation in most browsers end out.html_safe end end def render_group(type, initially_selected, show_help = false) initially_selected = initially_selected.map do |group_by| [group_by.class.underscore_name, h(group_by.class.label)] end content_tag :fieldset, :id => "group_by_#{type}", :class => 'drag_target drag_container', :'data-initially-selected' => initially_selected.to_json.gsub('"', "'") do out = content_tag :legend, l(:"label_#{type}"), :class => "hidden-for-sighted" out += render_group_caption type out += label_tag "add_group_by_#{type}", l(:"label_group_by_add"), :class => 'hidden-for-sighted' out += content_tag :select, :id => "add_group_by_#{type}", :class => 'select-small' do content = content_tag :option, "-- #{l(:label_group_by_add)} --", :value => '' content += engine::GroupBy.all_grouped.sort_by do |label, group_by_ary| l(label) end.collect do |label, group_by_ary| content_tag :optgroup, :label => h(l(label)) do render_options group_by_ary end end.join.html_safe content end if show_help out += maybe_with_help :icon => { :class => 'group-by-icon' }, :tooltip => { :class => 'group-by-tip' }, :instant_write => false end out end end def render write(content_tag(:div, :id => 'group_by_area') do out = render_group 'columns', @subject.group_bys(:column), true out += render_group 'rows', @subject.group_bys(:row) out += image_tag "reporting_engine/remove.gif", :id => "hidden_remove_img", :style => "display:none", :class => "reporting_hidden_group_remove_image" out.html_safe end) end end