kanbanworkflowstimelinescrumrubyroadmapproject-planningproject-managementopenprojectangularissue-trackerifcgantt-chartganttbug-trackerboardsbcf
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
3.6 KiB
114 lines
3.6 KiB
class Widget::GroupBys < Widget::Base
|
|
extend ProactiveAutoloader
|
|
|
|
def render_row_1_with_columns
|
|
content_tag :tr do
|
|
tr = content_tag :td, " ", :colspan => "2"
|
|
tr += content_tag :td, :align => "center", :valign => "right" do
|
|
render_up_down_buttons("columns")
|
|
end
|
|
tr += content_tag :td, :valign => "middle" do
|
|
content_tag(:h3, "Columns") + selected_group_bys("columns")
|
|
end
|
|
end
|
|
end
|
|
|
|
def render_row_2_with_up_down
|
|
content_tag :tr do
|
|
tr = content_tag :td, " "
|
|
tr += content_tag :td, :valign => "bottom", :style => "padding-bottom: 0;" do
|
|
content_tag :h3, "Rows"
|
|
end
|
|
tr += content_tag :td, " "
|
|
tr += content_tag :td, :align => "left", :valign => "left" do
|
|
render_move_buttons("columns", "Up", "Down")
|
|
end
|
|
end
|
|
end
|
|
|
|
def render_row_3_with_rows_and_group_bys
|
|
content_tag :tr do
|
|
tr = content_tag :td, :align => "center", :valign => "top" do
|
|
render_up_down_buttons("rows")
|
|
end
|
|
tr += content_tag :td ,:style => "padding-left: 0pt;", :valign => "top" do
|
|
selected_group_bys("rows")
|
|
end
|
|
tr += content_tag :td, :align => "center", :valign => "top" do
|
|
render_move_buttons("rows", "Left", "Right", true)
|
|
end
|
|
tr += content_tag :td do
|
|
render_grouped_group_bys
|
|
end
|
|
end
|
|
end
|
|
|
|
#TODO: replace me with a drag&drop group_by selector
|
|
def render
|
|
content_tag :div do
|
|
content_tag :table, :style => "border-collapse: collapse; border: 0pt none;",
|
|
:id => "group_by_table" do
|
|
content_tag :tbody do
|
|
render_row_1_with_columns +
|
|
render_row_2_with_up_down +
|
|
render_row_3_with_rows_and_group_bys
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
def selected_group_bys(axis)
|
|
content_tag :select, "", :style => "width: 180px;", :size => "4",
|
|
:name => "groups[#{axis}][]", :multiple => "multiple",
|
|
:id => "group_by_#{axis}"
|
|
end
|
|
|
|
def render_up_down_buttons(axis)
|
|
render_sort_button(axis, "Up") + tag(:br) + render_sort_button(axis, "Down")
|
|
end
|
|
|
|
def render_sort_button(axis, dir)
|
|
tag :input, :type => "button", :class => "buttons group_by sort sort#{dir} sort-#{axis}"
|
|
end
|
|
|
|
def render_move_buttons(axis, to, from, br = false)
|
|
canvas = render_move_option_button(axis, to)
|
|
canvas += tag(:br) if br
|
|
canvas + render_move_option_button(axis, from)
|
|
end
|
|
|
|
def render_move_option_button(axis, dir)
|
|
tag :input, :type => "button", :class => "buttons group_by move move#{dir}"
|
|
end
|
|
|
|
def render_grouped_group_bys
|
|
content_tag :select, :style => "width: 180px;", :size => "9", :multiple => "multiple", :id => "group_by_container" do
|
|
engine::GroupBy.all_grouped.sort_by do |label, group_by_ary|
|
|
l(label)
|
|
end.collect do |label, group_by_ary|
|
|
content_tag :optgroup, :label => l(label), :"data-category" => label.to_s do
|
|
render_group_bys_for(group_by_ary, label)
|
|
end
|
|
end.join.html_safe
|
|
end
|
|
end
|
|
|
|
def render_group_bys_for(group_by_ary, label)
|
|
group_by_ary.sort_by do |g|
|
|
l(g.label)
|
|
end.collect do |group_by|
|
|
next unless group_by.selectable?
|
|
render_group_by(group_by, :value => group_by.underscore_name, :"data-category" => label.to_s)
|
|
end.compact.join.html_safe
|
|
end
|
|
|
|
def render_group_by(group_by, option_tag_options)
|
|
if grby = @query.group_bys.detect {|g| g.class == group_by }
|
|
option_tag_options[:"data-selected-axis"] = grby.type.to_s
|
|
option_tag_options[:"data-selected-index"] = @query.group_bys.index(grby)
|
|
end
|
|
content_tag :option, option_tag_options do
|
|
l(group_by.label)
|
|
end
|
|
end
|
|
end
|
|
|