##// END OF EJS Templates
Merged r4093 from trunk....
Eric Davis -
r4038:4593d97472c7
parent child
Show More
@@ -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