Subversion Repositories Sites.obs-saisons.fr

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
40 aurelien 1
/*!
2
 * jQuery UI Mouse 1.8.5
3
 *
4
 * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
5
 * Dual licensed under the MIT or GPL Version 2 licenses.
6
 * http://jquery.org/license
7
 *
8
 * http://docs.jquery.com/UI/Mouse
9
 *
10
 * Depends:
11
 *	jquery.ui.widget.js
12
 */
13
(function( $, undefined ) {
14
 
15
$.widget("ui.mouse", {
16
	options: {
17
		cancel: ':input,option',
18
		distance: 1,
19
		delay: 0
20
	},
21
	_mouseInit: function() {
22
		var self = this;
23
 
24
		this.element
25
			.bind('mousedown.'+this.widgetName, function(event) {
26
				return self._mouseDown(event);
27
			})
28
			.bind('click.'+this.widgetName, function(event) {
29
				if(self._preventClickEvent) {
30
					self._preventClickEvent = false;
31
					event.stopImmediatePropagation();
32
					return false;
33
				}
34
			});
35
 
36
		this.started = false;
37
	},
38
 
39
	// TODO: make sure destroying one instance of mouse doesn't mess with
40
	// other instances of mouse
41
	_mouseDestroy: function() {
42
		this.element.unbind('.'+this.widgetName);
43
	},
44
 
45
	_mouseDown: function(event) {
46
		// don't let more than one widget handle mouseStart
47
		// TODO: figure out why we have to use originalEvent
48
		event.originalEvent = event.originalEvent || {};
49
		if (event.originalEvent.mouseHandled) { return; }
50
 
51
		// we may have missed mouseup (out of window)
52
		(this._mouseStarted && this._mouseUp(event));
53
 
54
		this._mouseDownEvent = event;
55
 
56
		var self = this,
57
			btnIsLeft = (event.which == 1),
58
			elIsCancel = (typeof this.options.cancel == "string" ? $(event.target).parents().add(event.target).filter(this.options.cancel).length : false);
59
		if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
60
			return true;
61
		}
62
 
63
		this.mouseDelayMet = !this.options.delay;
64
		if (!this.mouseDelayMet) {
65
			this._mouseDelayTimer = setTimeout(function() {
66
				self.mouseDelayMet = true;
67
			}, this.options.delay);
68
		}
69
 
70
		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
71
			this._mouseStarted = (this._mouseStart(event) !== false);
72
			if (!this._mouseStarted) {
73
				event.preventDefault();
74
				return true;
75
			}
76
		}
77
 
78
		// these delegates are required to keep context
79
		this._mouseMoveDelegate = function(event) {
80
			return self._mouseMove(event);
81
		};
82
		this._mouseUpDelegate = function(event) {
83
			return self._mouseUp(event);
84
		};
85
		$(document)
86
			.bind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
87
			.bind('mouseup.'+this.widgetName, this._mouseUpDelegate);
88
 
89
		// preventDefault() is used to prevent the selection of text here -
90
		// however, in Safari, this causes select boxes not to be selectable
91
		// anymore, so this fix is needed
92
		($.browser.safari || event.preventDefault());
93
 
94
		event.originalEvent.mouseHandled = true;
95
		return true;
96
	},
97
 
98
	_mouseMove: function(event) {
99
		// IE mouseup check - mouseup happened when mouse was out of window
100
		if ($.browser.msie && !event.button) {
101
			return this._mouseUp(event);
102
		}
103
 
104
		if (this._mouseStarted) {
105
			this._mouseDrag(event);
106
			return event.preventDefault();
107
		}
108
 
109
		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
110
			this._mouseStarted =
111
				(this._mouseStart(this._mouseDownEvent, event) !== false);
112
			(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
113
		}
114
 
115
		return !this._mouseStarted;
116
	},
117
 
118
	_mouseUp: function(event) {
119
		$(document)
120
			.unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
121
			.unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);
122
 
123
		if (this._mouseStarted) {
124
			this._mouseStarted = false;
125
			this._preventClickEvent = (event.target == this._mouseDownEvent.target);
126
			this._mouseStop(event);
127
		}
128
 
129
		return false;
130
	},
131
 
132
	_mouseDistanceMet: function(event) {
133
		return (Math.max(
134
				Math.abs(this._mouseDownEvent.pageX - event.pageX),
135
				Math.abs(this._mouseDownEvent.pageY - event.pageY)
136
			) >= this.options.distance
137
		);
138
	},
139
 
140
	_mouseDelayMet: function(event) {
141
		return this.mouseDelayMet;
142
	},
143
 
144
	// These are placeholder methods, to be overriden by extending plugin
145
	_mouseStart: function(event) {},
146
	_mouseDrag: function(event) {},
147
	_mouseStop: function(event) {},
148
	_mouseCapture: function(event) { return true; }
149
});
150
 
151
})(jQuery);