161 lines
5.0 KiB
JavaScript
161 lines
5.0 KiB
JavaScript
|
/* *
|
||
|
*
|
||
|
* (c) 2010-2020 Torstein Honsi
|
||
|
*
|
||
|
* License: www.highcharts.com/license
|
||
|
*
|
||
|
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
||
|
*
|
||
|
* */
|
||
|
'use strict';
|
||
|
var __extends = (this && this.__extends) || (function () {
|
||
|
var extendStatics = function (d, b) {
|
||
|
extendStatics = Object.setPrototypeOf ||
|
||
|
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
||
|
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
|
||
|
return extendStatics(d, b);
|
||
|
};
|
||
|
return function (d, b) {
|
||
|
extendStatics(d, b);
|
||
|
function __() { this.constructor = d; }
|
||
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||
|
};
|
||
|
})();
|
||
|
import H from './Globals.js';
|
||
|
/* globals MSPointerEvent, PointerEvent */
|
||
|
import Pointer from './Pointer.js';
|
||
|
import U from './Utilities.js';
|
||
|
var addEvent = U.addEvent, css = U.css, objectEach = U.objectEach, removeEvent = U.removeEvent;
|
||
|
var charts = H.charts, doc = H.doc, noop = H.noop, win = H.win;
|
||
|
// The touches object keeps track of the points being touched at all times
|
||
|
var touches = {};
|
||
|
var hasPointerEvent = !!win.PointerEvent;
|
||
|
/* eslint-disable valid-jsdoc */
|
||
|
/** @private */
|
||
|
function getWebkitTouches() {
|
||
|
var fake = [];
|
||
|
fake.item = function (i) {
|
||
|
return this[i];
|
||
|
};
|
||
|
objectEach(touches, function (touch) {
|
||
|
fake.push({
|
||
|
pageX: touch.pageX,
|
||
|
pageY: touch.pageY,
|
||
|
target: touch.target
|
||
|
});
|
||
|
});
|
||
|
return fake;
|
||
|
}
|
||
|
/** @private */
|
||
|
function translateMSPointer(e, method, wktype, func) {
|
||
|
var p;
|
||
|
if ((e.pointerType === 'touch' ||
|
||
|
e.pointerType === e.MSPOINTER_TYPE_TOUCH) && charts[H.hoverChartIndex]) {
|
||
|
func(e);
|
||
|
p = charts[H.hoverChartIndex].pointer;
|
||
|
p[method]({
|
||
|
type: wktype,
|
||
|
target: e.currentTarget,
|
||
|
preventDefault: noop,
|
||
|
touches: getWebkitTouches()
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
/** @private */
|
||
|
var MSPointer = /** @class */ (function (_super) {
|
||
|
__extends(MSPointer, _super);
|
||
|
function MSPointer() {
|
||
|
return _super !== null && _super.apply(this, arguments) || this;
|
||
|
}
|
||
|
/* *
|
||
|
*
|
||
|
* Functions
|
||
|
*
|
||
|
* */
|
||
|
/**
|
||
|
* Add or remove the MS Pointer specific events
|
||
|
*
|
||
|
* @private
|
||
|
* @function Highcharts.Pointer#batchMSEvents
|
||
|
*
|
||
|
* @param {Function} fn
|
||
|
*
|
||
|
* @return {void}
|
||
|
*/
|
||
|
MSPointer.prototype.batchMSEvents = function (fn) {
|
||
|
fn(this.chart.container, hasPointerEvent ? 'pointerdown' : 'MSPointerDown', this.onContainerPointerDown);
|
||
|
fn(this.chart.container, hasPointerEvent ? 'pointermove' : 'MSPointerMove', this.onContainerPointerMove);
|
||
|
fn(doc, hasPointerEvent ? 'pointerup' : 'MSPointerUp', this.onDocumentPointerUp);
|
||
|
};
|
||
|
// Destroy MS events also
|
||
|
MSPointer.prototype.destroy = function () {
|
||
|
this.batchMSEvents(removeEvent);
|
||
|
_super.prototype.destroy.call(this);
|
||
|
};
|
||
|
// Disable default IE actions for pinch and such on chart element
|
||
|
MSPointer.prototype.init = function (chart, options) {
|
||
|
_super.prototype.init.call(this, chart, options);
|
||
|
if (this.hasZoom) { // #4014
|
||
|
css(chart.container, {
|
||
|
'-ms-touch-action': 'none',
|
||
|
'touch-action': 'none'
|
||
|
});
|
||
|
}
|
||
|
};
|
||
|
/**
|
||
|
* @private
|
||
|
* @function Highcharts.Pointer#onContainerPointerDown
|
||
|
*
|
||
|
* @param {Highcharts.PointerEventObject} e
|
||
|
*
|
||
|
* @return {void}
|
||
|
*/
|
||
|
MSPointer.prototype.onContainerPointerDown = function (e) {
|
||
|
translateMSPointer(e, 'onContainerTouchStart', 'touchstart', function (e) {
|
||
|
touches[e.pointerId] = {
|
||
|
pageX: e.pageX,
|
||
|
pageY: e.pageY,
|
||
|
target: e.currentTarget
|
||
|
};
|
||
|
});
|
||
|
};
|
||
|
/**
|
||
|
* @private
|
||
|
* @function Highcharts.Pointer#onContainerPointerMove
|
||
|
*
|
||
|
* @param {Highcharts.PointerEventObject} e
|
||
|
*
|
||
|
* @return {void}
|
||
|
*/
|
||
|
MSPointer.prototype.onContainerPointerMove = function (e) {
|
||
|
translateMSPointer(e, 'onContainerTouchMove', 'touchmove', function (e) {
|
||
|
touches[e.pointerId] = ({ pageX: e.pageX, pageY: e.pageY });
|
||
|
if (!touches[e.pointerId].target) {
|
||
|
touches[e.pointerId].target = e.currentTarget;
|
||
|
}
|
||
|
});
|
||
|
};
|
||
|
/**
|
||
|
* @private
|
||
|
* @function Highcharts.Pointer#onDocumentPointerUp
|
||
|
*
|
||
|
* @param {Highcharts.PointerEventObject} e
|
||
|
*
|
||
|
* @return {void}
|
||
|
*/
|
||
|
MSPointer.prototype.onDocumentPointerUp = function (e) {
|
||
|
translateMSPointer(e, 'onDocumentTouchEnd', 'touchend', function (e) {
|
||
|
delete touches[e.pointerId];
|
||
|
});
|
||
|
};
|
||
|
// Add IE specific touch events to chart
|
||
|
MSPointer.prototype.setDOMEvents = function () {
|
||
|
_super.prototype.setDOMEvents.call(this);
|
||
|
if (this.hasZoom || this.followTouchMove) {
|
||
|
this.batchMSEvents(addEvent);
|
||
|
}
|
||
|
};
|
||
|
return MSPointer;
|
||
|
}(Pointer));
|
||
|
export default MSPointer;
|