diff options
author | Tim Almdal <tnalmdal@shaw.ca> | 2009-04-17 02:06:00 +0000 |
---|---|---|
committer | Tim Almdal <tnalmdal@shaw.ca> | 2009-04-17 02:06:00 +0000 |
commit | d8e91338734185d1bf67f0c84f429d33effce142 (patch) | |
tree | 39f8c47370efe12eeecd74a778c4826d053dd5a9 | |
parent | 6fae077b52cc44dee15b2befd1862ea65da50730 (diff) |
Another iteration in the quest for the perfect organize module. At
this point you can select microthumbs, by clicking on them, ctrl-click
will add to the selection. You can select by drawing a lasso around
images. Holding the ctrl will add the lassoed thumbs to the selection.
Once slected, thumbs can be dragged and dropped within the current
At this point no background processing takes place
-rw-r--r-- | modules/organize/css/organize.css | 138 | ||||
-rw-r--r-- | modules/organize/js/organize.js | 238 | ||||
-rw-r--r-- | modules/organize/js/organize_init.js | 3 | ||||
-rw-r--r-- | modules/organize/views/organize.html.php | 2 | ||||
-rw-r--r-- | modules/organize/views/organize_thumb_grid.html.php | 11 |
5 files changed, 230 insertions, 162 deletions
diff --git a/modules/organize/css/organize.css b/modules/organize/css/organize.css index c6c052bc..a1dc062a 100644 --- a/modules/organize/css/organize.css +++ b/modules/organize/css/organize.css @@ -1,85 +1,115 @@ /* @todo move to theme css */ -#gOrganizeTreeContainer, -#gMicroThumbContainer { +/******************************************************************* + * Album Tree styling + */ +#gOrganizeTreeContainer { overflow-y: auto; margin: 0 !important; padding: 0 !important; } -#gMicroThumbContainer { +#gOrganizeAlbumDescription { + height: 2em; + overflow-y: auto; +} + +.gBranchSelected { + background-color: #cfdeff !important; + border-bottom: 1px solid #999 !important; + display: block; + padding: .3em 0; +} + +.gBranchText { + cursor: pointer; +} + +.gBranchCollapsed { + display: none; +} + +.gBranchEmpty { + visibility: hidden; +} + +#gOrganizeTreeContainer ul ul li { + padding-left: 1.2em; +} + +/******************************************************************* + * Album Panel Styles + */ +#gMicroThumbPanel { + margin: 0 !important; + padding: 0 !important; background-color: #cfdeff; border: 1px solid #999 !important; border-top: none !important; border-left: none !important; margin-left: -1em !important; + overflow: auto; } -#gMicroThumbGrid li div div { - float: left; -} - -#gMicroThumbContainer #gMicroThumbGrid { - margin: 0; +#gMicroThumbGrid { + padding: .5em; } -#gMicroThumbContainer #gMicroThumbGrid .gMicroThumb { - background-color: #fff; - border: 2px solid #e8e8e8; - border-right-color: #ccc; - border-bottom-color: #ccc; +.gMicroThumbContainer { + display: block; + //border: 2px solid #e8e8e8; + //border-right-color: #ccc; + //border-bottom-color: #ccc; float: left; font-size: .7em; height: 9em; - margin-left: .5em; - margin-top: .5em; + margin-bottom: 1em; opacity: .4; - overflow: hidden; - padding: .5em; - text-align: center; - width: 9em; + padding: 0 .5em; } -#gOrganizeAlbumDescription { - height: 2em; - overflow-y: auto; +.gMicroThumb { + height: 9em; + width: 9em; + background-color: #fff; + display: block; + float: left; + text-align: center; } -#gMicroThumbContainer #gMicroThumbGrid .gAlbum { +#gMicroThumbPanel #gMicroThumbGrid .gAlbum { background-color: #e8e8e8; } -#gMicroThumbContainer #gMicroThumbGrid :hover { +#gMicroThumbPanel #gMicroThumbGrid :hover { opacity: 1; } -#gMicroThumbContainer #gMicroThumbGrid .gThumbSelected { - border: 0.2em solid #09f; +.gMicroThumbContainer.ui-selected { opacity: 1; } -.gBranchSelected { - background-color: #cfdeff !important; - border-bottom: 1px solid #999 !important; - display: block; - padding: .3em 0; +#gDragHelper .gMicroThumbGrid { + background-color: transparent; + padding: 0; + overflow: visible; } - -.gBranchText { - cursor: pointer; -} - -.gBranchCollapsed { - display: none; -} - -.gBranchEmpty { - visibility: hidden; + +#gDragHelper .gMicroThumbContainer { + display: block; + margin: 0; + padding: 0; } -#gOrganizeTreeContainer ul ul li { - padding-left: 1.2em; +#gDragHelper .gMicroThumb { + background-color: transparent; + height: auto; + width: auto; } + +/**************************************************************** + * Organize Edit styling + */ #gOrganizeFormButtons { bottom: 0.5em; position: absolute; @@ -102,21 +132,3 @@ margin: 0; text-align: center; } - -#gMicroThumbUnselectAll, -#gMicroThumbSelectAll { - font-size: 1.2em; - font-weight: bold; -} - -.gOrganizeReorderDropTarget { - visibility: hidden; - background-color: #5C9CCC; - float: none; - width: .5em; - height: 9em; -} - -.gOrganizeReorderDropTargetHover { - visibility: visible; -} diff --git a/modules/organize/js/organize.js b/modules/organize/js/organize.js index c40a2d67..045603a4 100644 --- a/modules/organize/js/organize.js +++ b/modules/organize/js/organize.js @@ -4,9 +4,77 @@ var url; var height; +function organize_dialog_init() { + var size = viewport_size(); + height = size.height() - 100; + var width = size.width() - 100; + + // Deal with ui.jquery bug: http://dev.jqueryui.com/ticket/4475 + $(".sf-menu li.sfHover ul").css("z-index", 70); + + $("#gDialog").dialog("option", "width", width); + $("#gDialog").dialog("option", "height", height); + + $("#gDialog").dialog("open"); + if ($("#gDialog h1").length) { + $("#gDialog").dialog('option', 'title', $("#gDialog h1:eq(0)").html()); + } else if ($("#gDialog fieldset legend").length) { + $("#gDialog").dialog('option', 'title', $("#gDialog fieldset legend:eq(0)").html()); + } + + height -= 2 * parseFloat($("#gDialog").css("padding-top")); + height -= 2 * parseFloat($("#gDialog").css("padding-bottom")); + height -= $("#gMicroThumbPanel").position().top; + height -= $("#gDialog #ft").height(); + height = Math.round(height); + + $("#gMicroThumbPanel").height(height); + $("#gOrganizeTreeContainer").height(height); + + $(".gOrganizeBranch .ui-icon").click(organize_toggle_children); + $(".gBranchText").click(organize_open_folder); + retrieve_micro_thumbs(item_id); + //showLoading("#gDialog"); + + $("#gMicroThumbPanel").scroll(function() { + get_more_data(); + }); + + $("#gMicroThumbSelectAll").click(function(event) { + select_all(true); + event.preventDefault(); + }); + $("#gMicroThumbUnselectAll").click(function(event) { + select_all(false); + event.preventDefault(); + }); + + $("#gMicroThumbGrid").selectable({ + count: 0, + filter: ".gMicroThumbContainer", + selected: function(event, ui) { + /* + * Count the number of selected items if it is greater than 1, + * then click won't be called so we need to remove the gSelecting + * class in the stop event. + */ + var count = $("#gMicroThumbGrid").selectable("option", "count") + 1; + $("#gMicroThumbGrid").selectable("option", "count", count); + $(ui.selected).addClass("gSelecting"); + }, + stop: function(event) { + var count = $("#gMicroThumbGrid").selectable("option", "count"); + if (count > 1) { + $(".gMicroThumbContainer.gSelecting").removeClass("gSelecting"); + } + $("#gMicroThumbGrid").selectable("option", "count", 0); + } + }); +} + function get_album_content() { - var grid_width = $("#gMicroThumbContainer").width(); - url = $("#gMicroThumbContainer").attr("ref"); + var grid_width = $("#.gMicroThumbPanel").width(); + url = $("#gMicroThumbPanel").attr("ref"); url = url.replace("__WIDTH__", grid_width); url = url.replace("__HEIGHT__", height); @@ -16,8 +84,8 @@ function get_album_content() { function retrieve_micro_thumbs() { var offset = $("#gMicroThumbGrid li").length; if (url == null) { - var grid_width = $("#gMicroThumbContainer").width(); - url = $("#gMicroThumbContainer").attr("ref"); + var grid_width = $("#gMicroThumbPanel").width(); + url = $("#gMicroThumbPanel").attr("ref"); url = url.replace("__WIDTH__", grid_width); url = url.replace("__HEIGHT__", height); } @@ -26,39 +94,92 @@ function retrieve_micro_thumbs() { $.get(url_data, function(data) { $("#gMicroThumbGrid").append(data); get_more_data(); + $(".gMicroThumbContainer").click(function(event) { + if ($(this).hasClass("gSelecting")) { + $(this).removeClass("gSelecting"); + } else { + $(this).removeClass("ui-selected"); + } + }); + $(".gMicroThumbContainer").draggable({ + cancel: ".gMicroThumbContainer:not(.ui-selected)", + handle: ".gMicroThumbContainer.ui-selected", + zindex: 2000, + helper: function(event, ui) { + $("body").append("<div id=\"gDragHelper\"><ul></ul></div>"); + var beginTop = event.pageY; + var beginLeft = event.pageX; + var zindex = $(".gMicroThumbContainer").draggable("option", "zindex"); + $("#gDragHelper").css('top', event.pageY - 22.5); + $("#gDragHelper").css('left', event.pageX + 22.5); + var placeHolder = $(this).clone(); + $(placeHolder).attr("id", "gPlaceHolder"); + $(placeHolder).css("visibility", "hidden"); + $(placeHolder).removeClass("ui-selected"); + $(placeHolder).removeClass("ui-draggable"); + $(this).after(placeHolder); + + $("li.ui-selected").each(function(i) { + var clone = $(this).clone(); + $(clone).attr("id", "drag_clone_" + $(this).attr("ref")); + $("#gDragHelper ul").append(clone); + $(clone).css("position", "absolute"); + $(clone).css("top", beginTop); + $(clone).css("left", beginLeft); + $(clone).css("z-index", zindex--); + $(this).hide(); + + var children = $(clone).find(".gMicroThumb .gThumbnail"); + var width = new String(children.css("width")).replace(/[^0-9]/g,"") * .5; + height = new String(children.css("height")).replace(/[^0-9]/g,"") * .5; + var marginTop = new String(children.css("margin-top")).replace(/[^\.0-9]/g,"") * .5; + children.attr("width", width); + children.attr("height", height); + children.css("margin-top", marginTop); + if (i < 9) { + beginTop -= 5; + beginLeft += 5; + } + }); + return $("#gDragHelper"); + }, + stop: function(event, ui) { + $("#gDragHelper li").each(function(i) { + $("#gPlaceHolder").before($("#thumb_" + $(this).attr("ref")).show()); + }); + $(".gMicroThumbContainer.ui-selected").css("z-index", null); + $("#gDragHelper").remove(); + $("#gPlaceHolder").remove(); + } + }); + $(".gMicroThumbContainer").droppable( { + tolerance: "pointer", + over: function(event, ui) { + $(this).after($("#gPlaceHolder")); + }, + drop: function(event, ui) { + $("#gDragHelper li").each(function(i) { + $("#gPlaceHolder").before($("#thumb_" + $(this).attr("ref")).show()); + }); + $(".gMicroThumbContainer.ui-selected").css("z-index", null); + $("#gDragHelper").remove(); + $("#gPlaceHolder").remove(); + } + }); }); } function get_more_data() { - var element = $("#gMicroThumbContainer").get(0); + var element = $("#gMicroThumbPanel").get(0); var scrollHeight = element.scrollHeight; var scrollTop = element.scrollTop; - var height = $("#gMicroThumbContainer").height(); + var height = $("#gMicroThumbPanel").height(); var scrollPosition = scrollHeight - (scrollTop + height); if (scrollPosition > 0 && scrollPosition <= 100) { retrieve_micro_thumbs(); } } -function toggle_select(event) { - if ($(this).hasClass("gThumbSelected")) { - $(this).removeClass("gThumbSelected"); - $(this).draggable("destroy"); - } else { - $(this).addClass("gThumbSelected"); - $(this).draggable({containment: "#gDialog"}); - } - event.preventDefault(); -} - -function reset_edit_select() { - $("#gOrganizeFormNoImage").show(); - $("#gOrganizeFormThumb").hide(); - $("#gOrganizeFormMultipleImages").hide(); - $("#gOrganizeButtonPane").hide(); - select_all(false); -} - function organize_toggle_children(event) { var id = $(this).attr("ref"); var span_children = $("#gOrganizeChildren-" + id); @@ -81,81 +202,18 @@ function organize_open_folder(event) { $(this).addClass("gBranchSelected"); item_id = $(this).attr("ref"); $("#gMicroThumbGrid").empty(); - reset_edit_select(); retrieve_micro_thumbs(); } event.preventDefault(); } -function organize_dialog_init() { - var size = viewport_size(); - height = size.height() - 100; - var width = size.width() - 100; - - $("#gDialog").dialog("option", "width", width); - $("#gDialog").dialog("option", "height", height); - - $("#gDialog").dialog("open"); - if ($("#gDialog h1").length) { - $("#gDialog").dialog('option', 'title', $("#gDialog h1:eq(0)").html()); - } else if ($("#gDialog fieldset legend").length) { - $("#gDialog").dialog('option', 'title', $("#gDialog fieldset legend:eq(0)").html()); - } - - height -= 2 * parseFloat($("#gDialog").css("padding-top")); - height -= 2 * parseFloat($("#gDialog").css("padding-bottom")); - height -= $("#gMicroThumbContainer").position().top; - height -= $("#gDialog #ft").height(); - height = Math.round(height); - - $("#gMicroThumbContainer").height(height); - $("#gOrganizeTreeContainer").height(height); - $("#gOrganizeEditContainer").height(height); - - $(".gOrganizeBranch .ui-icon").click(organize_toggle_children); - $(".gBranchText").click(organize_open_folder); - retrieve_micro_thumbs(item_id); - //showLoading("#gDialog"); - - $("#gMicroThumbContainer").scroll(function() { - get_more_data(); - }); - - $("#gMicroThumbSelectAll").click(function(event) { - select_all(true); - event.preventDefault(); - }); - $("#gMicroThumbUnselectAll").click(function(event) { - select_all(false); - event.preventDefault(); - }); - - // Drag and Drop Initialization - $(".gOrganizeReorderDropTarget").droppable({ - hoverClass: "gOrganizeReorderDropTargetHover", - accept: ".gThumbSelected", - drop: function(event, ui) { - // Ajax call to start task for rearrange - } - }); - - $(".gOrganizeBranch").droppable({ - greedy: true, - accept: ".gThumbSelected", - drop: function(event, ui) { - // Ajax call to start task for move - } - }); -} - function select_all(select) { - $(".gMicroThumb").click(); if (select) { -// $("#gMicroThumbGrid li").addClass("gThumbSelected"); + $(".gMicroThumbContainer").addClass("ui-selected"); $("#gMicroThumbSelectAll").hide(); $("#gMicroThumbUnselectAll").show(); } else { -// $("#gMicroThumbGrid li").removeClass("gThumbSelected"); + $(".gMicroThumbContainer").removeClass("ui-selected"); $("#gMicroThumbSelectAll").show(); $("#gMicroThumbUnselectAll").hide(); } diff --git a/modules/organize/js/organize_init.js b/modules/organize/js/organize_init.js index 70949eab..faa725d3 100644 --- a/modules/organize/js/organize_init.js +++ b/modules/organize/js/organize_init.js @@ -10,7 +10,8 @@ $("document").ready(function() { autoResize: false, modal: true, resizable: true, - close: closeDialog + close: closeDialog, + zIndex: 75 }); //showLoading("#gDialog"); diff --git a/modules/organize/views/organize.html.php b/modules/organize/views/organize.html.php index 5f26603e..6b9eb3c6 100644 --- a/modules/organize/views/organize.html.php +++ b/modules/organize/views/organize.html.php @@ -16,7 +16,7 @@ <div class="yui-b"> <a id="gMicroThumbSelectAll" href="#"><?= t("select all") ?></a> <a id="gMicroThumbUnselectAll" href="#" style="display: none"><?= t("deselect all") ?></a> - <div id="gMicroThumbContainer" class="yui-u first" + <div id="gMicroThumbPanel" class="yui-u first" ref="<?= url::site("organize/content/__ITEM_ID__?width=__WIDTH__&height=__HEIGHT__&offset=__OFFSET__") ?>"> <ul id="gMicroThumbGrid"> </ul> diff --git a/modules/organize/views/organize_thumb_grid.html.php b/modules/organize/views/organize_thumb_grid.html.php index cdfd00bb..34b8058f 100644 --- a/modules/organize/views/organize_thumb_grid.html.php +++ b/modules/organize/views/organize_thumb_grid.html.php @@ -1,18 +1,15 @@ <?php defined("SYSPATH") or die("No direct script access.") ?> <script> - $(".gMicroThumb").click(toggle_select); + //$(".gMicroThumb").click(toggle_select); </script> <? foreach ($children as $i => $child): ?> <? $item_class = "gPhoto"; ?> <? if ($child->is_album()): ?> <? $item_class = "gAlbum"; ?> <? endif ?> -<li> - <div> - <div class="gOrganizeReorderDropTarget" ref="<?= $child->id ?>"> </div> - <div id="gMicroThumb-<?= $child->id ?>" class="gMicroThumb <?= $item_class ?>"> - <?= $child->thumb_tag(array("class" => "gThumbnail"), $thumbsize, true) ?> - </div> +<li id="thumb_<?= $child->id ?>" class="gMicroThumbContainer" ref="<?= $child->id ?>"> + <div id="gMicroThumb-<?= $child->id ?>" class="gMicroThumb <?= $item_class ?>"> + <?= $child->thumb_tag(array("class" => "gThumbnail"), $thumbsize, true) ?> </div> </li> <? endforeach ?> |