]> git.ozlabs.org Git - patchwork/blobdiff - patchwork/templates/patchwork/filters.html
Move to a more recent django project structure
[patchwork] / patchwork / templates / patchwork / filters.html
diff --git a/patchwork/templates/patchwork/filters.html b/patchwork/templates/patchwork/filters.html
new file mode 100644 (file)
index 0000000..10ca587
--- /dev/null
@@ -0,0 +1,183 @@
+{% load static %}
+
+<script type="text/javascript" language="JavaScript">
+var filterform_displayed = false;
+function filter_click()
+{
+    var form = document.getElementById('filterform');
+    if (!form) {
+        return;
+    }
+
+    if (filterform_displayed) {
+        form.style['display'] = 'none';
+        filterform_displayed = false;
+    } else {
+        form.style['display'] = 'block';
+        filterform_displayed = true;
+    }
+
+
+}
+function enable_selected_submitter(select, input)
+{
+    select.name = 'submitter';
+    input.name = '';
+}
+function filter_form_submit(form)
+{
+    var i;
+
+    var submitter_select = document.getElementById("submitter_select");
+    var submitter_input = document.getElementById("submitter_input");
+    if (!submitter_select || !submitter_input) {
+        req = null;
+        return;
+    }
+
+    /* submitter handling. if possible, use the select box, otherwise leave
+     * as-is (and so the text box is used). */
+
+    if (submitter_select.options.length == 0) {
+        /* if there's no match, just use the input */
+
+    } else if (submitter_select.options.length == 1) {
+        /* if there's only one match, request by id */
+        submitter_select.selectedIndex = 0;
+        enable_selected_submitter(submitter_select, submitter_input);
+
+    } else if (submitter_select.selectedIndex != -1) {
+        /* if the user has explicitly selected, request by id */
+        enable_selected_submitter(submitter_select, submitter_input);
+
+    }
+
+    for (i = 0; i < form.elements.length; i++) {
+        var e = form.elements[i];
+        if (e.type == 'submit') {
+            continue;
+        }
+
+        /* handle submitter data */
+        if (e.type == 'select-one') {
+            if (e.name == '') {
+                e.disabled = true;
+            }
+            if (e.selectedIndex != -1
+                    && e.options[e.selectedIndex].value == '') {
+                e.disabled = true;
+            }
+
+            continue;
+        }
+
+        if (e.value == '') {
+            e.disabled = true;
+        }
+    }
+}
+
+var req = null;
+
+function submitter_complete_response()
+{
+    if (req.readyState != 4) {
+        return
+    }
+
+    var completions;
+    eval("completions = " + req.responseText);
+
+    if (completions.length == 0) {
+        req = null;
+        return;
+    }
+
+    var submitter_select = document.getElementById("submitter_select");
+    var submitter_input = document.getElementById("submitter_input");
+    if (!submitter_select || !submitter_input) {
+        req = null;
+        return;
+    }
+
+    for (i = 0; i < completions.length; i++) {
+        name = completions[i]['fields']['name'];
+        if (name) {
+            name = completions[i]['fields']['name'] +
+                ' <' + completions[i]['fields']['email'] + '>';
+        } else {
+            name = completions[i]['fields']['email'];
+        }
+        o = new Option(name, completions[i]['pk']);
+        submitter_select.options[i] = o;
+    }
+
+    /* remove remaining options */
+    for (; i < submitter_select.length; i++) {
+        submitter_select.options[i] = null;
+    }
+
+    submitter_select.disabled = false;
+    req = null;
+}
+
+function submitter_field_change(field)
+{
+    var limit = 20;
+    var value = field.value;
+    if (value.length < 4) {
+        return;
+    }
+
+    if (req) {
+         return;
+    }
+
+    var url = '{% url 'patchwork.views.submitter_complete' %}?q=' + value +
+                        '&l=' + limit;
+    req = new XMLHttpRequest();
+    req.onreadystatechange = submitter_complete_response;
+    req.open("GET", url, true);
+    req.send('');
+}
+</script>
+
+<div class="filters">
+ <div id="filtersummary">
+  <strong><a href="javascript:filter_click()">Filters</a>:</strong>
+ {% if filters.applied_filters %}
+  {% for filter in filters.applied_filters %}
+   {{ filter.name }} = {{ filter.condition }}
+    {% if not filter.forced %}
+     <a href="{{ filter.url_without_me }}"><img
+      width="16" height="16" alt="remove filter" title="remove filter"
+      src="{% static "images/16-circle-blue-remove.png" %}"></a>
+    {% endif %}
+   {% if not forloop.last %}&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;{% endif %}
+  {% endfor %}
+ {% else %}
+  none
+  <a href="javascript:filter_click()"><img
+  width="16" height="16" alt="add filter" title="add filter"
+  src="{% static "images/16-circle-blue-add.png" %}"></a>
+ {% endif %}
+ </div>
+ <div id="filterform" style="padding-top: 1em; display: none">
+  <form action="" method="get" onSubmit="return filter_form_submit(this)">
+    <table>
+    {% for filter in filters.available_filters %}
+     <tr>
+      <td>{{ filter.name }}</td>
+      <td>{{ filter.form }}</td>
+     </tr>
+    {% endfor %}
+     <tr>
+      <td/>
+      <td><input type="submit" value="Apply"/></td>
+     </tr>
+    </table>
+  </form>
+ </div>
+</div>
+
+