local changes from server
[redakcja.git] / redakcja / static / js / catalogue / book_list.js
index 1ff5f06..9d2511d 100644 (file)
@@ -1,56 +1,96 @@
 (function($) {
     $(function() {
-       // clicking on book checks chunks, too
-       $("input[name=select_book]").change(function(ev) {
-           $book = $(this);
-           $book.closest("table").find("input[name=select_chunk][data-book-id=" + $book.val() + "]").attr("checked", $book.is(':checked'));
-           });
-
-       // initialize context menu
-
-       var get_ids = function() {
-           return $.map($("input[name=select_chunk]:checked"), function(ele, idx) {
-               return ele.value;
-               }).join();
-       };
-
-       var set_stage = function(key, opt) {
-           var stage = $("select[name=stage] option[value!=]").eq(key).val();
-           $.post($('input[name=chunk_mass_edit_url]').val(),
-                  {
-                      ids: get_ids(),
-                      stage: stage,
-                  },
-                  function(data, status) {
-                      location.reload(true);
-                  }
-                 );
-       };
-
-       $.contextMenu({
-           selector: '#file-list',
-           items: {
-               "stage": { 
-                   name: "Set stage",
-                   items: $.map($("select[name=stage] option[value!=]"),
-                                function(ele, idx) {
-                                    return { 
-                                        name: $(ele).text(),
-                                        callback: set_stage,
-                                    };
-                                }),
-               },
-/*             "user": { 
-                   name: "Set user",
-
-                         },
-               "status": { 
-                   name: "Set status",
-                   items: 
-                         },*/
-
-           },
-       });
-       
+
+    // clicking on book checks chunks, too
+    $("input[name=select_book]").change(function(ev) {
+        $book = $(this);
+        $book.closest("table").find("input[name=select_chunk][data-book-id=" + $book.val() + "]").attr("checked", $book.is(':checked'));
+    });
+
+    // initialize context menu
+
+   var get_ids = function() {
+       return $.map($("input[name=select_chunk]:checked"), function(ele, idx) {
+           return ele.value;
+           }).concat(
+               $.map($("input[name=select_book][data-chunk-id!=]:checked"), function(ele, idx) {
+                   return $(ele).attr("data-chunk-id");
+                   })).join();
+   };
+
+    var get_callback = function(form_field_name) {
+        var $form = $("#chunk_mass_edit");
+        var $field = $("[name=" + form_field_name + "]", $form);
+        var $ids_field = $("[name=ids]").val(get_ids());
+        var usable_callback = function(value) {
+            $field.val(value);
+            $ids_field.val(get_ids());
+            $.post($form.attr("action"),
+               $form.serialize(),
+               function(data, status) {
+                   location.reload(true);
+               }
+            );
+            return true;
+        };
+        return usable_callback;
+    };
+
+    var get_items = function(field, callback) {
+        var d = {};
+        $.each($("select[name="+field+"] option[value!=]"),
+            function(idx, ele) {
+                d[field + "_" + idx] = {
+                    name: $(ele).text(), 
+                    callback: function() {callback($(ele).attr('value'));}
+                };
+            });
+        return d;
+    };
+
+    var user_callback = get_callback('user');
+    var users = [
+        get_items("user", user_callback),
+        {sep: '----'},
+        get_items("other-user", user_callback)
+    ];
+    var current_user_items = user_items = {};
+    var i = 0;
+    var more_label = $("label[for=mass_edit_more_users]").text();
+    for (user_table in users) {
+        for (user in users[user_table]) {
+            if (i && i % 20 == 0) {
+                var more_items = {};
+                current_user_items['more'] = {
+                    name: more_label,
+                    items: more_items
+                };
+                current_user_items = more_items;
+            }
+            current_user_items[user] = users[user_table][user];
+            i += 1;
+        }
+    }
+    $.contextMenu({
+        selector: '#file-list',
+        items: {
+            stage: { 
+                name: $("label[for=mass_edit_stage]").text(),
+                items: get_items("stage", get_callback('stage')),
+                icon: "clock",
+            },
+            user: { 
+                name: $("label[for=mass_edit_user]").text(),
+                items: user_items,
+                icon: "user",
+            },
+            project: {
+                name: $("label[for=mass_edit_project]").text(),
+                items: get_items("project", get_callback('project')),
+            },
+        },
+    });
+
+
     });
 })(jQuery);