forked from GNUsocial/gnu-social
		
	
		
			
	
	
		
			152 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			152 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|   | /*! | ||
|  |  * jQuery UI Mouse 1.8.10 | ||
|  |  * | ||
|  |  * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 | ||
|  |  * Dual licensed under the MIT or GPL Version 2 licenses. | ||
|  |  * http://jquery.org/license
 | ||
|  |  * | ||
|  |  * http://docs.jquery.com/UI/Mouse
 | ||
|  |  * | ||
|  |  * Depends: | ||
|  |  *	jquery.ui.widget.js | ||
|  |  */ | ||
|  | (function( $, undefined ) { | ||
|  | 
 | ||
|  | $.widget("ui.mouse", { | ||
|  | 	options: { | ||
|  | 		cancel: ':input,option', | ||
|  | 		distance: 1, | ||
|  | 		delay: 0 | ||
|  | 	}, | ||
|  | 	_mouseInit: function() { | ||
|  | 		var self = this; | ||
|  | 
 | ||
|  | 		this.element | ||
|  | 			.bind('mousedown.'+this.widgetName, function(event) { | ||
|  | 				return self._mouseDown(event); | ||
|  | 			}) | ||
|  | 			.bind('click.'+this.widgetName, function(event) { | ||
|  | 				if (true === $.data(event.target, self.widgetName + '.preventClickEvent')) { | ||
|  | 				    $.removeData(event.target, self.widgetName + '.preventClickEvent'); | ||
|  | 					event.stopImmediatePropagation(); | ||
|  | 					return false; | ||
|  | 				} | ||
|  | 			}); | ||
|  | 
 | ||
|  | 		this.started = false; | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	// TODO: make sure destroying one instance of mouse doesn't mess with
 | ||
|  | 	// other instances of mouse
 | ||
|  | 	_mouseDestroy: function() { | ||
|  | 		this.element.unbind('.'+this.widgetName); | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	_mouseDown: function(event) { | ||
|  | 		// don't let more than one widget handle mouseStart
 | ||
|  | 		// TODO: figure out why we have to use originalEvent
 | ||
|  | 		event.originalEvent = event.originalEvent || {}; | ||
|  | 		if (event.originalEvent.mouseHandled) { return; } | ||
|  | 
 | ||
|  | 		// we may have missed mouseup (out of window)
 | ||
|  | 		(this._mouseStarted && this._mouseUp(event)); | ||
|  | 
 | ||
|  | 		this._mouseDownEvent = event; | ||
|  | 
 | ||
|  | 		var self = this, | ||
|  | 			btnIsLeft = (event.which == 1), | ||
|  | 			elIsCancel = (typeof this.options.cancel == "string" ? $(event.target).parents().add(event.target).filter(this.options.cancel).length : false); | ||
|  | 		if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) { | ||
|  | 			return true; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		this.mouseDelayMet = !this.options.delay; | ||
|  | 		if (!this.mouseDelayMet) { | ||
|  | 			this._mouseDelayTimer = setTimeout(function() { | ||
|  | 				self.mouseDelayMet = true; | ||
|  | 			}, this.options.delay); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { | ||
|  | 			this._mouseStarted = (this._mouseStart(event) !== false); | ||
|  | 			if (!this._mouseStarted) { | ||
|  | 				event.preventDefault(); | ||
|  | 				return true; | ||
|  | 			} | ||
|  | 		} | ||
|  | 
 | ||
|  | 		// these delegates are required to keep context
 | ||
|  | 		this._mouseMoveDelegate = function(event) { | ||
|  | 			return self._mouseMove(event); | ||
|  | 		}; | ||
|  | 		this._mouseUpDelegate = function(event) { | ||
|  | 			return self._mouseUp(event); | ||
|  | 		}; | ||
|  | 		$(document) | ||
|  | 			.bind('mousemove.'+this.widgetName, this._mouseMoveDelegate) | ||
|  | 			.bind('mouseup.'+this.widgetName, this._mouseUpDelegate); | ||
|  | 
 | ||
|  | 		event.preventDefault(); | ||
|  | 		event.originalEvent.mouseHandled = true; | ||
|  | 		return true; | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	_mouseMove: function(event) { | ||
|  | 		// IE mouseup check - mouseup happened when mouse was out of window
 | ||
|  | 		if ($.browser.msie && !(document.documentMode >= 9) && !event.button) { | ||
|  | 			return this._mouseUp(event); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if (this._mouseStarted) { | ||
|  | 			this._mouseDrag(event); | ||
|  | 			return event.preventDefault(); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { | ||
|  | 			this._mouseStarted = | ||
|  | 				(this._mouseStart(this._mouseDownEvent, event) !== false); | ||
|  | 			(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event)); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		return !this._mouseStarted; | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	_mouseUp: function(event) { | ||
|  | 		$(document) | ||
|  | 			.unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate) | ||
|  | 			.unbind('mouseup.'+this.widgetName, this._mouseUpDelegate); | ||
|  | 
 | ||
|  | 		if (this._mouseStarted) { | ||
|  | 			this._mouseStarted = false; | ||
|  | 
 | ||
|  | 			if (event.target == this._mouseDownEvent.target) { | ||
|  | 			    $.data(event.target, this.widgetName + '.preventClickEvent', true); | ||
|  | 			} | ||
|  | 
 | ||
|  | 			this._mouseStop(event); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		return false; | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	_mouseDistanceMet: function(event) { | ||
|  | 		return (Math.max( | ||
|  | 				Math.abs(this._mouseDownEvent.pageX - event.pageX), | ||
|  | 				Math.abs(this._mouseDownEvent.pageY - event.pageY) | ||
|  | 			) >= this.options.distance | ||
|  | 		); | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	_mouseDelayMet: function(event) { | ||
|  | 		return this.mouseDelayMet; | ||
|  | 	}, | ||
|  | 
 | ||
|  | 	// These are placeholder methods, to be overriden by extending plugin
 | ||
|  | 	_mouseStart: function(event) {}, | ||
|  | 	_mouseDrag: function(event) {}, | ||
|  | 	_mouseStop: function(event) {}, | ||
|  | 	_mouseCapture: function(event) { return true; } | ||
|  | }); | ||
|  | 
 | ||
|  | })(jQuery); |