summaryrefslogtreecommitdiff
path: root/modules/server_add/js
diff options
context:
space:
mode:
authorBharat Mediratta <bharat@menalto.com>2009-07-09 09:58:59 -0700
committerBharat Mediratta <bharat@menalto.com>2009-07-09 09:58:59 -0700
commita6ac9b3059749ba8cfeea8ef1712c9b9859b8b9e (patch)
tree70d5a48fc8bfcf0a7db0ceb94d284d6df38c92f0 /modules/server_add/js
parente7e2d99255259a708999727ae3a56777898a3426 (diff)
parent74d4a4c0fd0d1aa2e93e62397b0b0a10d55b986d (diff)
Merge branch 'master' of git@github.com:bharat/gallery3
Diffstat (limited to 'modules/server_add/js')
-rw-r--r--modules/server_add/js/server_add.js252
1 files changed, 69 insertions, 183 deletions
diff --git a/modules/server_add/js/server_add.js b/modules/server_add/js/server_add.js
index e2526dbe..cba8c9ce 100644
--- a/modules/server_add/js/server_add.js
+++ b/modules/server_add/js/server_add.js
@@ -1,205 +1,91 @@
-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 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);
+/**
+ * We've clicked the + icon next to a directory. Load up children of this
+ * directory from the server and display them.
+ */
+function open_close_branch(path, id) {
+ var parent = $("#file_" + id);
+ var children = $("#tree_" + id);
+ var icon = parent.find(".ui-icon:first");
+
+ if (!children.html()) {
+ parent.addClass("gLoadingSmall");
+ $.ajax({
+ url: GET_CHILDREN_URL.replace("__PATH__", path),
+ success: function(data, textStatus) {
+ children.html(data);
+ parent.removeClass("gLoadingSmall");
+
+ // Propagate checkbox value
+ children.find("input[type=checkbox]").attr(
+ "checked", parent.find("input[type=checkbox]:first").attr("checked"));
+ }
+ });
}
-}
-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");
+ children.slideToggle("fast", function() {
+ if (children.is(":hidden")) {
+ icon.addClass("ui-icon-plus");
+ icon.removeClass("ui-icon-minus");
} else {
- $(icon).addClass("ui-icon-plus");
- $(icon).removeClass("ui-icon-minus");
+ icon.addClass("ui-icon-minus");
+ icon.removeClass("ui-icon-plus");
+ parent.removeClass("gCollapsed");
}
});
}
-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) {
+/**
+ * We've clicked a checkbox. Propagate the value downwards as necessary.
+ */
+function click_node(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("input[type=checkbox]").attr("checked", checked);
+
+ // @todo if we uncheck all the children for a parent, we should uncheck the
+ // parent itself, otherwise in the code we'll add the entire parent since if
+ // we find an album as a leaf, we assume that it's never been expanded in the UI.
+ if ($("#gServerAddTree").find("input[type=checkbox]").is(":checked")) {
+ $("#gServerAddAddButton").enable(true);
+ $("#gServerAddAddButton").removeClass("ui-state-disabled");
+ } else {
+ $("#gServerAddAddButton").enable(false);
+ $("#gServerAddAddButton").addClass("ui-state-disabled");
}
- var checkboxes = $("#gServerAdd :checkbox[checked]");
- $("#gServerAdd form :submit").attr("disabled", checkboxes.length == 0);
}
-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 start_add() {
+ var paths = [];
+ $.each($("#gServerAdd :checkbox[checked]"), function () {
+ paths.push(this.value);
+ });
+ $.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 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()
- });
}