summaryrefslogtreecommitdiff
path: root/modules/organize/js/organize.js
diff options
context:
space:
mode:
authorTim Almdal <tnalmdal@shaw.ca>2009-04-22 16:09:57 +0000
committerTim Almdal <tnalmdal@shaw.ca>2009-04-22 16:09:57 +0000
commit475b8fe9ff3f4eee077fd649a1e5aea2568c06b4 (patch)
treea892d62e17c451db626d031e43753be71b364764 /modules/organize/js/organize.js
parentf9ec5d6de466b6a7c9eb4766ca228aff754284f5 (diff)
Dragging from the thumbgrid to an album in the tree now works.
Refactored the javascript to minimize duplication.
Diffstat (limited to 'modules/organize/js/organize.js')
-rw-r--r--modules/organize/js/organize.js102
1 files changed, 93 insertions, 9 deletions
diff --git a/modules/organize/js/organize.js b/modules/organize/js/organize.js
index 00db46d3..75d5ccd2 100644
--- a/modules/organize/js/organize.js
+++ b/modules/organize/js/organize.js
@@ -1,11 +1,14 @@
/*
* @todo Trap resize of dialog and resize the child areas (tree, grid and edit form)
- * @todo create the dialog close method and reload the page on exit.
+ * @todo Create a cancel button that leaves the task in pending but clears the task info
+ * and resets the paused.
+ * @todo Create a message area in the footer for all the organize messages
*/
var url;
var height;
var paused = false;
var task = null;
+var transitItems = [];
// **************************************************************************
// JQuery UI Widgets
@@ -64,9 +67,15 @@ var draggable = {
}
};
-// Droppable
-var droppable = {
+// Thumbnail Grid Droppable
+var thumbDroppable = {
tolerance: "pointer",
+ over: function(event, ui) {
+ $("#gPlaceHolder").show();
+ },
+ out: function(event, ui) {
+ $("#gPlaceHolder").hide();
+ },
drop: function(event, ui) {
$("#gDragHelper").hide();
$("#gPlaceHolder").hide();
@@ -90,7 +99,40 @@ var droppable = {
dataType: "json",
success: startRearrangeCallback,
type: "POST",
- url: get_url("organize/rearrangeStart")
+ url: get_url("organize/rearrangeStart", {item_id: item_id})
+ });
+ }
+};
+
+// Album Tree Droppable
+var treeDroppable = {
+ tolerance: "pointer",
+ greedy: true,
+ hoverClass: "gBranchDroppable",
+ drop: function(event, ui) {
+ $("#gDragHelper").hide();
+ var moveItems = "";
+ var targetItemId = $(this).attr("ref");
+ if ($(this).hasClass("gBranchSelected")) {
+ // @todo Error message for moving onto self
+ return false;
+ }
+ var okToMove = true;
+ $("#gDragHelper li").each(function(i) {
+ moveItems += "&item[]=" + $(this).attr("ref");
+ okToMove &= targetItemId != $(this).attr("ref");
+ $("#thumb_" + $(this).attr("ref")).remove();
+ });
+ if (!okToMove) {
+ // @todo Error message for moving onto self
+ return false;
+ }
+ $.ajax({
+ data: moveItems,
+ dataType: "json",
+ success: startMoveCallback,
+ type: "POST",
+ url: get_url("organize/moveStart", {item_id: targetItemId})
});
}
};
@@ -175,6 +217,45 @@ var getMicroThumbsCallback = function(json, textStatus) {
}
};
+// @todo see if we can combine the next two callbacks into an object
+// as they are basically the same.
+var startMoveCallback = function (data, textStatus) {
+ if (!paused) {
+ $("#gDialog #ft").css("visibility", "visible");
+ $(".gProgressBar").progressbar("value", 0);
+ task = data.task;
+ }
+ $(".gMicroThumbContainer").draggable("disable");
+ var done = false;
+ paused = false;
+ 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;
+ displayAjaxError(XMLHttpRequest.responseText);
+ },
+ dataType: "json",
+ type: "POST",
+ url: get_url("organize/runTask", {task_id: task.id})
+ });
+ }
+ if (!paused) {
+ $("#gDialog #ft").css("visibility", "hidden");
+ $.ajax({async: false,
+ success: function(data, textStatus) {
+ },
+ dataType: "json",
+ type: "POST",
+ url: get_url("organize/finishTask", {task_id: task.id})
+ });
+ }
+ $(".gMicroThumbContainer").draggable("enable");
+};
+
var startRearrangeCallback = function (data, textStatus) {
if (!paused) {
$("#gDialog #ft").css("visibility", "visible");
@@ -196,7 +277,7 @@ var startRearrangeCallback = function (data, textStatus) {
},
dataType: "json",
type: "POST",
- url: get_url("organize/rearrangeRun", task.id)
+ url: get_url("organize/runTask", {task_id: task.id})
});
}
if (!paused) {
@@ -206,7 +287,7 @@ var startRearrangeCallback = function (data, textStatus) {
},
dataType: "json",
type: "POST",
- url: get_url("organize/rearrangeFinish", task.id)
+ url: get_url("organize/finishTask", {task_id: task.id})
});
}
$(".gMicroThumbContainer").draggable("enable");
@@ -249,6 +330,7 @@ function organize_dialog_init() {
$("#gOrganizeTreeContainer").height(height);
$(".gOrganizeBranch .ui-icon").click(organizeToggleChildren);
+ $(".gBranchText").droppable(treeDroppable);
$(".gBranchText").click(organizeOpenFolder);
retrieveMicroThumbs(item_id);
//showLoading("#gDialog");
@@ -256,7 +338,7 @@ function organize_dialog_init() {
$("#gMicroThumbSelectAll").click(toggleSelectAll);
$("#gMicroThumbUnselectAll").click(toggleSelectAll);
- $("#gMicroThumbPanel").droppable(droppable);
+ $("#gMicroThumbPanel").droppable(thumbDroppable);
$("#gMicroThumbGrid").selectable(selectable);
$(".gProgressBar").progressbar();
@@ -312,10 +394,12 @@ function organizeOpenFolder(event) {
event.preventDefault();
}
-function get_url(uri, task_id) {
+function get_url(uri, parms) {
var url = rearrangeUrl;
url = url.replace("__URI__", uri);
- url = url.replace("__TASK_ID__", !task_id ? "" : "/" + task_id);
+ url = url.replace("__ITEM_ID__", !parms.item_id ? "" : parms.item_id);
+ url += (parms.item_id && parms.task_id) ? "/" : "";
+ url = url.replace("__TASK_ID__", !parms.task_id ? "" : parms.task_id);
return url;
}