/*! * jQuery UI Mouse 1.8.23 * * Copyright 2012, 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) { var mouseHandled = false; $(document).mouseup(function (e) { mouseHandled = false; }); $.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); if (this._mouseMoveDelegate) { $(document) .unbind('mousemove.' + this.widgetName, this._mouseMoveDelegate) .unbind('mouseup.' + this.widgetName, this._mouseUpDelegate); } }, _mouseDown:function (event) { // don't let more than one widget handle mouseStart if (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), // event.target.nodeName works around a bug in IE 8 with // disabled inputs (#7620) elIsCancel = (typeof this.options.cancel == "string" && event.target.nodeName ? $(event.target).closest(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; } } // Click event may never have fired (Gecko & Opera) if (true === $.data(event.target, this.widgetName + '.preventClickEvent')) { $.removeData(event.target, this.widgetName + '.preventClickEvent'); } // 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(); 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);