@@ -1,84 +1,85 | |||||
1 | <div class="contextual"> |
|
1 | <div class="contextual"> | |
2 | <% if !@query.new_record? && @query.editable_by?(User.current) %> |
|
2 | <% if !@query.new_record? && @query.editable_by?(User.current) %> | |
3 | <%= link_to l(:button_edit), {:controller => 'queries', :action => 'edit', :id => @query}, :class => 'icon icon-edit' %> |
|
3 | <%= link_to l(:button_edit), {:controller => 'queries', :action => 'edit', :id => @query}, :class => 'icon icon-edit' %> | |
4 | <%= link_to l(:button_delete), {:controller => 'queries', :action => 'destroy', :id => @query}, :confirm => l(:text_are_you_sure), :method => :post, :class => 'icon icon-del' %> |
|
4 | <%= link_to l(:button_delete), {:controller => 'queries', :action => 'destroy', :id => @query}, :confirm => l(:text_are_you_sure), :method => :post, :class => 'icon icon-del' %> | |
5 | <% end %> |
|
5 | <% end %> | |
6 | </div> |
|
6 | </div> | |
7 |
|
7 | |||
8 | <h2><%= @query.new_record? ? l(:label_issue_plural) : h(@query.name) %></h2> |
|
8 | <h2><%= @query.new_record? ? l(:label_issue_plural) : h(@query.name) %></h2> | |
9 | <% html_title(@query.new_record? ? l(:label_issue_plural) : @query.name) %> |
|
9 | <% html_title(@query.new_record? ? l(:label_issue_plural) : @query.name) %> | |
10 |
|
10 | |||
11 | <% form_tag({ :controller => 'queries', :action => 'new' }, :id => 'query_form') do %> |
|
11 | <% form_tag({ :controller => 'queries', :action => 'new' }, :id => 'query_form') do %> | |
12 | <%= hidden_field_tag('project_id', @project.to_param) if @project %> |
|
12 | <%= hidden_field_tag('project_id', @project.to_param) if @project %> | |
13 | <div id="query_form_content" class="hide-when-print"> |
|
13 | <div id="query_form_content" class="hide-when-print"> | |
14 | <fieldset id="filters" class="collapsible <%= @query.new_record? ? "" : "collapsed" %>"> |
|
14 | <fieldset id="filters" class="collapsible <%= @query.new_record? ? "" : "collapsed" %>"> | |
15 | <legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend> |
|
15 | <legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend> | |
16 | <div style="<%= @query.new_record? ? "" : "display: none;" %>"> |
|
16 | <div style="<%= @query.new_record? ? "" : "display: none;" %>"> | |
17 | <%= render :partial => 'queries/filters', :locals => {:query => @query} %> |
|
17 | <%= render :partial => 'queries/filters', :locals => {:query => @query} %> | |
18 | </div> |
|
18 | </div> | |
19 | </fieldset> |
|
19 | </fieldset> | |
20 | <fieldset class="collapsible collapsed"> |
|
20 | <fieldset class="collapsible collapsed"> | |
21 | <legend onclick="toggleFieldset(this);"><%= l(:label_options) %></legend> |
|
21 | <legend onclick="toggleFieldset(this);"><%= l(:label_options) %></legend> | |
22 | <div style="display: none;"> |
|
22 | <div style="display: none;"> | |
23 | <table> |
|
23 | <table> | |
24 | <tr> |
|
24 | <tr> | |
25 | <td><%= l(:field_column_names) %></td> |
|
25 | <td><%= l(:field_column_names) %></td> | |
26 | <td><%= render :partial => 'queries/columns', :locals => {:query => @query} %></td> |
|
26 | <td><%= render :partial => 'queries/columns', :locals => {:query => @query} %></td> | |
27 | </tr> |
|
27 | </tr> | |
28 | <tr> |
|
28 | <tr> | |
29 | <td><%= l(:field_group_by) %></td> |
|
29 | <td><%= l(:field_group_by) %></td> | |
30 | <td><%= select_tag('group_by', options_for_select([[]] + @query.groupable_columns.collect {|c| [c.caption, c.name.to_s]}, @query.group_by)) %></td> |
|
30 | <td><%= select_tag('group_by', options_for_select([[]] + @query.groupable_columns.collect {|c| [c.caption, c.name.to_s]}, @query.group_by)) %></td> | |
31 | </tr> |
|
31 | </tr> | |
32 | </table> |
|
32 | </table> | |
33 | </div> |
|
33 | </div> | |
34 | </fieldset> |
|
34 | </fieldset> | |
35 | </div> |
|
35 | </div> | |
36 | <p class="buttons hide-when-print"> |
|
36 | <p class="buttons hide-when-print"> | |
37 |
|
37 | |||
38 | <%= link_to_remote l(:button_apply), |
|
38 | <%= link_to_remote l(:button_apply), | |
39 | { :url => { :set_filter => 1 }, |
|
39 | { :url => { :set_filter => 1 }, | |
40 | :before => 'selectAllOptions("selected_columns");', |
|
40 | :before => 'selectAllOptions("selected_columns");', | |
41 | :update => "content", |
|
41 | :update => "content", | |
|
42 | :complete => "apply_filters_observer()", | |||
42 | :with => "Form.serialize('query_form')" |
|
43 | :with => "Form.serialize('query_form')" | |
43 | }, :class => 'icon icon-checked' %> |
|
44 | }, :class => 'icon icon-checked' %> | |
44 |
|
45 | |||
45 | <%= link_to_remote l(:button_clear), |
|
46 | <%= link_to_remote l(:button_clear), | |
46 | { :url => { :set_filter => 1, :project_id => @project }, |
|
47 | { :url => { :set_filter => 1, :project_id => @project }, | |
47 | :method => :get, |
|
48 | :method => :get, | |
48 | :update => "content", |
|
49 | :update => "content", | |
49 | }, :class => 'icon icon-reload' %> |
|
50 | }, :class => 'icon icon-reload' %> | |
50 |
|
51 | |||
51 | <% if @query.new_record? && User.current.allowed_to?(:save_queries, @project, :global => true) %> |
|
52 | <% if @query.new_record? && User.current.allowed_to?(:save_queries, @project, :global => true) %> | |
52 | <%= link_to l(:button_save), {}, :onclick => "selectAllOptions('selected_columns'); $('query_form').submit(); return false;", :class => 'icon icon-save' %> |
|
53 | <%= link_to l(:button_save), {}, :onclick => "selectAllOptions('selected_columns'); $('query_form').submit(); return false;", :class => 'icon icon-save' %> | |
53 | <% end %> |
|
54 | <% end %> | |
54 | </p> |
|
55 | </p> | |
55 | <% end %> |
|
56 | <% end %> | |
56 |
|
57 | |||
57 | <%= error_messages_for 'query' %> |
|
58 | <%= error_messages_for 'query' %> | |
58 | <% if @query.valid? %> |
|
59 | <% if @query.valid? %> | |
59 | <% if @issues.empty? %> |
|
60 | <% if @issues.empty? %> | |
60 | <p class="nodata"><%= l(:label_no_data) %></p> |
|
61 | <p class="nodata"><%= l(:label_no_data) %></p> | |
61 | <% else %> |
|
62 | <% else %> | |
62 | <%= render :partial => 'issues/list', :locals => {:issues => @issues, :query => @query} %> |
|
63 | <%= render :partial => 'issues/list', :locals => {:issues => @issues, :query => @query} %> | |
63 | <p class="pagination"><%= pagination_links_full @issue_pages, @issue_count %></p> |
|
64 | <p class="pagination"><%= pagination_links_full @issue_pages, @issue_count %></p> | |
64 | <% end %> |
|
65 | <% end %> | |
65 |
|
66 | |||
66 | <% other_formats_links do |f| %> |
|
67 | <% other_formats_links do |f| %> | |
67 | <%= f.link_to 'Atom', :url => { :project_id => @project, :query_id => (@query.new_record? ? nil : @query), :key => User.current.rss_key } %> |
|
68 | <%= f.link_to 'Atom', :url => { :project_id => @project, :query_id => (@query.new_record? ? nil : @query), :key => User.current.rss_key } %> | |
68 | <%= f.link_to 'CSV', :url => { :project_id => @project } %> |
|
69 | <%= f.link_to 'CSV', :url => { :project_id => @project } %> | |
69 | <%= f.link_to 'PDF', :url => { :project_id => @project } %> |
|
70 | <%= f.link_to 'PDF', :url => { :project_id => @project } %> | |
70 | <% end %> |
|
71 | <% end %> | |
71 |
|
72 | |||
72 | <% end %> |
|
73 | <% end %> | |
73 | <%= call_hook(:view_issues_index_bottom, { :issues => @issues, :project => @project, :query => @query }) %> |
|
74 | <%= call_hook(:view_issues_index_bottom, { :issues => @issues, :project => @project, :query => @query }) %> | |
74 |
|
75 | |||
75 | <% content_for :sidebar do %> |
|
76 | <% content_for :sidebar do %> | |
76 | <%= render :partial => 'issues/sidebar' %> |
|
77 | <%= render :partial => 'issues/sidebar' %> | |
77 | <% end %> |
|
78 | <% end %> | |
78 |
|
79 | |||
79 | <% content_for :header_tags do %> |
|
80 | <% content_for :header_tags do %> | |
80 | <%= auto_discovery_link_tag(:atom, {:query_id => @query, :format => 'atom', :page => nil, :key => User.current.rss_key}, :title => l(:label_issue_plural)) %> |
|
81 | <%= auto_discovery_link_tag(:atom, {:query_id => @query, :format => 'atom', :page => nil, :key => User.current.rss_key}, :title => l(:label_issue_plural)) %> | |
81 | <%= auto_discovery_link_tag(:atom, {:controller => 'journals', :action => 'index', :query_id => @query, :format => 'atom', :page => nil, :key => User.current.rss_key}, :title => l(:label_changes_details)) %> |
|
82 | <%= auto_discovery_link_tag(:atom, {:controller => 'journals', :action => 'index', :query_id => @query, :format => 'atom', :page => nil, :key => User.current.rss_key}, :title => l(:label_changes_details)) %> | |
82 | <% end %> |
|
83 | <% end %> | |
83 |
|
84 | |||
84 | <%= context_menu issues_context_menu_path %> |
|
85 | <%= context_menu issues_context_menu_path %> |
@@ -1,104 +1,116 | |||||
1 | <script type="text/javascript"> |
|
1 | <script type="text/javascript"> | |
2 | //<![CDATA[ |
|
2 | //<![CDATA[ | |
3 | function add_filter() { |
|
3 | function add_filter() { | |
4 | select = $('add_filter_select'); |
|
4 | select = $('add_filter_select'); | |
5 | field = select.value |
|
5 | field = select.value | |
6 | Element.show('tr_' + field); |
|
6 | Element.show('tr_' + field); | |
7 | check_box = $('cb_' + field); |
|
7 | check_box = $('cb_' + field); | |
8 | check_box.checked = true; |
|
8 | check_box.checked = true; | |
9 | toggle_filter(field); |
|
9 | toggle_filter(field); | |
10 | select.selectedIndex = 0; |
|
10 | select.selectedIndex = 0; | |
11 |
|
11 | |||
12 | for (i=0; i<select.options.length; i++) { |
|
12 | for (i=0; i<select.options.length; i++) { | |
13 | if (select.options[i].value == field) { |
|
13 | if (select.options[i].value == field) { | |
14 | select.options[i].disabled = true; |
|
14 | select.options[i].disabled = true; | |
15 | } |
|
15 | } | |
16 | } |
|
16 | } | |
17 | } |
|
17 | } | |
18 |
|
18 | |||
19 | function toggle_filter(field) { |
|
19 | function toggle_filter(field) { | |
20 | check_box = $('cb_' + field); |
|
20 | check_box = $('cb_' + field); | |
21 |
|
21 | |||
22 | if (check_box.checked) { |
|
22 | if (check_box.checked) { | |
23 | Element.show("operators_" + field); |
|
23 | Element.show("operators_" + field); | |
24 | toggle_operator(field); |
|
24 | toggle_operator(field); | |
25 | } else { |
|
25 | } else { | |
26 | Element.hide("operators_" + field); |
|
26 | Element.hide("operators_" + field); | |
27 | Element.hide("div_values_" + field); |
|
27 | Element.hide("div_values_" + field); | |
28 | } |
|
28 | } | |
29 | } |
|
29 | } | |
30 |
|
30 | |||
31 | function toggle_operator(field) { |
|
31 | function toggle_operator(field) { | |
32 | operator = $("operators_" + field); |
|
32 | operator = $("operators_" + field); | |
33 | switch (operator.value) { |
|
33 | switch (operator.value) { | |
34 | case "!*": |
|
34 | case "!*": | |
35 | case "*": |
|
35 | case "*": | |
36 | case "t": |
|
36 | case "t": | |
37 | case "w": |
|
37 | case "w": | |
38 | case "o": |
|
38 | case "o": | |
39 | case "c": |
|
39 | case "c": | |
40 | Element.hide("div_values_" + field); |
|
40 | Element.hide("div_values_" + field); | |
41 | break; |
|
41 | break; | |
42 | default: |
|
42 | default: | |
43 | Element.show("div_values_" + field); |
|
43 | Element.show("div_values_" + field); | |
44 | break; |
|
44 | break; | |
45 | } |
|
45 | } | |
46 | } |
|
46 | } | |
47 |
|
47 | |||
48 | function toggle_multi_select(field) { |
|
48 | function toggle_multi_select(field) { | |
49 | select = $('values_' + field); |
|
49 | select = $('values_' + field); | |
50 | if (select.multiple == true) { |
|
50 | if (select.multiple == true) { | |
51 | select.multiple = false; |
|
51 | select.multiple = false; | |
52 | } else { |
|
52 | } else { | |
53 | select.multiple = true; |
|
53 | select.multiple = true; | |
54 | } |
|
54 | } | |
55 | } |
|
55 | } | |
|
56 | ||||
|
57 | function apply_filters_observer() { | |||
|
58 | $$("#query_form input[type=text]").invoke("observe", "keypress", function(e){ | |||
|
59 | if(e.keyCode == Event.KEY_RETURN) { | |||
|
60 | <%= remote_function(:url => { :set_filter => 1}, | |||
|
61 | :update => "content", | |||
|
62 | :with => "Form.serialize('query_form')", | |||
|
63 | :complete => "e.stop(); apply_filters_observer()") %> | |||
|
64 | } | |||
|
65 | }); | |||
|
66 | } | |||
|
67 | Event.observe(document,"dom:loaded", apply_filters_observer); | |||
56 |
|
|
68 | //]]> | |
57 | </script> |
|
69 | </script> | |
58 |
|
70 | |||
59 | <table width="100%"> |
|
71 | <table width="100%"> | |
60 | <tr> |
|
72 | <tr> | |
61 | <td> |
|
73 | <td> | |
62 | <table> |
|
74 | <table> | |
63 | <% query.available_filters.sort{|a,b| a[1][:order]<=>b[1][:order]}.each do |filter| %> |
|
75 | <% query.available_filters.sort{|a,b| a[1][:order]<=>b[1][:order]}.each do |filter| %> | |
64 | <% field = filter[0] |
|
76 | <% field = filter[0] | |
65 | options = filter[1] %> |
|
77 | options = filter[1] %> | |
66 | <tr <%= 'style="display:none;"' unless query.has_filter?(field) %> id="tr_<%= field %>" class="filter"> |
|
78 | <tr <%= 'style="display:none;"' unless query.has_filter?(field) %> id="tr_<%= field %>" class="filter"> | |
67 | <td style="width:200px;"> |
|
79 | <td style="width:200px;"> | |
68 | <%= check_box_tag 'fields[]', field, query.has_filter?(field), :onclick => "toggle_filter('#{field}');", :id => "cb_#{field}" %> |
|
80 | <%= check_box_tag 'fields[]', field, query.has_filter?(field), :onclick => "toggle_filter('#{field}');", :id => "cb_#{field}" %> | |
69 | <label for="cb_<%= field %>"><%= filter[1][:name] || l(("field_"+field.to_s.gsub(/\_id$/, "")).to_sym) %></label> |
|
81 | <label for="cb_<%= field %>"><%= filter[1][:name] || l(("field_"+field.to_s.gsub(/\_id$/, "")).to_sym) %></label> | |
70 | </td> |
|
82 | </td> | |
71 | <td style="width:150px;"> |
|
83 | <td style="width:150px;"> | |
72 | <%= select_tag "operators[#{field}]", options_for_select(operators_for_select(options[:type]), query.operator_for(field)), :id => "operators_#{field}", :onchange => "toggle_operator('#{field}');", :class => "select-small", :style => "vertical-align: top;" %> |
|
84 | <%= select_tag "operators[#{field}]", options_for_select(operators_for_select(options[:type]), query.operator_for(field)), :id => "operators_#{field}", :onchange => "toggle_operator('#{field}');", :class => "select-small", :style => "vertical-align: top;" %> | |
73 | </td> |
|
85 | </td> | |
74 | <td> |
|
86 | <td> | |
75 | <div id="div_values_<%= field %>" style="display:none;"> |
|
87 | <div id="div_values_<%= field %>" style="display:none;"> | |
76 | <% case options[:type] |
|
88 | <% case options[:type] | |
77 | when :list, :list_optional, :list_status, :list_subprojects %> |
|
89 | when :list, :list_optional, :list_status, :list_subprojects %> | |
78 | <select <%= "multiple=true" if query.values_for(field) and query.values_for(field).length > 1 %> name="values[<%= field %>][]" id="values_<%= field %>" class="select-small" style="vertical-align: top;"> |
|
90 | <select <%= "multiple=true" if query.values_for(field) and query.values_for(field).length > 1 %> name="values[<%= field %>][]" id="values_<%= field %>" class="select-small" style="vertical-align: top;"> | |
79 | <%= options_for_select options[:values], query.values_for(field) %> |
|
91 | <%= options_for_select options[:values], query.values_for(field) %> | |
80 | </select> |
|
92 | </select> | |
81 | <%= link_to_function image_tag('bullet_toggle_plus.png'), "toggle_multi_select('#{field}');", :style => "vertical-align: bottom;" %> |
|
93 | <%= link_to_function image_tag('bullet_toggle_plus.png'), "toggle_multi_select('#{field}');", :style => "vertical-align: bottom;" %> | |
82 | <% when :date, :date_past %> |
|
94 | <% when :date, :date_past %> | |
83 | <%= text_field_tag "values[#{field}][]", query.values_for(field), :id => "values_#{field}", :size => 3, :class => "select-small" %> <%= l(:label_day_plural) %> |
|
95 | <%= text_field_tag "values[#{field}][]", query.values_for(field), :id => "values_#{field}", :size => 3, :class => "select-small" %> <%= l(:label_day_plural) %> | |
84 | <% when :string, :text %> |
|
96 | <% when :string, :text %> | |
85 | <%= text_field_tag "values[#{field}][]", query.values_for(field), :id => "values_#{field}", :size => 30, :class => "select-small" %> |
|
97 | <%= text_field_tag "values[#{field}][]", query.values_for(field), :id => "values_#{field}", :size => 30, :class => "select-small" %> | |
86 | <% when :integer %> |
|
98 | <% when :integer %> | |
87 | <%= text_field_tag "values[#{field}][]", query.values_for(field), :id => "values_#{field}", :size => 3, :class => "select-small" %> |
|
99 | <%= text_field_tag "values[#{field}][]", query.values_for(field), :id => "values_#{field}", :size => 3, :class => "select-small" %> | |
88 | <% end %> |
|
100 | <% end %> | |
89 | </div> |
|
101 | </div> | |
90 | <script type="text/javascript">toggle_filter('<%= field %>');</script> |
|
102 | <script type="text/javascript">toggle_filter('<%= field %>');</script> | |
91 | </td> |
|
103 | </td> | |
92 | </tr> |
|
104 | </tr> | |
93 | <% end %> |
|
105 | <% end %> | |
94 | </table> |
|
106 | </table> | |
95 | </td> |
|
107 | </td> | |
96 | <td class="add-filter"> |
|
108 | <td class="add-filter"> | |
97 | <%= label_tag('add_filter_select', l(:label_filter_add)) %>: |
|
109 | <%= label_tag('add_filter_select', l(:label_filter_add)) %>: | |
98 | <%= select_tag 'add_filter_select', options_for_select([["",""]] + query.available_filters.sort{|a,b| a[1][:order]<=>b[1][:order]}.collect{|field| [ field[1][:name] || l(("field_"+field[0].to_s.gsub(/_id$/, "")).to_sym), field[0]] unless query.has_filter?(field[0])}.compact), |
|
110 | <%= select_tag 'add_filter_select', options_for_select([["",""]] + query.available_filters.sort{|a,b| a[1][:order]<=>b[1][:order]}.collect{|field| [ field[1][:name] || l(("field_"+field[0].to_s.gsub(/_id$/, "")).to_sym), field[0]] unless query.has_filter?(field[0])}.compact), | |
99 | :onchange => "add_filter();", |
|
111 | :onchange => "add_filter();", | |
100 | :class => "select-small", |
|
112 | :class => "select-small", | |
101 | :name => nil %> |
|
113 | :name => nil %> | |
102 | </td> |
|
114 | </td> | |
103 | </tr> |
|
115 | </tr> | |
104 | </table> |
|
116 | </table> |
General Comments 0
You need to be logged in to leave comments.
Login now