/app/views/queries/_filters.rhtml
https://github.com/orospakr/chiliproject-ircan · Ruby HTML · 121 lines · 114 code · 7 blank · 0 comment · 14 complexity · 0b1b0df26fff43dc3f4fcd33ce928f66 MD5 · raw file
- <script type="text/javascript">
- //<![CDATA[
- function add_filter() {
- select = $('add_filter_select');
- field = select.value
- Element.show('tr_' + field);
- check_box = $('cb_' + field);
- check_box.checked = true;
- toggle_filter(field);
- select.selectedIndex = 0;
- for (i=0; i<select.options.length; i++) {
- if (select.options[i].value == field) {
- select.options[i].disabled = true;
- }
- }
- }
- function toggle_filter(field) {
- check_box = $('cb_' + field);
- if (check_box.checked) {
- Element.show("operators_" + field);
- Form.Element.enable("operators_" + field);
- Form.Element.enable("values_" + field);
- toggle_operator(field);
- } else {
- Element.hide("operators_" + field);
- Element.hide("div_values_" + field);
- Form.Element.disable("operators_" + field);
- Form.Element.disable("values_" + field);
- }
- }
- function toggle_operator(field) {
- operator = $("operators_" + field);
- switch (operator.value) {
- case "!*":
- case "*":
- case "t":
- case "w":
- case "o":
- case "c":
- Element.hide("div_values_" + field);
- break;
- default:
- Element.show("div_values_" + field);
- break;
- }
- }
- function toggle_multi_select(field) {
- select = $('values_' + field);
- if (select.multiple == true) {
- select.multiple = false;
- } else {
- select.multiple = true;
- }
- }
- function apply_filters_observer() {
- $$("#query_form input[type=text]").invoke("observe", "keypress", function(e){
- if(e.keyCode == Event.KEY_RETURN) {
- <%= remote_function(:url => { :set_filter => 1},
- :update => "content",
- :with => "Form.serialize('query_form')",
- :complete => "e.stop(); apply_filters_observer()") %>
- }
- });
- }
- Event.observe(document,"dom:loaded", apply_filters_observer);
- //]]>
- </script>
- <table width="100%">
- <tr>
- <td>
- <table>
- <% query.available_filters.sort{|a,b| a[1][:order]<=>b[1][:order]}.each do |filter| %>
- <% field = filter[0]
- options = filter[1] %>
- <tr <%= 'style="display:none;"' unless query.has_filter?(field) %> id="tr_<%= field %>" class="filter">
- <td style="width:200px;">
- <%= check_box_tag 'f[]', field, query.has_filter?(field), :onclick => "toggle_filter('#{field}');", :id => "cb_#{field}" %>
- <label for="cb_<%= field %>"><%= filter[1][:name] || l(("field_"+field.to_s.gsub(/\_id$/, "")).to_sym) %></label>
- </td>
- <td style="width:150px;">
- <%= select_tag "op[#{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;" %>
- </td>
- <td>
- <div id="div_values_<%= field %>" style="display:none;">
- <% case options[:type]
- when :list, :list_optional, :list_status, :list_subprojects %>
- <select <%= "multiple=true" if query.values_for(field) and query.values_for(field).length > 1 %> name="v[<%= field %>][]" id="values_<%= field %>" class="select-small" style="vertical-align: top;">
- <%= options_for_select options[:values], query.values_for(field) %>
- </select>
- <%= link_to_function image_tag('bullet_toggle_plus.png'), "toggle_multi_select('#{field}');", :style => "vertical-align: bottom;" %>
- <% when :date, :date_past %>
- <%= text_field_tag "v[#{field}][]", query.values_for(field), :id => "values_#{field}", :size => 3, :class => "select-small" %> <%= l(:label_day_plural) %>
- <% when :string, :text %>
- <%= text_field_tag "v[#{field}][]", query.values_for(field), :id => "values_#{field}", :size => 30, :class => "select-small" %>
- <% when :integer %>
- <%= text_field_tag "v[#{field}][]", query.values_for(field), :id => "values_#{field}", :size => 3, :class => "select-small" %>
- <% end %>
- </div>
- <script type="text/javascript">toggle_filter('<%= field %>');</script>
- </td>
- </tr>
- <% end %>
- </table>
- </td>
- <td class="add-filter">
- <%= label_tag('add_filter_select', l(:label_filter_add)) %>:
- <%= 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),
- :onchange => "add_filter();",
- :class => "select-small",
- :name => nil %>
- </td>
- </tr>
- </table>
- <%= hidden_field_tag 'f[]', '' %>