Project

General

Profile

1
/*!
2
 * jQuery UI Mouse 1.9.1
3
 * http://jqueryui.com
4
 *
5
 * Copyright 2012 jQuery Foundation and other contributors
6
 * Released under the MIT license.
7
 * http://jquery.org/license
8
 *
9
 * http://api.jqueryui.com/mouse/
10
 *
11
 * Depends:
12
 *	jquery.ui.widget.js
13
 */
14
(function( $, undefined ) {
15

    
16
var mouseHandled = false;
17
$( document ).mouseup( function( e ) {
18
	mouseHandled = false;
19
});
20

    
21
$.widget("ui.mouse", {
22
	version: "1.9.1",
23
	options: {
24
		cancel: 'input,textarea,button,select,option',
25
		distance: 1,
26
		delay: 0
27
	},
28
	_mouseInit: function() {
29
		var that = this;
30

    
31
		this.element
32
			.bind('mousedown.'+this.widgetName, function(event) {
33
				return that._mouseDown(event);
34
			})
35
			.bind('click.'+this.widgetName, function(event) {
36
				if (true === $.data(event.target, that.widgetName + '.preventClickEvent')) {
37
					$.removeData(event.target, that.widgetName + '.preventClickEvent');
38
					event.stopImmediatePropagation();
39
					return false;
40
				}
41
			});
42

    
43
		this.started = false;
44
	},
45

    
46
	// TODO: make sure destroying one instance of mouse doesn't mess with
47
	// other instances of mouse
48
	_mouseDestroy: function() {
49
		this.element.unbind('.'+this.widgetName);
50
		if ( this._mouseMoveDelegate ) {
51
			$(document)
52
				.unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
53
				.unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);
54
		}
55
	},
56

    
57
	_mouseDown: function(event) {
58
		// don't let more than one widget handle mouseStart
59
		if( mouseHandled ) { return; }
60

    
61
		// we may have missed mouseup (out of window)
62
		(this._mouseStarted && this._mouseUp(event));
63

    
64
		this._mouseDownEvent = event;
65

    
66
		var that = this,
67
			btnIsLeft = (event.which === 1),
68
			// event.target.nodeName works around a bug in IE 8 with
69
			// disabled inputs (#7620)
70
			elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
71
		if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
72
			return true;
73
		}
74

    
75
		this.mouseDelayMet = !this.options.delay;
76
		if (!this.mouseDelayMet) {
77
			this._mouseDelayTimer = setTimeout(function() {
78
				that.mouseDelayMet = true;
79
			}, this.options.delay);
80
		}
81

    
82
		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
83
			this._mouseStarted = (this._mouseStart(event) !== false);
84
			if (!this._mouseStarted) {
85
				event.preventDefault();
86
				return true;
87
			}
88
		}
89

    
90
		// Click event may never have fired (Gecko & Opera)
91
		if (true === $.data(event.target, this.widgetName + '.preventClickEvent')) {
92
			$.removeData(event.target, this.widgetName + '.preventClickEvent');
93
		}
94

    
95
		// these delegates are required to keep context
96
		this._mouseMoveDelegate = function(event) {
97
			return that._mouseMove(event);
98
		};
99
		this._mouseUpDelegate = function(event) {
100
			return that._mouseUp(event);
101
		};
102
		$(document)
103
			.bind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
104
			.bind('mouseup.'+this.widgetName, this._mouseUpDelegate);
105

    
106
		event.preventDefault();
107

    
108
		mouseHandled = true;
109
		return true;
110
	},
111

    
112
	_mouseMove: function(event) {
113
		// IE mouseup check - mouseup happened when mouse was out of window
114
		if ($.ui.ie && !(document.documentMode >= 9) && !event.button) {
115
			return this._mouseUp(event);
116
		}
117

    
118
		if (this._mouseStarted) {
119
			this._mouseDrag(event);
120
			return event.preventDefault();
121
		}
122

    
123
		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
124
			this._mouseStarted =
125
				(this._mouseStart(this._mouseDownEvent, event) !== false);
126
			(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
127
		}
128

    
129
		return !this._mouseStarted;
130
	},
131

    
132
	_mouseUp: function(event) {
133
		$(document)
134
			.unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
135
			.unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);
136

    
137
		if (this._mouseStarted) {
138
			this._mouseStarted = false;
139

    
140
			if (event.target === this._mouseDownEvent.target) {
141
				$.data(event.target, this.widgetName + '.preventClickEvent', true);
142
			}
143

    
144
			this._mouseStop(event);
145
		}
146

    
147
		return false;
148
	},
149

    
150
	_mouseDistanceMet: function(event) {
151
		return (Math.max(
152
				Math.abs(this._mouseDownEvent.pageX - event.pageX),
153
				Math.abs(this._mouseDownEvent.pageY - event.pageY)
154
			) >= this.options.distance
155
		);
156
	},
157

    
158
	_mouseDelayMet: function(event) {
159
		return this.mouseDelayMet;
160
	},
161

    
162
	// These are placeholder methods, to be overriden by extending plugin
163
	_mouseStart: function(event) {},
164
	_mouseDrag: function(event) {},
165
	_mouseStop: function(event) {},
166
	_mouseCapture: function(event) { return true; }
167
});
168

    
169
})(jQuery);
(25-25/35)