OpenProject is the leading open source project management software.
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.
 
 
 
 
 
 
openproject/lib/widget/group_bys.rb

109 lines
3.7 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 :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
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}",
:onclick => "moveOption#{dir}(this.form.group_by_#{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}",
:onclick => "moveOptions(this.form.group_by_container, this.form.group_by_#{axis});"
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
group_by_ary.sort_by do |g|
l(g.label)
end.collect do |group_by|
next unless group_by.selectable?
option_tag_options = {:value => group_by.underscore_name,
:"data-category" => label.to_s}
if grby = @query.group_bys.detect {|g| g.class == group_by }
option_tag_options.merge({:"data-selected-axis" => grby.type.to_s})
option_tag_options.merge({:"data-selected-index" => @query.group_bys.index(grby)})
end
content_tag :option, option_tag_options do
l(group_by.label)
end
end.compact.join.html_safe
end
end.join.html_safe
end
end
end