Difference between revisions of "User:Moussekateer/vector.js"

From Team Fortress Wiki
Jump to: navigation, search
m (science)
m
Line 3: Line 3:
 
importScriptURI('https://raw.github.com/Moussekateer/TFWiki-scripts/master/wikifi_toolbox.js', 'text/javascript');
 
importScriptURI('https://raw.github.com/Moussekateer/TFWiki-scripts/master/wikifi_toolbox.js', 'text/javascript');
  
function touchHandler(event) {
 
    var touch = event.changedTouches[0];
 
  
    var simulatedEvent = document.createEvent("MouseEvent");
+
/*!
        simulatedEvent.initMouseEvent({
+
* jQuery UI Touch Punch 0.2.2
        touchstart: "mousedown",
+
*
        touchmove: "mousemove",
+
* Copyright 2011, Dave Furfero
        touchend: "mouseup"
+
* Dual licensed under the MIT or GPL Version 2 licenses.
    }[event.type], true, true, window, 1,
+
*
        touch.screenX, touch.screenY,
+
* Depends:
        touch.clientX, touch.clientY, false,
+
*  jquery.ui.widget.js
        false, false, false, 0, null);
+
*  jquery.ui.mouse.js
 +
*/
 +
(function ($) {
 +
 
 +
  // Detect touch support
 +
  $.support.touch = 'ontouchend' in document;
 +
 
 +
  // Ignore browsers without touch support
 +
  if (!$.support.touch) {
 +
    return;
 +
  }
 +
 
 +
  var mouseProto = $.ui.mouse.prototype,
 +
      _mouseInit = mouseProto._mouseInit,
 +
      touchHandled;
 +
 
 +
  /**
 +
  * Simulate a mouse event based on a corresponding touch event
 +
  * @param {Object} event A touch event
 +
  * @param {String} simulatedType The corresponding mouse event
 +
  */
 +
  function simulateMouseEvent (event, simulatedType) {
 +
 
 +
    // Ignore multi-touch events
 +
    if (event.originalEvent.touches.length > 1) {
 +
      return;
 +
    }
  
    touch.target.dispatchEvent(simulatedEvent);
 
 
     event.preventDefault();
 
     event.preventDefault();
}
 
  
function touchinit() {
+
    var touch = event.originalEvent.changedTouches[0],
     document.addEventListener("touchstart", touchHandler, true);
+
        simulatedEvent = document.createEvent('MouseEvents');
     document.addEventListener("touchmove", touchHandler, true);
+
   
     document.addEventListener("touchend", touchHandler, true);
+
    // Initialize the simulated mouse event using the touch event's coordinates
     document.addEventListener("touchcancel", touchHandler, true);
+
     simulatedEvent.initMouseEvent(
}
+
      simulatedType,   // type
 +
      true,             // bubbles                   
 +
      true,            // cancelable               
 +
      window,          // view                     
 +
      1,                // detail                   
 +
      touch.screenX,    // screenX                   
 +
      touch.screenY,    // screenY                   
 +
      touch.clientX,    // clientX                   
 +
      touch.clientY,    // clientY                   
 +
      false,            // ctrlKey                   
 +
      false,            // altKey                   
 +
      false,            // shiftKey                 
 +
      false,            // metaKey                   
 +
      0,                // button                   
 +
      null              // relatedTarget             
 +
    );
 +
 
 +
     // Dispatch the simulated event to the target element
 +
    event.target.dispatchEvent(simulatedEvent);
 +
  }
 +
 
 +
  /**
 +
  * Handle the jQuery UI widget's touchstart events
 +
  * @param {Object} event The widget element's touchstart event
 +
  */
 +
  mouseProto._touchStart = function (event) {
 +
 
 +
    var self = this;
 +
 
 +
    // Ignore the event if another widget is already being handled
 +
    if (touchHandled || !self._mouseCapture(event.originalEvent.changedTouches[0])) {
 +
      return;
 +
    }
 +
 
 +
    // Set the flag to prevent other widgets from inheriting the touch event
 +
    touchHandled = true;
 +
 
 +
    // Track movement to determine if interaction was a click
 +
    self._touchMoved = false;
 +
 
 +
    // Simulate the mouseover event
 +
    simulateMouseEvent(event, 'mouseover');
 +
 
 +
    // Simulate the mousemove event
 +
    simulateMouseEvent(event, 'mousemove');
 +
 
 +
    // Simulate the mousedown event
 +
     simulateMouseEvent(event, 'mousedown');
 +
  };
 +
 
 +
  /**
 +
  * Handle the jQuery UI widget's touchmove events
 +
  * @param {Object} event The document's touchmove event
 +
  */
 +
  mouseProto._touchMove = function (event) {
 +
 
 +
    // Ignore event if not handled
 +
    if (!touchHandled) {
 +
      return;
 +
    }
 +
 
 +
    // Interaction was not a click
 +
    this._touchMoved = true;
 +
 
 +
    // Simulate the mousemove event
 +
    simulateMouseEvent(event, 'mousemove');
 +
  };
 +
 
 +
  /**
 +
  * Handle the jQuery UI widget's touchend events
 +
  * @param {Object} event The document's touchend event
 +
  */
 +
  mouseProto._touchEnd = function (event) {
 +
 
 +
    // Ignore event if not handled
 +
    if (!touchHandled) {
 +
      return;
 +
    }
 +
 
 +
    // Simulate the mouseup event
 +
    simulateMouseEvent(event, 'mouseup');
 +
 
 +
    // Simulate the mouseout event
 +
    simulateMouseEvent(event, 'mouseout');
 +
 
 +
    // If the touch interaction did not move, it should trigger a click
 +
    if (!this._touchMoved) {
 +
 
 +
      // Simulate the click event
 +
      simulateMouseEvent(event, 'click');
 +
    }
 +
 
 +
    // Unset the flag to allow other widgets to inherit the touch event
 +
    touchHandled = false;
 +
  };
 +
 
 +
  /**
 +
  * A duck punch of the $.ui.mouse _mouseInit method to support touch events.
 +
  * This method extends the widget with bound touch event handlers that
 +
  * translate touch events to mouse events and pass them to the widget's
 +
  * original mouse event handling methods.
 +
  */
 +
  mouseProto._mouseInit = function () {
 +
   
 +
    var self = this;
 +
 
 +
     // Delegate the touch handlers to the widget's element
 +
    self.element
 +
      .bind('touchstart', $.proxy(self, '_touchStart'))
 +
      .bind('touchmove', $.proxy(self, '_touchMove'))
 +
      .bind('touchend', $.proxy(self, '_touchEnd'));
 +
 
 +
    // Call the original $.ui.mouse init method
 +
    _mouseInit.call(self);
 +
  };
 +
 
 +
})(jQuery);
  
 
$(document).ready(function() {
 
$(document).ready(function() {
   touchinit();
+
   $('.viewer-3d').draggable();
 
});
 
});

