summaryrefslogtreecommitdiff
path: root/modules/server_add/js
diff options
context:
space:
mode:
authorTim Almdal <tnalmdal@shaw.ca>2009-06-04 23:23:11 +0800
committerBharat Mediratta <bharat@menalto.com>2009-06-05 03:13:14 +0800
commite1ce3196f48c53580d7aa29ca0dba376e223b88f (patch)
tree31ffac99ea04c116e6f2f5caee0206e9d366935e /modules/server_add/js
parent13b12f410e92d09d3071b0d55dc55de65996d975 (diff)
Rewrite the server_add to have the server format the selection when a branch is opened. Sub trees re only retrieved when the branch is opened. Changed the
start task processing to fill in any subtrees that are selected, but were never expanded on the client. Added the loading icon. Signed-off-by: Bharat Mediratta <bharat@menalto.com>
Diffstat (limited to 'modules/server_add/js')
-rw-r--r--modules/server_add/js/server_add.js90
1 files changed, 61 insertions, 29 deletions
diff --git a/modules/server_add/js/server_add.js b/modules/server_add/js/server_add.js
index b98b7a86..e2526dbe 100644
--- a/modules/server_add/js/server_add.js
+++ b/modules/server_add/js/server_add.js
@@ -25,34 +25,56 @@ function init_server_add_form() {
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 open_close_branch(icon, event) {
var parent = icon.parentNode;
- var children = $(parent).find(".gCheckboxTree");
var closed = $(icon).hasClass("ui-icon-plus");
+ var children = $(parent).find(".gCheckboxTree");
if (closed) {
if (children.length == 0) {
- load_children(parent, function(data, textStatus) {
- $(parent).append(data);
- $(icon).addClass("ui-icon-minus");
- $(icon).removeClass("ui-icon-plus");
- });
+ load_children(icon);
} else {
- $(icon).addClass("ui-icon-minus");
- $(icon).removeClass("ui-icon-plus");
+ toggle_branch("open", icon);
}
- $(parent).children("ul").slideDown("fast");
} else {
- $(icon).addClass("ui-icon-plus");
- $(icon).removeClass("ui-icon-minus");
- $(parent).children("ul").slideUp("fast");
+ 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");
+ }
+ });
+}
+
function get_url(uri, task_id) {
var url = $("#gServerAdd form").attr("action");
url = url.replace("__ARGS__", uri);
@@ -60,24 +82,30 @@ function get_url(uri, task_id) {
return url;
}
-function checkbox_click(checkbox, event) {
- var _this = this;
- var parents = $(checkbox).parents("li");
- var parent = parents.get(0);
- if ($(parent).hasClass("gDirectory") && $(parent).find(".gCheckboxTree").length == 0) {
- load_children(parent, function(data, textStatus) {
- $(parent).append(data);
- });
+function checkbox_click(checkbox) {
+ var parent = $(checkbox).parents("li").get(0);
+ var checked = $(checkbox).attr("checked");
+ if (!$(parent).hasClass("gCollapsed")) {
+ $(parent).find(".gCheckboxTree input[type=checkbox]").attr("checked", checked);
}
- $(parent).find(".gCheckboxTree :checkbox").click();
- var checked = $("#gServerAdd :checkbox[checked]");
- $("#gServerAdd form :submit").attr("disabled", checked.length == 0);
+ var checkboxes = $("#gServerAdd :checkbox[checked]");
+ $("#gServerAdd form :submit").attr("disabled", checkboxes.length == 0);
}
-function load_children(parent, callback) {
- var parms = "&path=" + $(parent).find(":checkbox").attr("value");
- $.ajax({async: false,
- success: callback,
+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",
@@ -91,16 +119,20 @@ function do_add(submit, event) {
$("#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 parms = "";
+ var paths = "";
+ var collapsed = "";
$.each(check_list, function () {
var parent = $(this).parents("li")[0];
- parms += "&path[]=" + this.value;
+ paths += "&path[]=" + this.value;
+ collapsed += "&collapsed[]=" + $(parent).hasClass("gCollapsed");
});
+ parms = paths + collapsed;
}
paused = false;