Chris@909
|
1 <script type="text/javascript">
|
Chris@909
|
2 //<![CDATA[
|
Chris@909
|
3 function add_filter() {
|
Chris@909
|
4 select = $('add_filter_select');
|
Chris@909
|
5 field = select.value
|
Chris@909
|
6 Element.show('tr_' + field);
|
Chris@909
|
7 check_box = $('cb_' + field);
|
Chris@909
|
8 check_box.checked = true;
|
Chris@909
|
9 toggle_filter(field);
|
Chris@909
|
10 select.selectedIndex = 0;
|
Chris@909
|
11
|
Chris@909
|
12 for (i=0; i<select.options.length; i++) {
|
Chris@909
|
13 if (select.options[i].value == field) {
|
Chris@909
|
14 select.options[i].disabled = true;
|
Chris@909
|
15 }
|
Chris@909
|
16 }
|
Chris@909
|
17 }
|
Chris@909
|
18
|
Chris@909
|
19 function toggle_filter(field) {
|
Chris@909
|
20 check_box = $('cb_' + field);
|
Chris@909
|
21 if (check_box.checked) {
|
Chris@909
|
22 Element.show("operators_" + field);
|
Chris@909
|
23 Form.Element.enable("operators_" + field);
|
Chris@909
|
24 toggle_operator(field);
|
Chris@909
|
25 } else {
|
Chris@909
|
26 Element.hide("operators_" + field);
|
Chris@909
|
27 Form.Element.disable("operators_" + field);
|
Chris@909
|
28 enableValues(field, []);
|
Chris@909
|
29 }
|
Chris@909
|
30 }
|
Chris@909
|
31
|
Chris@909
|
32 function enableValues(field, indexes) {
|
Chris@909
|
33 var f = $$(".values_" + field);
|
Chris@909
|
34 for(var i=0;i<f.length;i++) {
|
Chris@909
|
35 if (indexes.include(i)) {
|
Chris@909
|
36 Form.Element.enable(f[i]);
|
Chris@909
|
37 f[i].up('span').show();
|
Chris@909
|
38 } else {
|
Chris@909
|
39 f[i].value = '';
|
Chris@909
|
40 Form.Element.disable(f[i]);
|
Chris@909
|
41 f[i].up('span').hide();
|
Chris@909
|
42 }
|
Chris@909
|
43 }
|
Chris@909
|
44 if (indexes.length > 0) {
|
Chris@909
|
45 Element.show("div_values_" + field);
|
Chris@909
|
46 } else {
|
Chris@909
|
47 Element.hide("div_values_" + field);
|
Chris@909
|
48 }
|
Chris@909
|
49 }
|
Chris@909
|
50
|
Chris@909
|
51 function toggle_operator(field) {
|
Chris@909
|
52 operator = $("operators_" + field);
|
Chris@909
|
53 switch (operator.value) {
|
Chris@909
|
54 case "!*":
|
Chris@909
|
55 case "*":
|
Chris@909
|
56 case "t":
|
Chris@909
|
57 case "w":
|
Chris@909
|
58 case "o":
|
Chris@909
|
59 case "c":
|
Chris@909
|
60 enableValues(field, []);
|
Chris@909
|
61 break;
|
Chris@909
|
62 case "><":
|
Chris@909
|
63 enableValues(field, [0,1]);
|
Chris@909
|
64 break;
|
Chris@909
|
65 case "<t+":
|
Chris@909
|
66 case ">t+":
|
Chris@909
|
67 case "t+":
|
Chris@909
|
68 case ">t-":
|
Chris@909
|
69 case "<t-":
|
Chris@909
|
70 case "t-":
|
Chris@909
|
71 enableValues(field, [2]);
|
Chris@909
|
72 break;
|
Chris@909
|
73 default:
|
Chris@909
|
74 enableValues(field, [0]);
|
Chris@909
|
75 break;
|
Chris@909
|
76 }
|
Chris@909
|
77 }
|
Chris@909
|
78
|
Chris@909
|
79 function toggle_multi_select(el) {
|
Chris@909
|
80 var select = $(el);
|
Chris@909
|
81 if (select.multiple == true) {
|
Chris@909
|
82 select.multiple = false;
|
Chris@909
|
83 } else {
|
Chris@909
|
84 select.multiple = true;
|
Chris@909
|
85 }
|
Chris@909
|
86 }
|
Chris@909
|
87
|
Chris@909
|
88 function submit_query_form(id) {
|
Chris@909
|
89 selectAllOptions("selected_columns");
|
Chris@909
|
90 $(id).submit();
|
Chris@909
|
91 }
|
Chris@909
|
92
|
Chris@909
|
93 function apply_filters_observer() {
|
Chris@909
|
94 $$("#query_form input[type=text]").invoke("observe", "keypress", function(e){
|
Chris@909
|
95 if(e.keyCode == Event.KEY_RETURN) {
|
Chris@909
|
96 submit_query_form("query_form");
|
Chris@909
|
97 }
|
Chris@909
|
98 });
|
Chris@909
|
99 }
|
Chris@909
|
100 Event.observe(document,"dom:loaded", apply_filters_observer);
|
Chris@909
|
101 //]]>
|
Chris@909
|
102 </script>
|
Chris@909
|
103
|
Chris@909
|
104 <table width="100%">
|
Chris@909
|
105 <tr>
|
Chris@909
|
106 <td>
|
Chris@909
|
107 <table>
|
Chris@909
|
108 <% query.available_filters.sort{|a,b| a[1][:order]<=>b[1][:order]}.each do |filter| %>
|
Chris@909
|
109 <% field = filter[0]
|
Chris@909
|
110 options = filter[1] %>
|
Chris@909
|
111 <tr <%= 'style="display:none;"' unless query.has_filter?(field) %> id="tr_<%= field %>" class="filter">
|
Chris@909
|
112 <td class="field">
|
Chris@909
|
113 <%= check_box_tag 'f[]', field, query.has_filter?(field), :onclick => "toggle_filter('#{field}');", :id => "cb_#{field}" %>
|
Chris@909
|
114 <label for="cb_<%= field %>"><%= filter[1][:name] || l(("field_"+field.to_s.gsub(/\_id$/, "")).to_sym) %></label>
|
Chris@909
|
115 </td>
|
Chris@909
|
116 <td class="operator">
|
Chris@909
|
117 <%= label_tag "op_#{field}", l(:description_filter), :class => "hidden-for-sighted" %>
|
Chris@909
|
118 <%= select_tag "op[#{field}]", options_for_select(operators_for_select(options[:type]),
|
Chris@909
|
119 query.operator_for(field)), :id => "operators_#{field}",
|
Chris@909
|
120 :onchange => "toggle_operator('#{field}');" %>
|
Chris@909
|
121 </td>
|
Chris@909
|
122 <td class="values">
|
Chris@909
|
123 <div id="div_values_<%= field %>" style="display:none;">
|
Chris@909
|
124 <% case options[:type]
|
Chris@909
|
125 when :list, :list_optional, :list_status, :list_subprojects %>
|
Chris@909
|
126 <span class="span_values_<%= field %>">
|
Chris@909
|
127 <%= select_tag "v[#{field}][]", options_for_select(options[:values], query.values_for(field)), :class => "values_#{field}", :id => "values_#{field}_1", :multiple => (query.values_for(field) && query.values_for(field).length > 1) %>
|
Chris@909
|
128 <%= link_to_function image_tag('bullet_toggle_plus.png'), "toggle_multi_select('values_#{field}_1');" %>
|
Chris@909
|
129 </span>
|
Chris@909
|
130 <% when :date, :date_past %>
|
Chris@909
|
131 <span class="span_values_<%= field %>"><%= text_field_tag "v[#{field}][]", query.value_for(field), :size => 10, :class => "values_#{field}", :id => "values_#{field}_1" %> <%= calendar_for "values_#{field}_1" %></span>
|
Chris@909
|
132 <span class="span_values_<%= field %>"><%= text_field_tag "v[#{field}][]", query.value_for(field, 1), :size => 10, :class => "values_#{field}", :id => "values_#{field}_2" %> <%= calendar_for "values_#{field}_2" %></span>
|
Chris@909
|
133 <span class="span_values_<%= field %>"><%= text_field_tag "v[#{field}][]", query.value_for(field), :size => 3, :class => "values_#{field}" %> <%= l(:label_day_plural) %></span>
|
Chris@909
|
134 <% when :string, :text %>
|
Chris@909
|
135 <span class="span_values_<%= field %>"><%= text_field_tag "v[#{field}][]", query.value_for(field), :class => "values_#{field}", :id => "values_#{field}", :size => 30 %></span>
|
Chris@909
|
136 <% when :integer, :float %>
|
Chris@909
|
137 <span class="span_values_<%= field %>"><%= text_field_tag "v[#{field}][]", query.value_for(field), :class => "values_#{field}", :id => "values_#{field}_1", :size => 6 %></span>
|
Chris@909
|
138 <span class="span_values_<%= field %>"><%= text_field_tag "v[#{field}][]", query.value_for(field, 1), :class => "values_#{field}", :id => "values_#{field}_2", :size => 6 %></span>
|
Chris@909
|
139 <% end %>
|
Chris@909
|
140 </div>
|
Chris@909
|
141 <script type="text/javascript">toggle_filter('<%= field %>');</script>
|
Chris@909
|
142 </td>
|
Chris@909
|
143 </tr>
|
Chris@909
|
144 <% end %>
|
Chris@909
|
145 </table>
|
Chris@909
|
146 </td>
|
Chris@909
|
147 <td class="add-filter">
|
Chris@909
|
148 <%= label_tag('add_filter_select', l(:label_filter_add)) %>
|
Chris@909
|
149 <%= 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),
|
Chris@909
|
150 :onchange => "add_filter();",
|
Chris@909
|
151 :name => nil %>
|
Chris@909
|
152 </td>
|
Chris@909
|
153 </tr>
|
Chris@909
|
154 </table>
|
Chris@909
|
155 <%= hidden_field_tag 'f[]', '' %>
|