web/rsln/res/metadataplayer/test/interface 1.2/source/iselect.js
changeset 50 a1636b31eb98
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/rsln/res/metadataplayer/test/interface 1.2/source/iselect.js	Fri Feb 18 19:37:15 2011 +0100
@@ -0,0 +1,275 @@
+/**
+ * Interface Elements for jQuery
+ * Selectables
+ *
+ * http://interface.eyecon.ro
+ *
+ * Copyright (c) 2006 Stefan Petre
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ *
+ */
+
+jQuery.selectHelper = null;
+jQuery.selectKeyHelper = false;
+jQuery.selectdrug = null;
+jQuery.selectCurrent = [];	// For current selection
+jQuery.selectKeyDown = function(e) {
+	var pressedKey = e.charCode || e.keyCode || -1;
+	if (pressedKey == 17 || pressedKey == 16) {
+		jQuery.selectKeyHelper = true;
+	}
+};
+jQuery.selectKeyUp = function(e) {
+	jQuery.selectKeyHelper = false;
+};
+jQuery.selectstart = function(e) {
+	this.f.pointer = jQuery.iUtil.getPointer(e);
+	this.f.pos = jQuery.extend(
+		jQuery.iUtil.getPosition(this), 
+		jQuery.iUtil.getSize(this)
+	);
+	
+	this.f.scr = jQuery.iUtil.getScroll(this);
+	this.f.pointer.x -= this.f.pos.x;
+	this.f.pointer.y -= this.f.pos.y;
+	jQuery(this).append(jQuery.selectHelper.get(0));
+	if (this.f.hc)
+		jQuery.selectHelper.addClass(this.f.hc).css('display','block');
+	jQuery.selectHelper.css(
+		{
+			display: 'block',
+			width: '0px',
+			height: '0px'
+		}
+	);
+	if (this.f.o) {
+		jQuery.selectHelper.css('opacity', this.f.o);
+	}
+
+	jQuery.selectdrug = this;
+	jQuery.selectedone = false;
+	jQuery.selectCurrent = [];	// For current selection state
+	this.f.el.each(
+		function ()
+		{
+			this.pos = {
+				x: this.offsetLeft + (this.currentStyle && !jQuery.browser.opera ?parseInt(this.currentStyle.borderLeftWidth)||0:0) + (jQuery.selectdrug.scrollLeft||0), 
+				y: this.offsetTop + (this.currentStyle && !jQuery.browser.opera ?parseInt(this.currentStyle.borderTopWidth)||0:0) + (jQuery.selectdrug.scrollTop||0),
+				wb: this.offsetWidth,
+				hb: this.offsetHeight
+			};
+			if (this.s == true) {
+				if (jQuery.selectKeyHelper == false) {
+					this.s = false;
+					jQuery(this).removeClass(jQuery.selectdrug.f.sc);
+				} else {
+					jQuery.selectedone = true;
+
+					// Save current state
+					jQuery.selectCurrent[jQuery.selectCurrent.length] = jQuery.attr(this,'id');
+				}
+			}
+		}
+	);
+	jQuery.selectcheck.apply(this, [e]);
+	jQuery(document)
+		.bind('mousemove', jQuery.selectcheck)
+		.bind('mouseup', jQuery.selectstop);
+	return false;
+};
+jQuery.selectcheck = function(e)
+{
+	if(!jQuery.selectdrug)
+		return;
+	jQuery.selectcheckApply.apply(jQuery.selectdrug, [e]);
+};
+jQuery.selectcheckApply = function(e)
+{
+	if(!jQuery.selectdrug)
+		return;
+	var pointer = jQuery.iUtil.getPointer(e);
+	
+	var scr = jQuery.iUtil.getScroll(jQuery.selectdrug);
+	pointer.x += scr.l - this.f.scr.l - this.f.pos.x;
+	pointer.y += scr.t - this.f.scr.t - this.f.pos.y;
+	
+	var sx = Math.min(pointer.x, this.f.pointer.x);
+	var sw = Math.min(Math.abs(pointer.x - this.f.pointer.x), Math.abs(this.f.scr.w - sx));
+	var sy = Math.min(pointer.y, this.f.pointer.y);
+	var sh = Math.min(Math.abs(pointer.y - this.f.pointer.y), Math.abs(this.f.scr.h - sy));
+	if (this.scrollTop > 0 && pointer.y - 20 < this.scrollTop) {
+		var diff = Math.min(scr.t, 10);
+		sy -= diff;
+		sh += diff;
+		this.scrollTop -= diff;
+	} else if (this.scrollTop+ this.f.pos.h < this.f.scr.h && pointer.y + 20 > this.scrollTop + this.f.pos.h) {
+		var diff = Math.min(this.f.scr.h - this.scrollTop, 10);
+		this.scrollTop += diff;
+		if (this.scrollTop != scr.t)
+			sh += diff;
+	}
+	if (this.scrollLeft > 0 && pointer.x - 20 < this.scrollLeft) {
+		var diff = Math.min(scr.l, 10);
+		sx -= diff;
+		sw += diff;
+		this.scrollLeft -= diff;
+	} else if (this.scrollLeft+ this.f.pos.w < this.f.scr.w && pointer.x + 20 > this.scrollLeft + this.f.pos.w) {
+		var diff = Math.min(this.f.scr.w - this.scrollLeft, 10);
+		this.scrollLeft += diff;
+		if (this.scrollLeft != scr.l)
+			sw += diff;
+	}
+	jQuery.selectHelper.css(
+		{
+			left:	sx + 'px',
+			top:	sy + 'px',
+			width:	sw + 'px',
+			height:	sh + 'px'
+		}
+	);
+	jQuery.selectHelper.l = sx + this.f.scr.l;
+	jQuery.selectHelper.t = sy + this.f.scr.t;
+	jQuery.selectHelper.r = jQuery.selectHelper.l + sw;
+	jQuery.selectHelper.b = jQuery.selectHelper.t + sh;
+	jQuery.selectedone = false;
+	this.f.el.each(
+		function () {
+			// Locate the current element in the current selection
+			iIndex = jQuery.selectCurrent.indexOf(jQuery.attr(this, 'id'));
+			// In case we are currently OVER an item
+			if (
+				! ( this.pos.x > jQuery.selectHelper.r
+				|| (this.pos.x + this.pos.wb) < jQuery.selectHelper.l
+				|| this.pos.y > jQuery.selectHelper.b
+				|| (this.pos.y + this.pos.hb) < jQuery.selectHelper.t
+				)
+			)
+			{
+				jQuery.selectedone = true;
+				if (this.s != true) {
+					this.s = true;
+					jQuery(this).addClass(jQuery.selectdrug.f.sc);
+				}
+
+				// Check to see if this item was previously selected, if so, unselect it
+				if (iIndex != -1) {
+					this.s = false;
+					jQuery(this).removeClass(jQuery.selectdrug.f.sc);
+				}
+			} else if (
+						(this.s == true) &&
+						(iIndex == -1)
+					) {
+				// If the item was marked as selected, but it was not selected when you started dragging unselect it.
+				this.s = false;
+				jQuery(this).removeClass(jQuery.selectdrug.f.sc);
+			} else if (
+						(!this.s) &&
+						(jQuery.selectKeyHelper == true) &&
+						(iIndex != -1)
+					) {
+				// Reselect the item if:
+				// - we ARE multiselecting,
+				// - dragged over an allready selected object (so it got unselected)
+				// - But then dragged the selection out of it again.
+				this.s = true;
+				jQuery(this).addClass(jQuery.selectdrug.f.sc);
+			}
+		}
+	);
+	return false;
+};
+jQuery.selectstop = function(e)
+{
+	if(!jQuery.selectdrug)
+		return;
+	jQuery.selectstopApply.apply(jQuery.selectdrug, [e]);
+};
+jQuery.selectstopApply = function(e)
+{
+	jQuery(document)
+		.unbind('mousemove', jQuery.selectcheck)
+		.unbind('mouseup', jQuery.selectstop);
+	if(!jQuery.selectdrug)
+		return;
+	jQuery.selectHelper.css('display','none');
+	if (this.f.hc)
+		jQuery.selectHelper.removeClass(this.f.hc);
+	jQuery.selectdrug = false;
+	jQuery('body').append(jQuery.selectHelper.get(0));
+	//
+	// In case we have selected some new items..
+	if (jQuery.selectedone == true) {
+		if (this.f.onselect)
+			this.f.onselect(jQuery.Selectserialize(jQuery.attr(this,'id')));
+	} else {
+		if (this.f.onselectstop)
+			this.f.onselectstop(jQuery.Selectserialize(jQuery.attr(this,'id')));
+	}
+	// Reset current selection
+	jQuery.selectCurrent = [];
+};
+
+jQuery.Selectserialize = function(s)
+{
+	var h = '';
+	var o = [];
+	if (a = jQuery('#' + s)) {
+		a.get(0).f.el.each(
+			function ()
+			{
+				if (this.s == true) {
+					if (h.length > 0) {
+						h += '&';
+					}
+					h += s + '[]=' + jQuery.attr(this,'id');
+					o[o.length] = jQuery.attr(this,'id');
+				}
+			}
+		);
+	}
+	return {hash:h, o:o};
+};
+jQuery.fn.Selectable = function(o)
+{
+	if (!jQuery.selectHelper) {
+		jQuery('body',document).append('<div id="selectHelper"></div>').bind('keydown', jQuery.selectKeyDown).bind('keyup', jQuery.selectKeyUp);
+		jQuery.selectHelper = jQuery('#selectHelper');
+		jQuery.selectHelper.css(
+			{
+				position:	'absolute',
+				display:	'none'
+			}
+		);
+
+		if (window.event) {
+			jQuery('body',document).bind('keydown', jQuery.selectKeyDown).bind('keyup', jQuery.selectKeyUp);
+		} else {
+			jQuery(document).bind('keydown', jQuery.selectKeyDown).bind('keyup', jQuery.selectKeyUp);
+		}
+	}
+
+    if (!o) {
+		o = {};
+	}
+    return this.each(
+		function()
+		{
+			if (this.isSelectable)
+				return;
+			this.isSelectable = true;
+			this.f = {
+				a : o.accept,
+				o : o.opacity ? parseFloat(o.opacity) : false,
+				sc : o.selectedclass ? o.selectedclass : false,
+				hc : o.helperclass ? o.helperclass : false,
+				onselect : o.onselect ? o.onselect : false,
+				onselectstop : o.onselectstop ? o.onselectstop : false
+			};
+			this.f.el = jQuery('.' + o.accept);
+			jQuery(this).bind('mousedown', jQuery.selectstart).css('position', 'relative');
+		}
+	);
+};
\ No newline at end of file