diff options
author | Tim Almdal <tnalmdal@shaw.ca> | 2009-04-17 20:17:53 +0000 |
---|---|---|
committer | Tim Almdal <tnalmdal@shaw.ca> | 2009-04-17 20:17:53 +0000 |
commit | 1a332009c7ac59984e627678ecc91dbaf267ae57 (patch) | |
tree | d845c581e6c5f48a0bc3b86f9c4702d090c65593 | |
parent | 16db33814585e87195429cdbc9000f57439822ca (diff) |
Change how mutiple requests for micro thumbnails is handler.
handle the edge cases where the draggable is dropped on the micro
thumbnail panel
-rw-r--r-- | modules/organize/controllers/organize.php | 5 | ||||
-rw-r--r-- | modules/organize/js/organize.js | 70 | ||||
-rw-r--r-- | modules/organize/views/organize_thumb_grid.html.php | 3 |
3 files changed, 46 insertions, 32 deletions
diff --git a/modules/organize/controllers/organize.php b/modules/organize/controllers/organize.php index 9a98d854..91b465c5 100644 --- a/modules/organize/controllers/organize.php +++ b/modules/organize/controllers/organize.php @@ -42,14 +42,15 @@ class Organize_Controller extends Controller { $height = $this->input->get("height"); $offset = $this->input->get("offset", 0); $thumbsize = self::$_MICRO_THUMB_SIZE + 2 * self::$_MICRO_THUMB_PADDING; - $page_size = ((int)($width / $thumbsize)) * ceil($height / $thumbsize); + $page_size = ceil($width / $thumbsize) * ceil($height / $thumbsize); $v = new View("organize_thumb_grid.html"); $v->children = $item->children($page_size, $offset); $v->thumbsize = self::$_MICRO_THUMB_SIZE; $v->padding = self::$_MICRO_THUMB_PADDING; - print $v; + print json_encode(array("count" => $v->children->count(), + "data" => $v->__toString())); } public function header($item_id) { diff --git a/modules/organize/js/organize.js b/modules/organize/js/organize.js index 045603a4..6a2cc0d6 100644 --- a/modules/organize/js/organize.js +++ b/modules/organize/js/organize.js @@ -4,6 +4,9 @@ var url; var height; +/** + * Dynamically initialize the organize dialog when it is displayed + */ function organize_dialog_init() { var size = viewport_size(); height = size.height() - 100; @@ -36,10 +39,6 @@ function organize_dialog_init() { retrieve_micro_thumbs(item_id); //showLoading("#gDialog"); - $("#gMicroThumbPanel").scroll(function() { - get_more_data(); - }); - $("#gMicroThumbSelectAll").click(function(event) { select_all(true); event.preventDefault(); @@ -90,10 +89,13 @@ function retrieve_micro_thumbs() { url = url.replace("__HEIGHT__", height); } var url_data = url.replace("__OFFSET__", offset); - url_data = url.replace("__ITEM_ID__", item_id); - $.get(url_data, function(data) { - $("#gMicroThumbGrid").append(data); - get_more_data(); + url_data = url_data.replace("__ITEM_ID__", item_id); + $.getJSON(url_data, function(json, textStatus) { + $("#gMicroThumbGrid").append(json.data); + if (json.count == 0) { + return; + } + retrieve_micro_thumbs(); $(".gMicroThumbContainer").click(function(event) { if ($(this).hasClass("gSelecting")) { $(this).removeClass("gSelecting"); @@ -106,7 +108,7 @@ function retrieve_micro_thumbs() { handle: ".gMicroThumbContainer.ui-selected", zindex: 2000, helper: function(event, ui) { - $("body").append("<div id=\"gDragHelper\"><ul></ul></div>"); + $("#gMicroThumbPanel").append("<div id=\"gDragHelper\"><ul></ul></div>"); var beginTop = event.pageY; var beginLeft = event.pageX; var zindex = $(".gMicroThumbContainer").draggable("option", "zindex"); @@ -143,10 +145,7 @@ function retrieve_micro_thumbs() { }); return $("#gDragHelper"); }, - stop: function(event, ui) { - $("#gDragHelper li").each(function(i) { - $("#gPlaceHolder").before($("#thumb_" + $(this).attr("ref")).show()); - }); + stop: function(event) { $(".gMicroThumbContainer.ui-selected").css("z-index", null); $("#gDragHelper").remove(); $("#gPlaceHolder").remove(); @@ -156,28 +155,45 @@ function retrieve_micro_thumbs() { tolerance: "pointer", over: function(event, ui) { $(this).after($("#gPlaceHolder")); - }, + } + }); + $("#gMicroThumbPanel").droppable( { + tolerance: "pointer", drop: function(event, ui) { + $("#gDragHelper").hide(); + var dropTarget; + if (event.pageX < $("#gMicroThumbGrid li:visible:first").offset().left || + event.pageY < $("#gMicroThumbGrid li:visible:first").offset().top) { + dropTarget = 1; + } else if (event.pageX > $("#gMicroThumbGrid li:visible:last").offset().left + 100 || + event.pageY > $("#gMicroThumbGrid li:visible:last").offset().top + 100) { + dropTarget = 2; + } else { + dropTarget = 0; + } $("#gDragHelper li").each(function(i) { - $("#gPlaceHolder").before($("#thumb_" + $(this).attr("ref")).show()); + switch (dropTarget) { + case 0: + $("#gPlaceHolder").before($("#thumb_" + $(this).attr("ref")).show()); + break; + case 1: + $("#gMicroThumbGrid").prepend($("#thumb_" + $(this).attr("ref")).show()); + break; + case 2: + $("#gMicroThumbGrid").append($("#thumb_" + $(this).attr("ref")).show()); + break; + } }); - $(".gMicroThumbContainer.ui-selected").css("z-index", null); - $("#gDragHelper").remove(); - $("#gPlaceHolder").remove(); } }); }); } -function get_more_data() { - var element = $("#gMicroThumbPanel").get(0); - var scrollHeight = element.scrollHeight; - var scrollTop = element.scrollTop; - var height = $("#gMicroThumbPanel").height(); - var scrollPosition = scrollHeight - (scrollTop + height); - if (scrollPosition > 0 && scrollPosition <= 100) { - retrieve_micro_thumbs(); - } +function isOver(selector, pageX, pageY) { + var top = $(selector).offset().top; + var left = $(selector).offset().left; + return this.left <= pageX && pageX <= this.left + 100 && + this.top <= pageY && pageY <= this.top + 100; } function organize_toggle_children(event) { diff --git a/modules/organize/views/organize_thumb_grid.html.php b/modules/organize/views/organize_thumb_grid.html.php index 34b8058f..64d8aaf3 100644 --- a/modules/organize/views/organize_thumb_grid.html.php +++ b/modules/organize/views/organize_thumb_grid.html.php @@ -1,7 +1,4 @@ <?php defined("SYSPATH") or die("No direct script access.") ?> -<script> - //$(".gMicroThumb").click(toggle_select); -</script> <? foreach ($children as $i => $child): ?> <? $item_class = "gPhoto"; ?> <? if ($child->is_album()): ?> |