summaryrefslogtreecommitdiffstats
path: root/lib/jquery.event.drag.custom.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/jquery.event.drag.custom.js')
-rw-r--r--lib/jquery.event.drag.custom.js142
1 files changed, 0 insertions, 142 deletions
diff --git a/lib/jquery.event.drag.custom.js b/lib/jquery.event.drag.custom.js
deleted file mode 100644
index c012ae0..0000000
--- a/lib/jquery.event.drag.custom.js
+++ /dev/null
@@ -1,142 +0,0 @@
-/**
- * @license
- * jquery.event.drag.js ~ v1.5 ~ Copyright (c) 2008, Three Dub Media (http://threedubmedia.com)
- * Licensed under the MIT License ~ http://threedubmedia.googlecode.com/files/MIT-LICENSE.txt
- */
-;(function($){ // secure $ jQuery alias
-/*******************************************************************************************/
-// Created: 2008-06-04 | Updated: 2009-03-24
-/*******************************************************************************************/
-// Events: drag, dragstart, dragend
-/*******************************************************************************************/
-
-// jquery method
-$.fn.drag = function( fn1, fn2, fn3 ){
- if ( fn2 ) this.bind('dragstart', fn1 ); // 2+ args
- if ( fn3 ) this.bind('dragend', fn3 ); // 3 args
- return !fn1 ? this.trigger('drag') // 0 args
- : this.bind('drag', fn2 ? fn2 : fn1 ); // 1+ args
- };
-
-// local refs
-var $event = $.event, $special = $event.special,
-
-// special event configuration
-drag = $special.drag = {
- not: ':input', // don't begin to drag on event.targets that match this selector
- distance: 0, // distance dragged before dragstart
- which: 1, // mouse button pressed to start drag sequence
- dragging: false, // hold the active target element
- setup: function( data ){
- data = $.extend({
- distance: drag.distance,
- which: drag.which,
- not: drag.not
- }, data || {});
- data.distance = squared( data.distance ); // xІ + yІ = distanceІ
- $event.add( this, "mousedown", handler, data );
- if ( this.attachEvent ) this.attachEvent("ondragstart", dontStart ); // prevent image dragging in IE...
- },
- teardown: function(){
- $event.remove( this, "mousedown", handler );
- if ( this === drag.dragging ) drag.dragging = drag.proxy = false; // deactivate element
- selectable( this, true ); // enable text selection
- if ( this.detachEvent ) this.detachEvent("ondragstart", dontStart ); // prevent image dragging in IE...
- }
- };
-
-// prevent normal event binding...
-$special.dragstart = $special.dragend = { setup:function(){}, teardown:function(){} };
-
-// handle drag-releatd DOM events
-function handler ( event ){
- var elem = this, returned, data = event.data || {};
- // mousemove or mouseup
- if ( data.elem ){
- // update event properties...
- elem = event.dragTarget = data.elem; // drag source element
- event.dragProxy = drag.proxy || elem; // proxy element or source
- event.cursorOffsetX = data.pageX - data.left; // mousedown offset
- event.cursorOffsetY = data.pageY - data.top; // mousedown offset
- event.offsetX = event.pageX - event.cursorOffsetX; // element offset
- event.offsetY = event.pageY - event.cursorOffsetY; // element offset
- }
- // mousedown, check some initial props to avoid the switch statement
- else if ( drag.dragging || ( data.which>0 && event.which!=data.which ) ||
- $( event.target ).is( data.not ) ) return;
- // handle various events
- switch ( event.type ){
- // mousedown, left click, event.target is not restricted, init dragging
- case 'mousedown':
- returned = hijack(event, "beforedragstart", elem);
- if (returned === false)
- return true;
- $.extend( data, $( elem ).offset(), {
- elem: elem, target: event.target,
- pageX: event.pageX, pageY: event.pageY
- }); // store some initial attributes
- $event.add( document, "mousemove mouseup", handler, data );
- selectable( elem, false ); // disable text selection
- drag.dragging = null; // pending state
- return false; // prevents text selection in safari
- // mousemove, check distance, start dragging
- case !drag.dragging && 'mousemove':
- if ( squared( event.pageX-data.pageX )
- + squared( event.pageY-data.pageY ) // xІ + yІ = distanceІ
- < data.distance ) break; // distance tolerance not reached
- event.target = data.target; // force target from "mousedown" event (fix distance issue)
- returned = hijack( event, "dragstart", elem ); // trigger "dragstart", return proxy element
- if ( returned !== false ){ // "dragstart" not rejected
- drag.dragging = elem; // activate element
- drag.proxy = event.dragProxy = $( returned || elem )[0]; // set proxy
- }
- // mousemove, dragging
- case 'mousemove':
- if ( drag.dragging ){
- returned = hijack( event, "drag", elem ); // trigger "drag"
- if ( $special.drop ){ // manage drop events
- $special.drop.allowed = ( returned !== false ); // prevent drop
- $special.drop.handler( event ); // "dropstart", "dropend"
- }
- if ( returned !== false ) break; // "drag" not rejected, stop
- event.type = "mouseup"; // helps "drop" handler behave
- }
- // mouseup, stop dragging
- case 'mouseup':
- if (drag.dragging === false) break;
- $event.remove( document, "mousemove mouseup", handler ); // remove page events
- if ( drag.dragging ){
- if ( $special.drop ) $special.drop.handler( event ); // "drop"
- hijack( event, "dragend", elem ); // trigger "dragend"
- }
- selectable( elem, true ); // enable text selection
- drag.dragging = drag.proxy = data.elem = false; // deactivate element
- break;
- }
- return true;
- };
-
-// set event type to custom value, and handle it
-function hijack ( event, type, elem ){
- event.type = type; // force the event type
- var result = $.event.handle.call( elem, event );
- return result===false ? false : result || event.result;
- };
-
-// return the value squared
-function squared ( value ){ return Math.pow( value, 2 ); };
-
-// suppress default dragstart IE events...
-function dontStart(){ return ( drag.dragging === false ); };
-
-// toggles text selection attributes
-function selectable ( elem, bool ){
- if ( !elem ) return; // maybe element was removed ?
- elem.unselectable = bool ? "off" : "on"; // IE
- elem.onselectstart = function(){ return bool; }; // IE
- //if ( document.selection && document.selection.empty ) document.selection.empty(); // IE
- if ( elem.style ) elem.style.MozUserSelect = bool ? "" : "none"; // FF
- };
-
-/*******************************************************************************************/
-})( jQuery ); // confine scope \ No newline at end of file