Difference between revisions of "User:Moussekateer/vector.js"
Moussekateer (talk | contribs) m (science) |
Moussekateer (talk | contribs) 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'); | ||
− | |||
− | |||
− | + | /*! | |
− | + | * 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(); | event.preventDefault(); | ||
− | |||
− | + | var touch = event.originalEvent.changedTouches[0], | |
− | + | simulatedEvent = document.createEvent('MouseEvents'); | |
− | + | ||
− | document. | + | // 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() { | $(document).ready(function() { | ||
− | + | $('.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(); });