/*! * jquery ui mouse 1.10.4 * http://jqueryui.com * * copyright 2014 jquery foundation and other contributors * released under the mit license. * http://jquery.org/license * * http://api.jqueryui.com/mouse/ * * depends: * jquery.ui.widget.js */ (function( $, undefined ) { var mousehandled = false; $( document ).mouseup( function() { mousehandled = false; }); $.widget("ui.mouse", { version: "1.10.4", options: { cancel: "input,textarea,button,select,option", distance: 1, delay: 0 }, _mouseinit: function() { var that = this; this.element .bind("mousedown."+this.widgetname, function(event) { return that._mousedown(event); }) .bind("click."+this.widgetname, function(event) { if (true === $.data(event.target, that.widgetname + ".preventclickevent")) { $.removedata(event.target, that.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 that = 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() { that.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 that._mousemove(event); }; this._mouseupdelegate = function(event) { return that._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 ($.ui.ie && ( !document.documentmode || 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);