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