]> git.ozlabs.org Git - patchwork/blobdiff - htdocs/js/bundle.js
Bundle reordering support
[patchwork] / htdocs / js / bundle.js
index dc4fb9c5958da97b3d1dbfcfba6dee694d624944..0bdf41aeade11c6ac9ab57b73ca68e8d892195c8 100644 (file)
@@ -1,41 +1,82 @@
-function parse_patch_id(id_str)
+
+var editing_order = false;
+var dragging = false;
+
+function order_button_click(node)
 {
-    var i;
+    var rows, form;
 
-    i = id_str.indexOf(':');
-    if (i == -1)
-        return null;
+    form = $("#reorderform");
+    rows = $("#patchlist").get(0).tBodies[0].rows;
 
-    return id_str.substring(i + 1);
-}
+    if (rows.length < 1)
+        return;
 
-function bundle_handle_drop(table, row)
-{
-    var relative, relation, current;
-    var relative_id, current_id;
+    if (editing_order) {
 
-    current = $(row);
-    relative = $(current).prev();
-    relation = 'after';
+        /* disable the save button */
+        node.disabled = true;
 
-    /* if we have no previous row, position ourselves before the next
-     * row instead */
-    if (!relative.length) {
-        relative = current.next();
-        relation = 'before';
+        /* add input elements as the sequence of patches */
+        for (var i = 0; i < rows.length; i++) {
+            form.append('<input type="hidden" name="neworder" value="' +
+                    row_to_patch_id(rows[i]) + '"/>');
+        }
 
-        if (!relative)
-            return;
+        form.get(0).submit();
+    } else {
+
+        /* store the first order value */
+        start_order = row_to_patch_id(rows[0]);
+        $("input[name='order_start']").attr("value", start_order);
+
+        /* update buttons */
+        node.setAttribute("value", "Save order");
+        $("#reorder\\-cancel").css("display", "inline");
+
+        /* show help text */
+        $("#reorderhelp").text('Drag & drop rows to reorder');
+
+        /* enable drag & drop on the patches list */
+        $("#patchlist").tableDnD({
+            onDragClass: 'dragging',
+            onDragStart: function() { dragging = true; },
+            onDrop: function() { dragging = false; }
+        });
+
+        /* replace zebra striping with hover */
+        $("#patchlist tbody tr").css("background", "inherit");
+        $("#patchlist tbody tr").hover(drag_hover_in, drag_hover_out);
     }
 
-    current_id = parse_patch_id(current.attr('id'));
-    relative_id = parse_patch_id(relative.attr('id'));
+    editing_order = !editing_order;
+}
 
-    alert("put patch " + current_id + " " + relation + " " + relative_id);
+function order_cancel_click(node)
+{
+    node.form.submit();
 }
 
-$(document).ready(function() {
-    $("#patchlist").tableDnD({
-        onDrop: bundle_handle_drop
-    });
-});
+/* dragging helper functions */
+function drag_hover_in()
+{
+    if (!dragging)
+        $(this).addClass("draghover");
+}
+function drag_hover_out()
+{
+    $(this).removeClass("draghover");
+}
+
+function row_to_patch_id(node)
+{
+    var id_str, i;
+
+    id_str = node.getAttribute("id");
+
+    i = id_str.indexOf(':');
+    if (i == -1)
+        return null;
+
+    return id_str.substring(i + 1);
+}