|
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
-
- define([
- 'jquery',
- 'underscore',
- 'jquery-ui-modules/slider'
- ], function ($, _) {
- 'use strict';
-
- /**
- * Adds support for touch events for regular jQuery UI slider.
- */
- $.widget('mage.touchSlider', $.ui.slider, {
-
- /**
- * Creates instance of widget.
- *
- * @override
- */
- _create: function () {
- _.bindAll(
- this,
- '_mouseDown',
- '_mouseMove',
- '_onTouchEnd'
- );
-
- return this._superApply(arguments);
- },
-
- /**
- * Initializes mouse events on element.
- * @override
- */
- _mouseInit: function () {
- var result = this._superApply(arguments);
-
- this.element
- .off('mousedown.' + this.widgetName)
- .on('touchstart.' + this.widgetName, this._mouseDown);
-
- return result;
- },
-
- /**
- * Elements' 'mousedown' event handler polyfill.
- * @override
- */
- _mouseDown: function (event) {
- var prevDelegate = this._mouseMoveDelegate,
- result;
-
- event = this._touchToMouse(event);
- result = this._super(event);
-
- if (prevDelegate === this._mouseMoveDelegate) {
- return result;
- }
-
- $(document)
- .off('mousemove.' + this.widgetName)
- .off('mouseup.' + this.widgetName);
-
- $(document)
- .on('touchmove.' + this.widgetName, this._mouseMove)
- .on('touchend.' + this.widgetName, this._onTouchEnd)
- .on('tochleave.' + this.widgetName, this._onTouchEnd);
-
- return result;
- },
-
- /**
- * Documents' 'mousemove' event handler polyfill.
- *
- * @override
- * @param {Event} event - Touch event object.
- */
- _mouseMove: function (event) {
- event = this._touchToMouse(event);
-
- return this._super(event);
- },
-
- /**
- * Documents' 'touchend' event handler.
- */
- _onTouchEnd: function (event) {
- $(document).trigger('mouseup');
-
- return this._mouseUp(event);
- },
-
- /**
- * Removes previously assigned touch handlers.
- *
- * @override
- */
- _mouseUp: function () {
- this._removeTouchHandlers();
-
- return this._superApply(arguments);
- },
-
- /**
- * Removes previously assigned touch handlers.
- *
- * @override
- */
- _mouseDestroy: function () {
- this._removeTouchHandlers();
-
- return this._superApply(arguments);
- },
-
- /**
- * Removes touch events from document object.
- */
- _removeTouchHandlers: function () {
- $(document)
- .off('touchmove.' + this.widgetName)
- .off('touchend.' + this.widgetName)
- .off('touchleave.' + this.widgetName);
- },
-
- /**
- * Adds properties to the touch event to mimic mouse event.
- *
- * @param {Event} event - Touch event object.
- * @returns {Event}
- */
- _touchToMouse: function (event) {
- var orig = event.originalEvent,
- touch = orig.touches[0];
-
- return _.extend(event, {
- which: 1,
- pageX: touch.pageX,
- pageY: touch.pageY,
- clientX: touch.clientX,
- clientY: touch.clientY,
- screenX: touch.screenX,
- screenY: touch.screenY
- });
- }
- });
-
- return $.mage.touchSlider;
- });
|