WordPress.org

Make WordPress Core

Ticket #20014: 20014-touch-punch.patch

File 20014-touch-punch.patch, 8.9 KB (added by azaozz, 3 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(