JAVASCRIPT   3

mouse.js

Guest on 20th July 2021 03:20:02 PM

  1. /*!
  2.  * jQuery UI Mouse 1.12.1
  3.  * http://jqueryui.com
  4.  *
  5.  * Copyright jQuery Foundation and other contributors
  6.  * Released under the MIT license.
  7.  * http://jquery.org/license
  8.  */
  9.  
  10. //>>label: Mouse
  11. //>>group: Widgets
  12. //>>description: Abstracts mouse-based interactions to assist in creating certain widgets.
  13. //>>docs: http://api.jqueryui.com/mouse/
  14.  
  15. ( function( factory ) {
  16.         if ( typeof define === "function" && define.amd ) {
  17.  
  18.                 // AMD. Register as an anonymous module.
  19.                 define( [
  20.                         "jquery",
  21.                         "./core"
  22.                 ], factory );
  23.         } else {
  24.  
  25.                 // Browser globals
  26.                 factory( jQuery );
  27.         }
  28. }( function( $ ) {
  29.  
  30. var mouseHandled = false;
  31. $( document ).on( "mouseup", function() {
  32.         mouseHandled = false;
  33. } );
  34.  
  35. return $.widget( "ui.mouse", {
  36.         version: "1.12.1",
  37.         options: {
  38.                 cancel: "input, textarea, button, select, option",
  39.                 distance: 1,
  40.                 delay: 0
  41.         },
  42.         _mouseInit: function() {
  43.                 var that = this;
  44.  
  45.                 this.element
  46.                         .on( "mousedown." + this.widgetName, function( event ) {
  47.                                 return that._mouseDown( event );
  48.                         } )
  49.                         .on( "click." + this.widgetName, function( event ) {
  50.                                 if ( true === $.data( event.target, that.widgetName + ".preventClickEvent" ) ) {
  51.                                         $.removeData( event.target, that.widgetName + ".preventClickEvent" );
  52.                                         event.stopImmediatePropagation();
  53.                                         return false;
  54.                                 }
  55.                         } );
  56.  
  57.                 this.started = false;
  58.         },
  59.  
  60.         // TODO: make sure destroying one instance of mouse doesn't mess with
  61.         // other instances of mouse
  62.         _mouseDestroy: function() {
  63.                 this.element.off( "." + this.widgetName );
  64.                 if ( this._mouseMoveDelegate ) {
  65.                         this.document
  66.                                 .off( "mousemove." + this.widgetName, this._mouseMoveDelegate )
  67.                                 .off( "mouseup." + this.widgetName, this._mouseUpDelegate );
  68.                 }
  69.         },
  70.  
  71.         _mouseDown: function( event ) {
  72.  
  73.                 // don't let more than one widget handle mouseStart
  74.                 if ( mouseHandled ) {
  75.                         return;
  76.                 }
  77.  
  78.                 this._mouseMoved = false;
  79.  
  80.                 // We may have missed mouseup (out of window)
  81.                 ( this._mouseStarted && this._mouseUp( event ) );
  82.  
  83.                 this._mouseDownEvent = event;
  84.  
  85.                 var that = this,
  86.                         btnIsLeft = ( event.which === 1 ),
  87.  
  88.                         // event.target.nodeName works around a bug in IE 8 with
  89.                         // disabled inputs (#7620)
  90.                         elIsCancel = ( typeof this.options.cancel === "string" && event.target.nodeName ?
  91.                                 $( event.target ).closest( this.options.cancel ).length : false );
  92.                 if ( !btnIsLeft || elIsCancel || !this._mouseCapture( event ) ) {
  93.                         return true;
  94.                 }
  95.  
  96.                 this.mouseDelayMet = !this.options.delay;
  97.                 if ( !this.mouseDelayMet ) {
  98.                         this._mouseDelayTimer = setTimeout( function() {
  99.                                 that.mouseDelayMet = true;
  100.                         }, this.options.delay );
  101.                 }
  102.  
  103.                 if ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {
  104.                         this._mouseStarted = ( this._mouseStart( event ) !== false );
  105.                         if ( !this._mouseStarted ) {
  106.                                 event.preventDefault();
  107.                                 return true;
  108.                         }
  109.                 }
  110.  
  111.                 // Click event may never have fired (Gecko & Opera)
  112.                 if ( true === $.data( event.target, this.widgetName + ".preventClickEvent" ) ) {
  113.                         $.removeData( event.target, this.widgetName + ".preventClickEvent" );
  114.                 }
  115.  
  116.                 // These delegates are required to keep context
  117.                 this._mouseMoveDelegate = function( event ) {
  118.                         return that._mouseMove( event );
  119.                 };
  120.                 this._mouseUpDelegate = function( event ) {
  121.                         return that._mouseUp( event );
  122.                 };
  123.  
  124.                 this.document
  125.                         .on( "mousemove." + this.widgetName, this._mouseMoveDelegate )
  126.                         .on( "mouseup." + this.widgetName, this._mouseUpDelegate );
  127.  
  128.                 event.preventDefault();
  129.  
  130.                 mouseHandled = true;
  131.                 return true;
  132.         },
  133.  
  134.         _mouseMove: function( event ) {
  135.  
  136.                 // Only check for mouseups outside the document if you've moved inside the document
  137.                 // at least once. This prevents the firing of mouseup in the case of IE<9, which will
  138.                 // fire a mousemove event if content is placed under the cursor. See #7778
  139.                 // Support: IE <9
  140.                 if ( this._mouseMoved ) {
  141.  
  142.                         // IE mouseup check - mouseup happened when mouse was out of window
  143.                         if ( $.ui.ie && ( !document.documentMode || document.documentMode < 9 ) &&
  144.                                         !event.button ) {
  145.                                 return this._mouseUp( event );
  146.  
  147.                         // Iframe mouseup check - mouseup occurred in another document
  148.                         } else if ( !event.which ) {
  149.  
  150.                                 // Support: Safari <=8 - 9
  151.                                 // Safari sets which to 0 if you press any of the following keys
  152.                                 // during a drag (#14461)
  153.                                 if ( event.originalEvent.altKey || event.originalEvent.ctrlKey ||
  154.                                                 event.originalEvent.metaKey || event.originalEvent.shiftKey ) {
  155.                                         this.ignoreMissingWhich = true;
  156.                                 } else if ( !this.ignoreMissingWhich ) {
  157.                                         return this._mouseUp( event );
  158.                                 }
  159.                         }
  160.                 }
  161.  
  162.                 if ( event.which || event.button ) {
  163.                         this._mouseMoved = true;
  164.                 }
  165.  
  166.                 if ( this._mouseStarted ) {
  167.                         this._mouseDrag( event );
  168.                         return event.preventDefault();
  169.                 }
  170.  
  171.                 if ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {
  172.                         this._mouseStarted =
  173.                                 ( this._mouseStart( this._mouseDownEvent, event ) !== false );
  174.                         ( this._mouseStarted ? this._mouseDrag( event ) : this._mouseUp( event ) );
  175.                 }
  176.  
  177.                 return !this._mouseStarted;
  178.         },
  179.  
  180.         _mouseUp: function( event ) {
  181.                 this.document
  182.                         .off( "mousemove." + this.widgetName, this._mouseMoveDelegate )
  183.                         .off( "mouseup." + this.widgetName, this._mouseUpDelegate );
  184.  
  185.                 if ( this._mouseStarted ) {
  186.                         this._mouseStarted = false;
  187.  
  188.                         if ( event.target === this._mouseDownEvent.target ) {
  189.                                 $.data( event.target, this.widgetName + ".preventClickEvent", true );
  190.                         }
  191.  
  192.                         this._mouseStop( event );
  193.                 }
  194.  
  195.                 if ( this._mouseDelayTimer ) {
  196.                         clearTimeout( this._mouseDelayTimer );
  197.                         delete this._mouseDelayTimer;
  198.                 }
  199.  
  200.                 this.ignoreMissingWhich = false;
  201.                 mouseHandled = false;
  202.                 event.preventDefault();
  203.         },
  204.  
  205.         _mouseDistanceMet: function( event ) {
  206.                 return ( Math.max(
  207.                                 Math.abs( this._mouseDownEvent.pageX - event.pageX ),
  208.                                 Math.abs( this._mouseDownEvent.pageY - event.pageY )
  209.                         ) >= this.options.distance
  210.                 );
  211.         },
  212.  
  213.         _mouseDelayMet: function( /* event */ ) {
  214.                 return this.mouseDelayMet;
  215.         },
  216.  
  217.         // These are placeholder methods, to be overriden by extending plugin
  218.         _mouseStart: function( /* event */ ) {},
  219.         _mouseDrag: function( /* event */ ) {},
  220.         _mouseStop: function( /* event */ ) {},
  221.         _mouseCapture: function( /* event */ ) { return true; }
  222. } );
  223.  
  224. } ) );

Raw Paste


Login or Register to edit or fork this paste. It's free.