]> git.ozlabs.org Git - patchwork/blob - templates/patchwork/filters.html
ff4339ec5ec1d8edaf5ed7f12080c2c97f060fab
[patchwork] / templates / patchwork / filters.html
1
2 <script type="text/javascript" language="JavaScript">
3 var filterform_displayed = false;
4 function filter_click()
5 {
6     var form = document.getElementById('filterform');
7     if (!form) {
8         return;
9     }
10
11     if (filterform_displayed) {
12         form.style['display'] = 'none';
13         filterform_displayed = false;
14     } else {
15         form.style['display'] = 'block';
16         filterform_displayed = true;
17     }
18
19
20 }
21 function enable_selected_submitter(select, input)
22 {
23     select.name = 'submitter';
24     input.name = '';
25 }
26 function filter_form_submit(form)
27 {
28     var i;
29
30     var submitter_select = document.getElementById("submitter_select");
31     var submitter_input = document.getElementById("submitter_input");
32     if (!submitter_select || !submitter_input) {
33         req = null;
34         return;
35     }
36
37     /* submitter handling. if possible, use the select box, otherwise leave
38      * as-is (and so the text box is used). */
39
40     if (submitter_select.options.length == 0) {
41         /* if there's no match, just use the input */
42
43     } else if (submitter_select.options.length == 1) {
44         /* if there's only one match, request by id */
45         submitter_select.selectedIndex = 0;
46         enable_selected_submitter(submitter_select, submitter_input);
47
48     } else if (submitter_select.selectedIndex != -1) {
49         /* if the user has explicitly selected, request by id */
50         enable_selected_submitter(submitter_select, submitter_input);
51
52     }
53
54     for (i = 0; i < form.elements.length; i++) {
55         var e = form.elements[i];
56         if (e.type == 'submit') {
57             continue;
58         }
59
60         /* handle submitter data */
61         if (e.type == 'select-one') {
62             if (e.name == '') {
63                 e.disabled = true;
64             }
65             if (e.selectedIndex != -1
66                     && e.options[e.selectedIndex].value == '') {
67                 e.disabled = true;
68             }
69
70             continue;
71         }
72
73         if (e.value == '') {
74             e.disabled = true;
75         }
76     }
77 }
78
79 var req = null;
80
81 function submitter_complete_response()
82 {
83     if (req.readyState != 4) {
84         return
85     }
86
87     var completions;
88     eval("completions = " + req.responseText);
89
90     if (completions.length == 0) {
91         req = null;
92         return;
93     }
94
95     var submitter_select = document.getElementById("submitter_select");
96     var submitter_input = document.getElementById("submitter_input");
97     if (!submitter_select || !submitter_input) {
98         req = null;
99         return;
100     }
101
102     for (i = 0; i < completions.length; i++) {
103         name = completions[i]['fields']['name'];
104         if (name) {
105             name = completions[i]['fields']['name'] +
106                 ' <' + completions[i]['fields']['email'] + '>';
107         } else {
108             name = completions[i]['fields']['email'];
109         }
110         o = new Option(name, completions[i]['pk']);
111         submitter_select.options[i] = o;
112     }
113
114     /* remove remaining options */
115     for (; i < submitter_select.length; i++) {
116         submitter_select.options[i] = null;
117     }
118
119     submitter_select.disabled = false;
120     req = null;
121 }
122
123 function submitter_field_change(field)
124 {
125     var value = field.value;
126     if (value.length < 4) {
127         return;
128     }
129
130     if (req) {
131          return;
132     }
133
134     var url = '{% url patchwork.views.submitter_complete %}?q=' + value;
135     req = new XMLHttpRequest();
136     req.onreadystatechange = submitter_complete_response;
137     req.open("GET", url, true);
138     req.send('');
139 }
140 </script>
141
142 <div class="filters">
143  <div id="filtersummary">
144   <strong><a href="javascript:filter_click()">Filters</a>:</strong>
145  {% if filters.applied_filters %}
146   {% for filter in filters.applied_filters %}
147    {{ filter.name }} = {{ filter.condition }}
148     {% if not filter.forced %}
149      <a href="{{ filter.url_without_me }}"><img
150       src="/images/filter-remove.png"></a>
151     {% endif %}
152    {% if not forloop.last %}&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;{% endif %}
153   {% endfor %}
154  {% else %}
155   none
156   <a href="javascript:filter_click()"><img src="/images/filter-add.png"></a>
157  {% endif %}
158  </div>
159  <div id="filterform" style="padding-top: 1em; display: none">
160   <form action="" method="get" onSubmit="return filter_form_submit(this)">
161     <table>
162     {% for filter in filters.available_filters %}
163      <tr>
164       <td>{{ filter.name }}</td>
165       <td>{{ filter.form }}</td>
166      </tr>
167     {% endfor %}
168      <tr>
169       <td/>
170       <td><input type="submit" value="Apply"/></td>
171      </tr>
172     </table>
173   </form>
174  </div>
175 </div>
176
177