diff options
Diffstat (limited to 'modules/server_add/js')
-rw-r--r-- | modules/server_add/js/server_add.js | 114 |
1 files changed, 46 insertions, 68 deletions
diff --git a/modules/server_add/js/server_add.js b/modules/server_add/js/server_add.js index d05c6285..b5ad7336 100644 --- a/modules/server_add/js/server_add.js +++ b/modules/server_add/js/server_add.js @@ -3,7 +3,7 @@ $("#gServerAdd").ready(function() { do_add(this, event); }); $("#gProgressBar").progressbar(); - $("#gServerAdd ul").css("display", "block"); + $("#gServerAddTree ul").css("display", "block"); }); function open_close_branch(icon, event) { @@ -13,7 +13,7 @@ function open_close_branch(icon, event) { if (closed) { if (children.length == 0) { - load_children(icon, function(data, textStatus) { + load_children(parent, function(data, textStatus) { $(parent).append(data); $(icon).addClass("ui-icon-minus"); $(icon).removeClass("ui-icon-plus"); @@ -32,6 +32,13 @@ function open_close_branch(icon, event) { } } +function get_url(uri, task_id) { + var url = $("#gServerAdd form").attr("action"); + url = url.replace("__ARGS__", uri); + url = url.replace("__TASK_ID__", !task_id ? "" : "/" + task_id); + return url; +} + function checkbox_click(checkbox, event) { var parents = $(checkbox).parents("li"); var parent = parents.get(0); @@ -40,92 +47,63 @@ function checkbox_click(checkbox, event) { $("#gServerAdd form :submit").attr("disabled", checked.length == 0); } -function load_children(icon, callback) { - var csrf = $("#gServerAdd form :hidden[name='csrf']")[0].value; - var base_url = $("#gServerAdd form :hidden[name='base_url']")[0].value; - var parms = "&csrf=" + csrf; - var parents = $(icon).parents("li"); - for (var i=parents.length - 1; i >= 0; i--) { - parms += "&path[]=" + $(parents[i]).children("span").attr("ref"); - } +function load_children(parent, callback) { + var parms = "&path=" + $(parent).find(":checkbox").attr("value"); $.ajax({async: false, success: callback, data: parms, dataType: "html", type: "POST", - url: base_url.replace("__ARGS__", "server_add/children") + url: get_url("server_add/children") }); } -var current = 0; -var process_length = 0; function do_add(submit, event) { event.preventDefault(); $("#gProgressBar").progressbar("value", 0); $("#gProgressBar").css("visibility", "visible"); var check_list = $("#gServerAdd :checkbox[checked]"); - process_length = check_list.length; - current = 0; - var base_url = $("#gServerAdd form :hidden[name='base_url']")[0].value; - $.ajax({async: false, - dataType: "json", - type: "POST", - url: base_url.replace("__ARGS__", "server_add/start") - }); + + var parms = ""; $.each(check_list, function () { - process_checkbox(this); + var parent = $(this).parents("li")[0]; + // If its a file or a directory with no children + if ($(parent).hasClass("gFile") || + ($(parent).hasClass("gDirectory") && $(parent).find(".gCheckboxTree").length == 0)) { + parms += "&path[]=" + this.value; + } }); $.ajax({async: false, + data: parms, + dataType: "json", success: function(data, textStatus) { - document.location.reload(); + var task = data.task; + var url = data.url; + var done = false; + while (!done) { + $.ajax({async: false, + success: function(data, textStatus) { + $("#gProgressBar").progressbar("value", data.task.percent_complete); + done = data.task.done; + }, + dataType: "json", + type: "POST", + url: url + }); + } + $.ajax({async: false, + success: function(data, textStatus) { + document.location.reload(); + }, + dataType: "json", + type: "POST", + url: get_url("server_add/finish", task.id) + }); }, - dataType: "json", type: "POST", - url: base_url.replace("__ARGS__", "server_add/finish") + url: get_url("server_add/start") }); - return false; -} - -function process_checkbox(checkbox) { - var parents = $(checkbox).parents("li"); - var csrf = $("#gServerAdd form :hidden[name='csrf']")[0].value; - var parms = "&csrf=" + csrf; - for (var i=parents.length - 1; i > 0; i--) { - parms += "&path[]=" + $(parents[i]).children("span").attr("ref"); - } - parms += "&path[]=" + $(checkbox).val(); - - var parent = parents[0]; - if ($(parent).hasClass("gFile")) { - process_file(parents[0], parms); - } else if ($(parent).hasClass("gDirectory") && $(parents[0]).find(".gCheckboxTree").length == 0) { - // If it is a directory and retrieve the children and process them - var icon = $(parent).children("span")[0]; - load_children(icon, function(data, textStatus) { - $(parent).append(data); - $(icon).addClass("ui-icon-plus"); - checkbox_click(checkbox, null); - var boxes = $(parent).find(".gCheckboxTree :checkbox[checked]"); - process_length += boxes.length; - $.each(boxes, function () { - process_checkbox(this); - }); - }); - current++; - $("#gProgressBar").progressbar("value", current / process_length * 100); - } -} -function process_file(li_element, parms) { - $.ajax({async: false, - success: function(data, status) { - }, - data: parms, - dataType: "html", - type: "POST", - url: $("#gServerAdd form").attr("action") - }); - current++; - $("#gProgressBar").progressbar("value", current / process_length * 100); + return false; } |