diff -r 861cae17abda -r 6cb4d10f0b8b web/res/metadataplayer/test/interface 1.2/source/isortables.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/res/metadataplayer/test/interface 1.2/source/isortables.js Wed Apr 06 16:26:16 2011 +0200 @@ -0,0 +1,392 @@ +/** + * Interface Elements for jQuery + * Sortables + * + * http://interface.eyecon.ro + * + * Copyright (c) 2006 Stefan Petre + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * + */ + +/** + * Allows you to resort elements within a container by dragging and dropping. Requires + * the Draggables and Droppables plugins. The container and each item inside the container + * must have an ID. Sortables are especially useful for lists. + * + * @see Plugins/Interface/Draggable + * @see Plugins/Interface/Droppable + * @author Stefan Petre + * @name Sortable + * @cat Plugins/Interface + * @param Hash options A hash of options + * @option String accept The class name for items inside the container (mandatory) + * @option String activeclass The class for the container when one of its items has started to move + * @option String hoverclass The class for the container when an acceptable item is inside it + * @option String helperclass The helper is used to point to the place where the item will be + * moved. This is the class for the helper. + * @option Float opacity Opacity (between 0 and 1) of the item while being dragged + * @option Boolean ghosting When true, the sortable is ghosted when dragged + * @option String tolerance Either 'pointer', 'intersect', or 'fit'. See Droppable for more details + * @option Boolean fit When true, sortable must be inside the container in order to drop + * @option Integer fx Duration for the effect applied to the sortable + * @option Function onchange Callback that gets called when the sortable list changed. It takes + * an array of serialized elements + * @option Boolean floats True if the sorted elements are floated + * @option String containment Use 'parent' to constrain the drag to the container + * @option String axis Use 'horizontally' or 'vertically' to constrain dragging to an axis + * @option String handle The jQuery selector that indicates the draggable handle + * @option DOMElement handle The node that indicates the draggable handle + * @option Function onHover Callback that is called when an acceptable item is dragged over the + * container. Gets the hovering DOMElement as a parameter + * @option Function onOut Callback that is called when an acceptable item leaves the container. + * Gets the leaving DOMElement as a parameter + * @option Object cursorAt The mouse cursor will be moved to the offset on the dragged item + * indicated by the object, which takes "top", "bottom", "left", and + * "right" keys + * @option Function onStart Callback function triggered when the dragging starts + * @option Function onStop Callback function triggered when the dragging stops + * @example $('ul').Sortable( + * { + * accept : 'sortableitem', + * activeclass : 'sortableactive', + * hoverclass : 'sortablehover', + * helperclass : 'sorthelper', + * opacity: 0.5, + * fit : false + * } + * ) + */ + +jQuery.iSort = { + changed : [], + collected : {}, + helper : false, + inFrontOf: null, + + start : function () + { + if (jQuery.iDrag.dragged == null) { + return; + } + var shs, margins,c, cs; + + jQuery.iSort.helper.get(0).className = jQuery.iDrag.dragged.dragCfg.hpc; + shs = jQuery.iSort.helper.get(0).style; + shs.display = 'block'; + jQuery.iSort.helper.oC = jQuery.extend( + jQuery.iUtil.getPosition(jQuery.iSort.helper.get(0)), + jQuery.iUtil.getSize(jQuery.iSort.helper.get(0)) + ); + + shs.width = jQuery.iDrag.dragged.dragCfg.oC.wb + 'px'; + shs.height = jQuery.iDrag.dragged.dragCfg.oC.hb + 'px'; + //shs.cssFloat = jQuery.iDrag.dragged.dragCfg.oF; + margins = jQuery.iUtil.getMargins(jQuery.iDrag.dragged); + shs.marginTop = margins.t; + shs.marginRight = margins.r; + shs.marginBottom = margins.b; + shs.marginLeft = margins.l; + if (jQuery.iDrag.dragged.dragCfg.ghosting == true) { + c = jQuery.iDrag.dragged.cloneNode(true); + cs = c.style; + cs.marginTop = '0px'; + cs.marginRight = '0px'; + cs.marginBottom = '0px'; + cs.marginLeft = '0px'; + cs.display = 'block'; + jQuery.iSort.helper.empty().append(c); + } + jQuery(jQuery.iDrag.dragged).after(jQuery.iSort.helper.get(0)); + jQuery.iDrag.dragged.style.display = 'none'; + }, + + check : function (e) + { + if (!e.dragCfg.so && jQuery.iDrop.overzone.sortable) { + if (e.dragCfg.onStop) + e.dragCfg.onStop.apply(dragged); + jQuery(e).css('position', e.dragCfg.initialPosition || e.dragCfg.oP); + jQuery(e).DraggableDestroy(); + jQuery(jQuery.iDrop.overzone).SortableAddItem(e); + } + jQuery.iSort.helper.removeClass(e.dragCfg.hpc).html(' '); + jQuery.iSort.inFrontOf = null; + var shs = jQuery.iSort.helper.get(0).style; + shs.display = 'none'; + jQuery.iSort.helper.after(e); + if (e.dragCfg.fx > 0) { + jQuery(e).fadeIn(e.dragCfg.fx); + } + jQuery('body').append(jQuery.iSort.helper.get(0)); + var ts = []; + var fnc = false; + for(var i=0; i 0) { + fnc(ts); + } + }, + + checkhover : function(e,o) + { + if (!jQuery.iDrag.dragged) + return; + var cur = false; + var i = 0; + if ( e.dropCfg.el.size() > 0) { + for (i = e.dropCfg.el.size(); i >0; i--) { + if (e.dropCfg.el.get(i-1) != jQuery.iDrag.dragged) { + if (!e.sortCfg.floats) { + if ( + (e.dropCfg.el.get(i-1).pos.y + e.dropCfg.el.get(i-1).pos.hb/2) > jQuery.iDrag.dragged.dragCfg.ny + ) { + cur = e.dropCfg.el.get(i-1); + } else { + break; + } + } else { + if ( + (e.dropCfg.el.get(i-1).pos.x + e.dropCfg.el.get(i-1).pos.wb/2) > jQuery.iDrag.dragged.dragCfg.nx && + (e.dropCfg.el.get(i-1).pos.y + e.dropCfg.el.get(i-1).pos.hb/2) > jQuery.iDrag.dragged.dragCfg.ny + ) { + cur = e.dropCfg.el.get(i-1); + } + } + } + } + } + //helpos = jQuery.iUtil.getPos(jQuery.iSort.helper.get(0)); + if (cur && jQuery.iSort.inFrontOf != cur) { + jQuery.iSort.inFrontOf = cur; + jQuery(cur).before(jQuery.iSort.helper.get(0)); + } else if(!cur && (jQuery.iSort.inFrontOf != null || jQuery.iSort.helper.get(0).parentNode != e) ) { + jQuery.iSort.inFrontOf = null; + jQuery(e).append(jQuery.iSort.helper.get(0)); + } + jQuery.iSort.helper.get(0).style.display = 'block'; + }, + + measure : function (e) + { + if (jQuery.iDrag.dragged == null) { + return; + } + e.dropCfg.el.each ( + function () + { + this.pos = jQuery.extend( + jQuery.iUtil.getSizeLite(this), + jQuery.iUtil.getPositionLite(this) + ); + } + ); + }, + + serialize : function(s) + { + var i; + var h = ''; + var o = {}; + if (s) { + if (jQuery.iSort.collected[s] ) { + o[s] = []; + jQuery('#' + s + ' .' + jQuery.iSort.collected[s]).each( + function () + { + if (h.length > 0) { + h += '&'; + } + h += s + '[]=' + jQuery.attr(this,'id'); + o[s][o[s].length] = jQuery.attr(this,'id'); + } + ); + } else { + for ( a in s) { + if (jQuery.iSort.collected[s[a]] ) { + o[s[a]] = []; + jQuery('#' + s[a] + ' .' + jQuery.iSort.collected[s[a]]).each( + function () + { + if (h.length > 0) { + h += '&'; + } + h += s[a] + '[]=' + jQuery.attr(this,'id'); + o[s[a]][o[s[a]].length] = jQuery.attr(this,'id'); + } + ); + } + } + } + } else { + for ( i in jQuery.iSort.collected){ + o[i] = []; + jQuery('#' + i + ' .' + jQuery.iSort.collected[i]).each( + function () + { + if (h.length > 0) { + h += '&'; + } + h += i + '[]=' + jQuery.attr(this,'id'); + o[i][o[i].length] = jQuery.attr(this,'id'); + } + ); + } + } + return {hash:h, o:o}; + }, + + addItem : function (e) + { + if ( !e.childNodes ) { + return; + } + return this.each( + function () + { + if(!this.sortCfg || !jQuery(e).is('.' + this.sortCfg.accept)) + jQuery(e).addClass(this.sortCfg.accept); + jQuery(e).Draggable(this.sortCfg.dragCfg); + } + ); + }, + + destroy: function() + { + return this.each( + function() + { + jQuery('.' + this.sortCfg.accept).DraggableDestroy(); + jQuery(this).DroppableDestroy(); + this.sortCfg = null; + this.isSortable = null; + } + ); + }, + + build : function (o) + { + if (o.accept && jQuery.iUtil && jQuery.iDrag && jQuery.iDrop) { + if (!jQuery.iSort.helper) { + jQuery('body',document).append('
 
'); + jQuery.iSort.helper = jQuery('#sortHelper'); + jQuery.iSort.helper.get(0).style.display = 'none'; + } + this.Droppable( + { + accept : o.accept, + activeclass : o.activeclass ? o.activeclass : false, + hoverclass : o.hoverclass ? o.hoverclass : false, + helperclass : o.helperclass ? o.helperclass : false, + /*onDrop: function (drag, fx) + { + jQuery.iSort.helper.after(drag); + if (fx > 0) { + jQuery(drag).fadeIn(fx); + } + },*/ + onHover: o.onHover||o.onhover, + onOut: o.onOut||o.onout, + sortable : true, + onChange : o.onChange||o.onchange, + fx : o.fx ? o.fx : false, + ghosting : o.ghosting ? true : false, + tolerance: o.tolerance ? o.tolerance : 'intersect' + } + ); + + return this.each( + function() + { + var dragCfg = { + revert : o.revert? true : false, + zindex : 3000, + opacity : o.opacity ? parseFloat(o.opacity) : false, + hpc : o.helperclass ? o.helperclass : false, + fx : o.fx ? o.fx : false, + so : true, + ghosting : o.ghosting ? true : false, + handle: o.handle ? o.handle : null, + containment: o.containment ? o.containment : null, + onStart : o.onStart && o.onStart.constructor == Function ? o.onStart : false, + onDrag : o.onDrag && o.onDrag.constructor == Function ? o.onDrag : false, + onStop : o.onStop && o.onStop.constructor == Function ? o.onStop : false, + axis : /vertically|horizontally/.test(o.axis) ? o.axis : false, + snapDistance : o.snapDistance ? parseInt(o.snapDistance)||0 : false, + cursorAt: o.cursorAt ? o.cursorAt : false + }; + jQuery('.' + o.accept, this).Draggable(dragCfg); + this.isSortable = true; + this.sortCfg = { + accept : o.accept, + revert : o.revert? true : false, + zindex : 3000, + opacity : o.opacity ? parseFloat(o.opacity) : false, + hpc : o.helperclass ? o.helperclass : false, + fx : o.fx ? o.fx : false, + so : true, + ghosting : o.ghosting ? true : false, + handle: o.handle ? o.handle : null, + containment: o.containment ? o.containment : null, + floats: o.floats ? true : false, + dragCfg : dragCfg + } + } + ); + } + } +}; + +jQuery.fn.extend( + { + Sortable : jQuery.iSort.build, + /** + * A new item can be added to a sortable by adding it to the DOM and then adding it via + * SortableAddItem. + * + * @name SortableAddItem + * @param DOMElement elem A DOM Element to add to the sortable list + * @example $('#sortable1').append('
  • new item
  • ') + * .SortableAddItem($("#new_item")[0]) + * @type jQuery + * @cat Plugins/Interface + */ + SortableAddItem : jQuery.iSort.addItem, + /** + * Destroy a sortable + * + * @name SortableDestroy + * @example $('#sortable1').SortableDestroy(); + * @type jQuery + * @cat Plugins/Interface + */ + SortableDestroy: jQuery.iSort.destroy + } +); + +/** + * This function returns the hash and an object (can be used as arguments for $.post) for every + * sortable in the page or specific sortables. The hash is based on the 'id' attributes of + * container and items. + * + * @params String sortable The id of the sortable to serialize + * @name $.SortSerialize + * @type String + * @cat Plugins/Interface + */ + +jQuery.SortSerialize = jQuery.iSort.serialize; \ No newline at end of file