summaryrefslogtreecommitdiff
path: root/modules/server_add/js
diff options
context:
space:
mode:
authorBharat Mediratta <bharat@menalto.com>2009-07-07 21:16:36 -0700
committerBharat Mediratta <bharat@menalto.com>2009-07-07 21:20:24 -0700
commitfaabae5dae712ebff656abe8ebc493d8e031d4a3 (patch)
tree5e2762cf96611a485c50b83fbb7de3bf1197ef21 /modules/server_add/js
parent22b2e1044fd3b7be30caba9316f41bdbed8c8a8b (diff)
Rework server_add. It's smaller and leaner now, storing the list of
files out in a separate model for scalability. Removed the "pause" functionality. - Server_Add_Controller extends Admin_Controller so that we don't have to check for admin every time. - Task completion time now factors in the time it takes to walk the arbitrarily deep trees - Moved checkbox management entirely into JS using jQuery - Simplified the JS considerably
Diffstat (limited to 'modules/server_add/js')
-rw-r--r--modules/server_add/js/server_add.js222
1 files changed, 29 insertions, 193 deletions
diff --git a/modules/server_add/js/server_add.js b/modules/server_add/js/server_add.js
index 568ef91f..cba8c9ce 100644
--- a/modules/server_add/js/server_add.js
+++ b/modules/server_add/js/server_add.js
@@ -12,13 +12,13 @@ function open_close_branch(path, id) {
$.ajax({
url: GET_CHILDREN_URL.replace("__PATH__", path),
success: function(data, textStatus) {
- children.html(data);
- parent.removeClass("gLoadingSmall");
+ children.html(data);
+ parent.removeClass("gLoadingSmall");
- // Propagate checkbox value
- children.find("input[type=checkbox]").attr(
- "checked", parent.find("input[type=checkbox]:first").attr("checked"));
- },
+ // Propagate checkbox value
+ children.find("input[type=checkbox]").attr(
+ "checked", parent.find("input[type=checkbox]:first").attr("checked"));
+ }
});
}
@@ -54,202 +54,38 @@ function click_node(checkbox) {
}
}
-/* ================================================================================ */
-
-/*
-var paused = false;
-var task = null;
-
-$("#gServerAdd").ready(function() {
- init_server_add_form();
-});
-
-function init_server_add_form() {
- $("#gServerAdd #gServerAddButton").click(function(event) {
- do_add(this, event);
- });
- $("#gServerAdd #gServerPauseButton").click(function(event) {
- event.preventDefault();
- paused = true;
- });
- $(".gProgressBar").progressbar();
- $("#gServerAddTree ul").css("display", "block");
- $("#gServerAdd form").bind("form_closing", function(target) {
- if (task != null && !task.done) {
- $.ajax({async: false,
- success: function(data, textStatus) {
- document.location.reload();
- },
- dataType: "json",
- type: "POST",
- url: get_url("server_add/pause", task.id)
- });
- } else {
- document.location.reload();
- }
- });
- set_click_events();
-}
-
-function set_click_events() {
- $(".ui-icon").unbind("click");
- $(":checkbox").unbind("click");
- $(".ui-icon").click(function(event) {
- open_close_branch(this, event);
- });
-
- $("input[type=checkbox]").click(function(event) {
- checkbox_click(this);
+function start_add() {
+ var paths = [];
+ $.each($("#gServerAdd :checkbox[checked]"), function () {
+ paths.push(this.value);
});
-}
-
-function open_close_branch(icon, event) {
- var parent = icon.parentNode;
- var closed = $(icon).hasClass("ui-icon-plus");
- var children = $(parent).find(".gCheckboxTree");
-
- if (closed) {
- if (children.length == 0) {
- load_children(icon);
- } else {
- toggle_branch("open", icon);
- }
- } else {
- toggle_branch("close", icon);
- }
-}
-
-function toggle_branch(direction, icon) {
- var parent = icon.parentNode;
- var branch = $(parent).children(".gServerAddChildren");
- $(branch).slideToggle("fast", function() {
- if (direction == "open") {
- $(icon).addClass("ui-icon-minus");
- $(icon).removeClass("ui-icon-plus");
- $(parent).removeClass("gCollapsed");
- } else {
- $(icon).addClass("ui-icon-plus");
- $(icon).removeClass("ui-icon-minus");
+ $.ajax({
+ url: START_URL,
+ type: "POST",
+ async: false,
+ data: { "paths[]": paths },
+ dataType: "json",
+ success: function(data, textStatus) {
+ $("#gServerAdd .gProgressBar").progressbar("value", data.percent_complete);
+ setTimeout(function() { run_add(data.url); }, 0);
}
});
+ return false;
}
-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 load_children(icon) {
- $("#gDialog").addClass("gDialogLoadingLarge");
- var parent = icon.parentNode;
- var checkbox = $(parent).find("input[type=checkbox]");
- var parms = "&path=" + $(checkbox).attr("value");
- parms += "&checked=" + $(checkbox).is(":checked");
- parms += "&collapsed=" + $(parent).hasClass("gCollapsed");
-
- $.ajax({success: function(data, textStatus) {
- $(parent).children(".gServerAddChildren").html(data);
- set_click_events();
- $("#gDialog").removeClass("gDialogLoadingLarge");
- toggle_branch("open", icon);
- },
- data: parms,
- dataType: "html",
- type: "POST",
- url: get_url("server_add/children")
- });
-}
-
-function do_add(submit, event) {
- event.preventDefault();
-
- $("#gServerAdd #gServerAddButton").hide();
- $("#gServerAdd #gServerPauseButton").show();
-
- var parms = "";
- if (!paused) {
- $(".gProgressBar").progressbar("value", 0);
- $(".gProgressBar").css("visibility", "visible");
- var check_list = $("#gServerAdd :checkbox[checked]");
-
- var paths = "";
- var collapsed = "";
- $.each(check_list, function () {
- var parent = $(this).parents("li")[0];
- paths += "&path[]=" + this.value;
- collapsed += "&collapsed[]=" + $(parent).hasClass("gCollapsed");
- });
- parms = paths + collapsed;
- }
- paused = false;
-
- $.ajax({async: false,
- data: parms,
+function run_add(url) {
+ $.ajax({
+ url: url,
+ async: false,
dataType: "json",
success: function(data, textStatus) {
- var done = data.task.done;
- if (done) {
- task = null;
- $("body").append("<div id='gNoFilesDialog'>" + data.task.status + "</div>");
-
- $("#gNoFilesDialog").dialog({modal: true,
- autoOpen: true,
- title: FILE_IMPORT_WARNING});
- $(".gProgressBar").css("visibility", "hidden");
- $("#gServerAdd #gServerAddButton").show();
- $("#gServerAdd #gServerPauseButton").hide();
- return;
- }
- task = data.task;
- var url = data.url;
- while (!done && !paused) {
- $.ajax({async: false,
- success: function(data, textStatus) {
- $(".gProgressBar").progressbar("value", data.task.percent_complete);
- done = data.task.done;
- },
- error: function(XMLHttpRequest, textStatus, errorThrown) {
- paused = true;
- display_upload_error(XMLHttpRequest.responseText);
- },
- dataType: "json",
- type: "POST",
- url: url
- });
- }
- if (!paused) {
- $.ajax({async: false,
- success: function(data, textStatus) {
- document.location.reload();
- },
- dataType: "json",
- type: "POST",
- url: get_url("server_add/finish", task.id)
- });
+ $("#gServerAdd .gProgressBar").progressbar("value", data.percent_complete);
+ if (data.done) {
+ $("#gServerAdd .gProgressBar").slideUp();
} else {
- $("#gServerAdd #gServerAddButton").show();
- $("#gServerAdd #gServerPauseButton").hide();
+ setTimeout(function() { run_add(url); }, 0);
}
- },
- type: "POST",
- url: get_url("server_add/start")
+ }
});
-
- return false;
-}
-
-function display_upload_error(error) {
- $("body").append("<div id=\"gServerAddError\" title=\"" + FATAL_ERROR + "\">" + error + "</div>");
- $("#gServerAddError").dialog({
- autoOpen: true,
- autoResize: false,
- modal: true,
- resizable: true,
- width: 610,
- height: $("#gDialog").height()
- });
}
-*/