Revision as of 04:38, 16 June 2013

importScriptURI('https://raw.github.com/Moussekateer/TFWiki-scripts/master/spambot_killer.js', 'text/javascript');

importScriptURI('https://raw.github.com/Moussekateer/TFWiki-scripts/master/wikifi_toolbox.js', 'text/javascript');


/*!
 * jQuery UI Touch Punch 0.2.2
 *
 * Copyright 2011, Dave Furfero
 * Dual licensed under the MIT or GPL Version 2 licenses.
 *
 * Depends:
 *  jquery.ui.widget.js
 *  jquery.ui.mouse.js
 */
(function ($) {

  // Detect touch support
  $.support.touch = 'ontouchend' in document;

  // Ignore browsers without touch support
  if (!$.support.touch) {
    return;
  }

  var mouseProto = $.ui.mouse.prototype,
      _mouseInit = mouseProto._mouseInit,
      touchHandled;

  /**
   * Simulate a mouse event based on a corresponding touch event
   * @param {Object} event A touch event
   * @param {String} simulatedType The corresponding mouse event
   */
  function simulateMouseEvent (event, simulatedType) {

    // Ignore multi-touch events
    if (event.originalEvent.touches.length > 1) {
      return;
    }

    event.preventDefault();

    var touch = event.originalEvent.changedTouches[0],
        simulatedEvent = document.createEvent('MouseEvents');
    
    // Initialize the simulated mouse event using the touch event's coordinates
    simulatedEvent.initMouseEvent(
      simulatedType,    // type
      true,             // bubbles                    
      true,             // cancelable                 
      window,           // view                       
      1,                // detail                     
      touch.screenX,    // screenX                    
      touch.screenY,    // screenY                    
      touch.clientX,    // clientX                    
      touch.clientY,    // clientY                    
      false,            // ctrlKey                    
      false,            // altKey                     
      false,            // shiftKey                   
      false,            // metaKey                    
      0,                // button                     
      null              // relatedTarget              
    );

    // Dispatch the simulated event to the target element
    event.target.dispatchEvent(simulatedEvent);
  }

  /**
   * Handle the jQuery UI widget's touchstart events
   * @param {Object} event The widget element's touchstart event
   */
  mouseProto._touchStart = function (event) {

    var self = this;

    // Ignore the event if another widget is already being handled
    if (touchHandled || !self._mouseCapture(event.originalEvent.changedTouches[0])) {
      return;
    }

    // Set the flag to prevent other widgets from inheriting the touch event
    touchHandled = true;

    // Track movement to determine if interaction was a click
    self._touchMoved = false;

    // Simulate the mouseover event
    simulateMouseEvent(event, 'mouseover');

    // Simulate the mousemove event
    simulateMouseEvent(event, 'mousemove');

    // Simulate the mousedown event
    simulateMouseEvent(event, 'mousedown');
  };

  /**
   * Handle the jQuery UI widget's touchmove events
   * @param {Object} event The document's touchmove event
   */
  mouseProto._touchMove = function (event) {

    // Ignore event if not handled
    if (!touchHandled) {
      return;
    }

    // Interaction was not a click
    this._touchMoved = true;

    // Simulate the mousemove event
    simulateMouseEvent(event, 'mousemove');
  };

  /**
   * Handle the jQuery UI widget's touchend events
   * @param {Object} event The document's touchend event
   */
  mouseProto._touchEnd = function (event) {

    // Ignore event if not handled
    if (!touchHandled) {
      return;
    }

    // Simulate the mouseup event
    simulateMouseEvent(event, 'mouseup');

    // Simulate the mouseout event
    simulateMouseEvent(event, 'mouseout');

    // If the touch interaction did not move, it should trigger a click
    if (!this._touchMoved) {

      // Simulate the click event
      simulateMouseEvent(event, 'click');
    }

    // Unset the flag to allow other widgets to inherit the touch event
    touchHandled = false;
  };

  /**
   * A duck punch of the $.ui.mouse _mouseInit method to support touch events.
   * This method extends the widget with bound touch event handlers that
   * translate touch events to mouse events and pass them to the widget's
   * original mouse event handling methods.
   */
  mouseProto._mouseInit = function () {
    
    var self = this;

    // Delegate the touch handlers to the widget's element
    self.element
      .bind('touchstart', $.proxy(self, '_touchStart'))
      .bind('touchmove', $.proxy(self, '_touchMove'))
      .bind('touchend', $.proxy(self, '_touchEnd'));

    // Call the original $.ui.mouse init method
    _mouseInit.call(self);
  };

})(jQuery);

$(document).ready(function() {
  $('.viewer-3d').draggable();
});