WordPress.org

Make WordPress Core

Ticket #20014: 20014-touch-punch.patch

File 20014-touch-punch.patch, 8.9 KB (added by azaozz, 6 years ago)
  • wp-includes/js/jquery/jquery.ui.touch-punch.dev.js

     
     1/*!
     2 * jQuery UI Touch Punch 0.2.2
     3 *
     4 * Copyright 2011, Dave Furfero
     5 * Dual licensed under the MIT or GPL Version 2 licenses.
     6 *
     7 * Depends:
     8 *  jquery.ui.widget.js
     9 *  jquery.ui.mouse.js
     10 */
     11(function ($) {
     12
     13  // Detect touch support
     14  $.support.touch = 'ontouchend' in document;
     15
     16  // Ignore browsers without touch support
     17  if (!$.support.touch) {
     18    return;
     19  }
     20
     21  var mouseProto = $.ui.mouse.prototype,
     22      _mouseInit = mouseProto._mouseInit,
     23      touchHandled;
     24
     25  /**
     26   * Simulate a mouse event based on a corresponding touch event
     27   * @param {Object} event A touch event
     28   * @param {String} simulatedType The corresponding mouse event
     29   */
     30  function simulateMouseEvent (event, simulatedType) {
     31
     32    // Ignore multi-touch events
     33    if (event.originalEvent.touches.length > 1) {
     34      return;
     35    }
     36
     37    event.preventDefault();
     38
     39    var touch = event.originalEvent.changedTouches[0],
     40        simulatedEvent = document.createEvent('MouseEvents');
     41   
     42    // Initialize the simulated mouse event using the touch event's coordinates
     43    simulatedEvent.initMouseEvent(
     44      simulatedType,    // type
     45      true,             // bubbles                   
     46      true,             // cancelable                 
     47      window,           // view                       
     48      1,                // detail                     
     49      touch.screenX,    // screenX                   
     50      touch.screenY,    // screenY                   
     51      touch.clientX,    // clientX                   
     52      touch.clientY,    // clientY                   
     53      false,            // ctrlKey                   
     54      false,            // altKey                     
     55      false,            // shiftKey                   
     56      false,            // metaKey                   
     57      0,                // button                     
     58      null              // relatedTarget             
     59    );
     60
     61    // Dispatch the simulated event to the target element
     62    event.target.dispatchEvent(simulatedEvent);
     63  }
     64
     65  /**
     66   * Handle the jQuery UI widget's touchstart events
     67   * @param {Object} event The widget element's touchstart event
     68   */
     69  mouseProto._touchStart = function (event) {
     70
     71    var self = this;
     72
     73    // Ignore the event if another widget is already being handled
     74    if (touchHandled || !self._mouseCapture(event.originalEvent.changedTouches[0])) {
     75      return;
     76    }
     77
     78    // Set the flag to prevent other widgets from inheriting the touch event
     79    touchHandled = true;
     80
     81    // Track movement to determine if interaction was a click
     82    self._touchMoved = false;
     83
     84    // Simulate the mouseover event
     85    simulateMouseEvent(event, 'mouseover');
     86
     87    // Simulate the mousemove event
     88    simulateMouseEvent(event, 'mousemove');
     89
     90    // Simulate the mousedown event
     91    simulateMouseEvent(event, 'mousedown');
     92  };
     93
     94  /**
     95   * Handle the jQuery UI widget's touchmove events
     96   * @param {Object} event The document's touchmove event
     97   */
     98  mouseProto._touchMove = function (event) {
     99
     100    // Ignore event if not handled
     101    if (!touchHandled) {
     102      return;
     103    }
     104
     105    // Interaction was not a click
     106    this._touchMoved = true;
     107
     108    // Simulate the mousemove event
     109    simulateMouseEvent(event, 'mousemove');
     110  };
     111
     112  /**
     113   * Handle the jQuery UI widget's touchend events
     114   * @param {Object} event The document's touchend event
     115   */
     116  mouseProto._touchEnd = function (event) {
     117
     118    // Ignore event if not handled
     119    if (!touchHandled) {
     120      return;
     121    }
     122
     123    // Simulate the mouseup event
     124    simulateMouseEvent(event, 'mouseup');
     125
     126    // Simulate the mouseout event
     127    simulateMouseEvent(event, 'mouseout');
     128
     129    // If the touch interaction did not move, it should trigger a click
     130    if (!this._touchMoved) {
     131
     132      // Simulate the click event
     133      simulateMouseEvent(event, 'click');
     134    }
     135
     136    // Unset the flag to allow other widgets to inherit the touch event
     137    touchHandled = false;
     138  };
     139
     140  /**
     141   * A duck punch of the $.ui.mouse _mouseInit method to support touch events.
     142   * This method extends the widget with bound touch event handlers that
     143   * translate touch events to mouse events and pass them to the widget's
     144   * original mouse event handling methods.
     145   */
     146  mouseProto._mouseInit = function () {
     147   
     148    var self = this;
     149
     150    // Delegate the touch handlers to the widget's element
     151    self.element
     152      .bind('touchstart', $.proxy(self, '_touchStart'))
     153      .bind('touchmove', $.proxy(self, '_touchMove'))
     154      .bind('touchend', $.proxy(self, '_touchEnd'));
     155
     156    // Call the original $.ui.mouse init method
     157    _mouseInit.call(self);
     158  };
     159
     160})(jQuery);
  • wp-includes/js/jquery/jquery.ui.touch-punch.dev.js

  • wp-includes/js/jquery/jquery.ui.touch-punch.js

    Property changes on: wp-includes/js/jquery/jquery.ui.touch-punch.dev.js
    ___________________________________________________________________
    Added: svn:eol-style
    ## -0,0 +1 ##
    +native
    \ No newline at end of property
     
     1/*
     2 * jQuery UI Touch Punch 0.2.2
     3 *
     4 * Copyright 2011, Dave Furfero
     5 * Dual licensed under the MIT or GPL Version 2 licenses.
     6 *
     7 * Depends:
     8 *  jquery.ui.widget.js
     9 *  jquery.ui.mouse.js
     10 */
     11(function(b){b.support.touch="ontouchend" in document;if(!b.support.touch){return;}var c=b.ui.mouse.prototype,e=c._mouseInit,a;function d(g,h){if(g.originalEvent.touches.length>1){return;}g.preventDefault();var i=g.originalEvent.changedTouches[0],f=document.createEvent("MouseEvents");f.initMouseEvent(h,true,true,window,1,i.screenX,i.screenY,i.clientX,i.clientY,false,false,false,false,0,null);g.target.dispatchEvent(f);}c._touchStart=function(g){var f=this;if(a||!f._mouseCapture(g.originalEvent.changedTouches[0])){return;}a=true;f._touchMoved=false;d(g,"mouseover");d(g,"mousemove");d(g,"mousedown");};c._touchMove=function(f){if(!a){return;}this._touchMoved=true;d(f,"mousemove");};c._touchEnd=function(f){if(!a){return;}d(f,"mouseup");d(f,"mouseout");if(!this._touchMoved){d(f,"click");}a=false;};c._mouseInit=function(){var f=this;f.element.bind("touchstart",b.proxy(f,"_touchStart")).bind("touchmove",b.proxy(f,"_touchMove")).bind("touchend",b.proxy(f,"_touchEnd"));e.call(f);};})(jQuery);
  • wp-includes/js/jquery/jquery.ui.touch-punch.js

  • wp-includes/script-loader.php

    Property changes on: wp-includes/js/jquery/jquery.ui.touch-punch.js
    ___________________________________________________________________
    Added: svn:eol-style
    ## -0,0 +1 ##
    +native
    \ No newline at end of property
     
    157157        // deprecated, not used in core, most functionality is included in jQuery 1.3
    158158        $scripts->add( 'jquery-form', "/wp-includes/js/jquery/jquery.form$suffix.js", array('jquery'), '2.73', 1 );
    159159
     160        // jQuery plugins
    160161        $scripts->add( 'jquery-color', "/wp-includes/js/jquery/jquery.color$suffix.js", array('jquery'), '2.0-4561m', 1 );
    161162        $scripts->add( 'suggest', "/wp-includes/js/jquery/suggest$suffix.js", array('jquery'), '1.1-20110113', 1 );
    162163        $scripts->add( 'schedule', '/wp-includes/js/jquery/jquery.schedule.js', array('jquery'), '20m', 1 );
     
    165166        $scripts->add( 'jquery-hotkeys', "/wp-includes/js/jquery/jquery.hotkeys$suffix.js", array('jquery'), '0.0.2m', 1 );
    166167        $scripts->add( 'jquery-table-hotkeys', "/wp-includes/js/jquery/jquery.table-hotkeys$suffix.js", array('jquery', 'jquery-hotkeys'), false, 1 );
    167168        $scripts->add( 'jquery-postmessage', "/wp-includes/js/jquery/jquery.postmessage$suffix.js", array('jquery'), '0.5', 1 );
    168 
    169169        $scripts->add( 'jquery-masonry', "/wp-includes/js/jquery/jquery.masonry$suffix.js", array('jquery'), '2.1.02', 1 );
     170        $scripts->add( 'jquery-touch-punch', "/wp-includes/js/jquery/jquery.ui.touch-punch$suffix.js", array('jquery-ui-widget', 'jquery-ui-mouse'), '0.2.2', 1 );
    170171
    171172        $scripts->add( 'thickbox', "/wp-includes/js/thickbox/thickbox.js", array('jquery'), '3.1-20111117', 1 );
    172173        $scripts->localize( 'thickbox', 'thickboxL10n', array(