summaryrefslogtreecommitdiff
path: root/modules/rearrange/js
diff options
context:
space:
mode:
authorTim Almdal <tnalmdal@shaw.ca>2008-12-01 20:54:25 +0000
committerTim Almdal <tnalmdal@shaw.ca>2008-12-01 20:54:25 +0000
commit0ebd4f6b28e9fbe51d6214e9b845c94c54ca92a0 (patch)
treede506db999eef0f65e5f4f80b18e639dfa8a84dd /modules/rearrange/js
parented2cb2a86d691895ce4dac9b6de6665c5021c4c4 (diff)
New Rearrange gui based on jqueryFileTree (http://www.abeautifulsite.net/notebook.php?article=58). I like the look of this one better. Still need to implement the drag and drop functionality.
Diffstat (limited to 'modules/rearrange/js')
-rw-r--r--modules/rearrange/js/jquery.gallery.rearrange.tree.js90
-rw-r--r--modules/rearrange/js/jquery.simple.tree.js451
-rw-r--r--modules/rearrange/js/rearrange_tree.js0
3 files changed, 90 insertions, 451 deletions
diff --git a/modules/rearrange/js/jquery.gallery.rearrange.tree.js b/modules/rearrange/js/jquery.gallery.rearrange.tree.js
new file mode 100644
index 00000000..875873ab
--- /dev/null
+++ b/modules/rearrange/js/jquery.gallery.rearrange.tree.js
@@ -0,0 +1,90 @@
+/**
+ * Gallery - a web based photo album viewer and editor
+ * Copyright (C) 2000-2008 Bharat Mediratta
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * This script is based on the
+ * jQuery File Tree Plugin,
+ * developed by Cory S.N. LaViska
+ * A Beautiful Site (http://abeautifulsite.net/)
+ * Originally released under a Creative Commons License and is copyrighted
+ * (C)2008 by Cory S.N. LaViska.
+ * For details, visit http://creativecommons.org/licenses/by/3.0/us/
+ *
+ */
+if(jQuery) (function($){
+
+ $.extend($.fn, {
+ RearrangeTree: function(o, h) {
+ // Defaults
+ if( !o ) var o = {};
+ if( o.root == undefined ) o.root = '/1';
+ if( o.script == undefined ) o.script = 'rearrange';
+ if( o.folderEvent == undefined ) o.folderEvent = 'click';
+ if( o.expandSpeed == undefined ) o.expandSpeed= 500;
+ if( o.collapseSpeed == undefined ) o.collapseSpeed= 500;
+ if( o.expandEasing == undefined ) o.expandEasing = null;
+ if( o.collapseEasing == undefined ) o.collapseEasing = null;
+ if( o.multiFolder == undefined ) o.multiFolder = true;
+ if( o.loadMessage == undefined ) o.loadMessage = 'Loading...';
+
+ $(this).each( function() {
+
+ function showTree(c, t) {
+ $(c).addClass('wait');
+ $(".jqueryFileTree.start").remove();
+ $.get(o.script + "/" + t, {}, function(data) {
+ $(c).find('.start').html('');
+ $(c).removeClass('wait').append(data);
+ if( o.root == t ) $(c).find('UL:hidden').show(); else $(c).find('UL:hidden').slideDown({ duration: o.expandSpeed, easing: o.expandEasing });
+ bindTree(c);
+ });
+ }
+
+ function bindTree(t) {
+ $(t).find('LI A').bind(o.folderEvent, function() {
+ if( $(this).parent().hasClass('directory') ) {
+ if( $(this).parent().hasClass('collapsed') ) {
+ // Expand
+ if( !o.multiFolder ) {
+ $(this).parent().parent().find('UL').slideUp({ duration: o.collapseSpeed, easing: o.collapseEasing });
+ $(this).parent().parent().find('LI.directory').removeClass('expanded').addClass('collapsed');
+ }
+ $(this).parent().find('UL').remove(); // cleanup
+ showTree( $(this).parent(), escape($(this).attr('rel')) );
+ $(this).parent().removeClass('collapsed').addClass('expanded');
+ } else {
+ // Collapse
+ $(this).parent().find('UL').slideUp({ duration: o.collapseSpeed, easing: o.collapseEasing });
+ $(this).parent().removeClass('expanded').addClass('collapsed');
+ }
+ } else {
+ h($(this).attr('rel'));
+ }
+ return false;
+ });
+ // Prevent A from triggering the # on non-click events
+ if( o.folderEvent.toLowerCase != 'click' ) $(t).find('LI A').bind('click', function() { return false; });
+ }
+ // Loading message
+ $(this).html('<ul class="jqueryFileTree start"><li class="wait">' + o.loadMessage + '<li></ul>');
+ // Get the initial file list
+ showTree( $(this), "" );
+ });
+ }
+ });
+
+})(jQuery); \ No newline at end of file
diff --git a/modules/rearrange/js/jquery.simple.tree.js b/modules/rearrange/js/jquery.simple.tree.js
deleted file mode 100644
index 8e3bc783..00000000
--- a/modules/rearrange/js/jquery.simple.tree.js
+++ /dev/null
@@ -1,451 +0,0 @@
-/*
-* jQuery SimpleTree Drag&Drop plugin
-* Update on 22th May 2008
-* Version 0.3
-*
-* Licensed under BSD <http://en.wikipedia.org/wiki/BSD_License>
-* Copyright (c) 2008, Peter Panov <panov@elcat.kg>, IKEEN Group http://www.ikeen.com
-* All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions are met:
-* * Redistributions of source code must retain the above copyright
-* notice, this list of conditions and the following disclaimer.
-* * Redistributions in binary form must reproduce the above copyright
-* notice, this list of conditions and the following disclaimer in the
-* documentation and/or other materials provided with the distribution.
-* * Neither the name of the Peter Panov, IKEEN Group nor the
-* names of its contributors may be used to endorse or promote products
-* derived from this software without specific prior written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY Peter Panov, IKEEN Group ``AS IS'' AND ANY
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-* DISCLAIMED. IN NO EVENT SHALL Peter Panov, IKEEN Group BE LIABLE FOR ANY
-* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-
-$.fn.simpleTree = function(opt){
- return this.each(function(){
- var TREE = this;
- var ROOT = $('.root',this);
- var mousePressed = false;
- var mouseMoved = false;
- var dragMoveType = false;
- var dragNode_destination = false;
- var dragNode_source = false;
- var dragDropTimer = false;
- var ajaxCache = Array();
-
- TREE.option = {
- drag: true,
- animate: false,
- autoclose: false,
- speed: 'fast',
- afterAjax: false,
- afterMove: false,
- afterClick: false,
- afterDblClick: false,
- // added by Erik Dohmen (2BinBusiness.nl) to make context menu cliks available
- afterContextMenu: false,
- docToFolderConvert:false
- };
- TREE.option = $.extend(TREE.option,opt);
- $.extend(this, {getSelected: function(){
- return $('span.active', this).parent();
- }});
- TREE.closeNearby = function(obj)
- {
- $(obj).siblings().filter('.folder-open, .folder-open-last').each(function(){
- var childUl = $('>ul',this);
- var className = this.className;
- this.className = className.replace('open','close');
- if(TREE.option.animate)
- {
- childUl.animate({height:"toggle"},TREE.option.speed);
- }else{
- childUl.hide();
- }
- });
- };
- TREE.nodeToggle = function(obj)
- {
- var childUl = $('>ul',obj);
- if(childUl.is(':visible')){
- obj.className = obj.className.replace('open','close');
-
- if(TREE.option.animate)
- {
- childUl.animate({height:"toggle"},TREE.option.speed);
- }else{
- childUl.hide();
- }
- }else{
- obj.className = obj.className.replace('close','open');
- if(TREE.option.animate)
- {
- childUl.animate({height:"toggle"},TREE.option.speed, function(){
- if(TREE.option.autoclose)TREE.closeNearby(obj);
- if(childUl.is('.ajax'))TREE.setAjaxNodes(childUl, obj.id);
- });
- }else{
- childUl.show();
- if(TREE.option.autoclose)TREE.closeNearby(obj);
- if(childUl.is('.ajax'))TREE.setAjaxNodes(childUl, obj.id);
- }
- }
- };
- TREE.setAjaxNodes = function(node, parentId, callback)
- {
- if($.inArray(parentId,ajaxCache) == -1){
- ajaxCache[ajaxCache.length]=parentId;
- var url = $.trim($('>li', node).text());
- if(url && url.indexOf('url:'))
- {
- url=$.trim(url.replace(/.*\{url:(.*)\}/i ,'$1'));
- $.ajax({
- type: "GET",
- url: url,
- contentType:'html',
- cache:false,
- success: function(responce){
- node.removeAttr('class');
- node.html(responce);
- $.extend(node,{url:url});
- TREE.setTreeNodes(node, true);
- if(typeof TREE.option.afterAjax == 'function')
- {
- TREE.option.afterAjax(node);
- }
- if(typeof callback == 'function')
- {
- callback(node);
- }
- }
- });
- }
-
- }
- };
- TREE.setTreeNodes = function(obj, useParent){
- obj = useParent? obj.parent():obj;
- $('li>span', obj).addClass('text')
- .bind('selectstart', function() {
- return false;
- }).click(function(){
- $('.active',TREE).attr('class','text');
- if(this.className=='text')
- {
- this.className='active';
- }
- if(typeof TREE.option.afterClick == 'function')
- {
- TREE.option.afterClick($(this).parent());
- }
- return false;
- }).dblclick(function(){
- mousePressed = false;
- TREE.nodeToggle($(this).parent().get(0));
- if(typeof TREE.option.afterDblClick == 'function')
- {
- TREE.option.afterDblClick($(this).parent());
- }
- return false;
- // added by Erik Dohmen (2BinBusiness.nl) to make context menu actions
- // available
- }).bind("contextmenu",function(){
- $('.active',TREE).attr('class','text');
- if(this.className=='text')
- {
- this.className='active';
- }
- if(typeof TREE.option.afterContextMenu == 'function')
- {
- TREE.option.afterContextMenu($(this).parent());
- }
- return false;
- }).mousedown(function(event){
- mousePressed = true;
- cloneNode = $(this).parent().clone();
- var LI = $(this).parent();
- if(TREE.option.drag)
- {
- $('>ul', cloneNode).hide();
- $('body').append('<div id="drag_container"><ul></ul></div>');
- $('#drag_container').hide().css({opacity:'0.8'});
- $('#drag_container >ul').append(cloneNode);
- $("<img>").attr({id : "tree_plus",src : "images/plus.gif"}).css({width: "7px",display: "block",position: "absolute",left : "5px",top: "5px", display:'none'}).appendTo("body");
- $(document).bind("mousemove", {LI:LI}, TREE.dragStart).bind("mouseup",TREE.dragEnd);
- }
- return false;
- }).mouseup(function(){
- if(mousePressed && mouseMoved && dragNode_source)
- {
- TREE.moveNodeToFolder($(this).parent());
- }
- TREE.eventDestroy();
- });
- $('li', obj).each(function(i){
- var className = this.className;
- var open = false;
- var cloneNode=false;
- var LI = this;
- var childNode = $('>ul',this);
- if(childNode.size()>0){
- var setClassName = 'folder-';
- if(className && className.indexOf('open')>=0){
- setClassName=setClassName+'open';
- open=true;
- }else{
- setClassName=setClassName+'close';
- }
- this.className = setClassName + ($(this).is(':last-child')? '-last':'');
-
- if(!open || className.indexOf('ajax')>=0)childNode.hide();
-
- TREE.setTrigger(this);
- }else{
- var setClassName = 'doc';
- this.className = setClassName + ($(this).is(':last-child')? '-last':'');
- }
- }).before('<li class="line">&nbsp;</li>')
- .filter(':last-child').after('<li class="line-last"></li>');
- TREE.setEventLine($('.line, .line-last', obj));
- };
- TREE.setTrigger = function(node){
- $('>span',node).before('<img class="trigger" src="images/spacer.gif" border=0>');
- var trigger = $('>.trigger', node);
- trigger.click(function(event){
- TREE.nodeToggle(node);
- });
- if(!$.browser.msie)
- {
- trigger.css('float','left');
- }
- };
- TREE.dragStart = function(event){
- var LI = $(event.data.LI);
- if(mousePressed)
- {
- mouseMoved = true;
- if(dragDropTimer) clearTimeout(dragDropTimer);
- if($('#drag_container:not(:visible)')){
- $('#drag_container').show();
- LI.prev('.line').hide();
- dragNode_source = LI;
- }
- $('#drag_container').css({position:'absolute', "left" : (event.pageX + 5), "top": (event.pageY + 15) });
- if(LI.is(':visible'))LI.hide();
- var temp_move = false;
- if(event.target.tagName.toLowerCase()=='span' && $.inArray(event.target.className, Array('text','active','trigger'))!= -1)
- {
- var parent = event.target.parentNode;
- var offs = $(parent).offset({scroll:false});
- var screenScroll = {x : (offs.left - 3),y : event.pageY - offs.top};
- var isrc = $("#tree_plus").attr('src');
- var ajaxChildSize = $('>ul.ajax',parent).size();
- var ajaxChild = $('>ul.ajax',parent);
- screenScroll.x += 19;
- screenScroll.y = event.pageY - screenScroll.y + 5;
-
- if(parent.className.indexOf('folder-close')>=0 && ajaxChildSize==0)
- {
- if(isrc.indexOf('minus')!=-1)$("#tree_plus").attr('src','images/plus.gif');
- $("#tree_plus").css({"left": screenScroll.x, "top": screenScroll.y}).show();
- dragDropTimer = setTimeout(function(){
- parent.className = parent.className.replace('close','open');
- $('>ul',parent).show();
- }, 700);
- }else if(parent.className.indexOf('folder')>=0 && ajaxChildSize==0){
- if(isrc.indexOf('minus')!=-1)$("#tree_plus").attr('src','images/plus.gif');
- $("#tree_plus").css({"left": screenScroll.x, "top": screenScroll.y}).show();
- }else if(parent.className.indexOf('folder-close')>=0 && ajaxChildSize>0)
- {
- mouseMoved = false;
- $("#tree_plus").attr('src','images/minus.gif');
- $("#tree_plus").css({"left": screenScroll.x, "top": screenScroll.y}).show();
-
- $('>ul',parent).show();
- /*
- Thanks for the idea of Erik Dohmen
- */
- TREE.setAjaxNodes(ajaxChild,parent.id, function(){
- parent.className = parent.className.replace('close','open');
- mouseMoved = true;
- $("#tree_plus").attr('src','images/plus.gif');
- $("#tree_plus").css({"left": screenScroll.x, "top": screenScroll.y}).show();
- });
-
- }else{
- if(TREE.option.docToFolderConvert)
- {
- $("#tree_plus").css({"left": screenScroll.x, "top": screenScroll.y}).show();
- }else{
- $("#tree_plus").hide();
- }
- }
- }else{
- $("#tree_plus").hide();
- }
- return false;
- }
- return true;
- };
- TREE.dragEnd = function(){
- if(dragDropTimer) clearTimeout(dragDropTimer);
- TREE.eventDestroy();
- };
- TREE.setEventLine = function(obj){
- obj.mouseover(function(){
- if(this.className.indexOf('over')<0 && mousePressed && mouseMoved)
- {
- this.className = this.className.replace('line','line-over');
- }
- }).mouseout(function(){
- if(this.className.indexOf('over')>=0)
- {
- this.className = this.className.replace('-over','');
- }
- }).mouseup(function(){
- if(mousePressed && dragNode_source && mouseMoved)
- {
- dragNode_destination = $(this).parents('li:first');
- TREE.moveNodeToLine(this);
- TREE.eventDestroy();
- }
- });
- };
- TREE.checkNodeIsLast = function(node)
- {
- if(node.className.indexOf('last')>=0)
- {
- var prev_source = dragNode_source.prev().prev();
- if(prev_source.size()>0)
- {
- prev_source[0].className+='-last';
- }
- node.className = node.className.replace('-last','');
- }
- };
- TREE.checkLineIsLast = function(line)
- {
- if(line.className.indexOf('last')>=0)
- {
- var prev = $(line).prev();
- if(prev.size()>0)
- {
- prev[0].className = prev[0].className.replace('-last','');
- }
- dragNode_source[0].className+='-last';
- }
- };
- TREE.eventDestroy = function()
- {
- // added by Erik Dohmen (2BinBusiness.nl), the unbind mousemove TREE.dragStart action
- // like this other mousemove actions binded through other actions ain't removed (use it myself
- // to determine location for context menu)
- $(document).unbind('mousemove',TREE.dragStart).unbind('mouseup').unbind('mousedown');
- $('#drag_container, #tree_plus').remove();
- if(dragNode_source)
- {
- $(dragNode_source).show().prev('.line').show();
- }
- dragNode_destination = dragNode_source = mousePressed = mouseMoved = false;
- //ajaxCache = Array();
- };
- TREE.convertToFolder = function(node){
- node[0].className = node[0].className.replace('doc','folder-open');
- node.append('<ul><li class="line-last"></li></ul>');
- TREE.setTrigger(node[0]);
- TREE.setEventLine($('.line, .line-last', node));
- };
- TREE.convertToDoc = function(node){
- $('>ul', node).remove();
- $('img', node).remove();
- node[0].className = node[0].className.replace(/folder-(open|close)/gi , 'doc');
- };
- TREE.moveNodeToFolder = function(node)
- {
- if(!TREE.option.docToFolderConvert && node[0].className.indexOf('doc')!=-1)
- {
- return true;
- }else if(TREE.option.docToFolderConvert && node[0].className.indexOf('doc')!=-1){
- TREE.convertToFolder(node);
- }
- TREE.checkNodeIsLast(dragNode_source[0]);
- var lastLine = $('>ul >.line-last', node);
- if(lastLine.size()>0)
- {
- TREE.moveNodeToLine(lastLine[0]);
- }
- };
- TREE.moveNodeToLine = function(node){
- TREE.checkNodeIsLast(dragNode_source[0]);
- TREE.checkLineIsLast(node);
- var parent = $(dragNode_source).parents('li:first');
- var line = $(dragNode_source).prev('.line');
- $(node).before(dragNode_source);
- $(dragNode_source).before(line);
- node.className = node.className.replace('-over','');
- var nodeSize = $('>ul >li', parent).not('.line, .line-last').filter(':visible').size();
- if(TREE.option.docToFolderConvert && nodeSize==0)
- {
- TREE.convertToDoc(parent);
- }else if(nodeSize==0)
- {
- parent[0].className=parent[0].className.replace('open','close');
- $('>ul',parent).hide();
- }
-
- // added by Erik Dohmen (2BinBusiness.nl) select node
- if($('span:first',dragNode_source).attr('class')=='text')
- {
- $('.active',TREE).attr('class','text');
- $('span:first',dragNode_source).attr('class','active');
- }
-
- if(typeof(TREE.option.afterMove) == 'function')
- {
- var pos = $(dragNode_source).prevAll(':not(.line)').size();
- TREE.option.afterMove($(node).parents('li:first'), $(dragNode_source), pos);
- }
- };
-
- TREE.addNode = function(id, text, callback)
- {
- var temp_node = $('<li><ul><li id="'+id+'"><span>'+text+'</span></li></ul></li>');
- TREE.setTreeNodes(temp_node);
- dragNode_destination = TREE.getSelected();
- dragNode_source = $('.doc-last',temp_node);
- TREE.moveNodeToFolder(dragNode_destination);
- temp_node.remove();
- if(typeof(callback) == 'function')
- {
- callback(dragNode_destination, dragNode_source);
- }
- };
- TREE.delNode = function(callback)
- {
- dragNode_source = TREE.getSelected();
- TREE.checkNodeIsLast(dragNode_source[0]);
- dragNode_source.prev().remove();
- dragNode_source.remove();
- if(typeof(callback) == 'function')
- {
- callback(dragNode_destination);
- }
- };
-
- TREE.init = function(obj)
- {
- TREE.setTreeNodes(obj, false);
- };
- TREE.init(ROOT);
- });
-} \ No newline at end of file
diff --git a/modules/rearrange/js/rearrange_tree.js b/modules/rearrange/js/rearrange_tree.js
deleted file mode 100644
index e69de29b..00000000
--- a/modules/rearrange/js/rearrange_tree.js
+++ /dev/null