Files
Sensores/static/lib/Highcharts-10.2.1/es-modules/Extensions/Annotations/EventEmitter.js
2025-04-17 00:35:33 -06:00

242 lines
7.9 KiB
JavaScript

/* *
*
* (c) 2009-2021 Highsoft, Black Label
*
* License: www.highcharts.com/license
*
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
*
* */
'use strict';
import H from '../../Core/Globals.js';
var doc = H.doc, isTouchDevice = H.isTouchDevice;
import U from '../../Core/Utilities.js';
var addEvent = U.addEvent, fireEvent = U.fireEvent, objectEach = U.objectEach, pick = U.pick, removeEvent = U.removeEvent;
/* *
*
* Class
*
* */
/**
* @private
*/
var EventEmitter = /** @class */ (function () {
function EventEmitter() {
}
/* *
*
* Functions
*
* */
/**
* Add emitter events.
* @private
*/
EventEmitter.prototype.addEvents = function () {
var emitter = this, addMouseDownEvent = function (element) {
addEvent(element, isTouchDevice ? 'touchstart' : 'mousedown', function (e) {
emitter.onMouseDown(e);
}, { passive: false });
};
addMouseDownEvent(this.graphic.element);
(emitter.labels || []).forEach(function (label) {
if (label.options.useHTML && label.graphic.text) {
// Mousedown event bound to HTML element (#13070).
addMouseDownEvent(label.graphic.text.element);
}
});
objectEach(emitter.options.events, function (event, type) {
var eventHandler = function (e) {
if (type !== 'click' || !emitter.cancelClick) {
event.call(emitter, emitter.chart.pointer.normalize(e), emitter.target);
}
};
if ((emitter.nonDOMEvents || []).indexOf(type) === -1) {
emitter.graphic.on(type, eventHandler);
}
else {
addEvent(emitter, type, eventHandler, { passive: false });
}
});
if (emitter.options.draggable) {
addEvent(emitter, 'drag', emitter.onDrag);
if (!emitter.graphic.renderer.styledMode) {
var cssPointer_1 = {
cursor: {
x: 'ew-resize',
y: 'ns-resize',
xy: 'move'
}[emitter.options.draggable]
};
emitter.graphic.css(cssPointer_1);
(emitter.labels || []).forEach(function (label) {
if (label.options.useHTML && label.graphic.text) {
label.graphic.text.css(cssPointer_1);
}
});
}
}
if (!emitter.isUpdating) {
fireEvent(emitter, 'add');
}
};
/**
* Destroy the event emitter.
*/
EventEmitter.prototype.destroy = function () {
this.removeDocEvents();
removeEvent(this);
this.hcEvents = null;
};
/**
* Map mouse move event to the radians.
* @private
*/
EventEmitter.prototype.mouseMoveToRadians = function (e, cx, cy) {
var prevDy = e.prevChartY - cy, prevDx = e.prevChartX - cx, dy = e.chartY - cy, dx = e.chartX - cx, temp;
if (this.chart.inverted) {
temp = prevDx;
prevDx = prevDy;
prevDy = temp;
temp = dx;
dx = dy;
dy = temp;
}
return Math.atan2(dy, dx) - Math.atan2(prevDy, prevDx);
};
/**
* Map mouse move to the scale factors.
* @private
*/
EventEmitter.prototype.mouseMoveToScale = function (e, cx, cy) {
var prevDx = e.prevChartX - cx, prevDy = e.prevChartY - cy, dx = e.chartX - cx, dy = e.chartY - cy;
var sx = (dx || 1) / (prevDx || 1), sy = (dy || 1) / (prevDy || 1);
if (this.chart.inverted) {
var temp = sy;
sy = sx;
sx = temp;
}
return {
x: sx,
y: sy
};
};
/**
* Map mouse move event to the distance between two following events.
* @private
*/
EventEmitter.prototype.mouseMoveToTranslation = function (e) {
var dx = e.chartX - e.prevChartX, dy = e.chartY - e.prevChartY, temp;
if (this.chart.inverted) {
temp = dy;
dy = dx;
dx = temp;
}
return {
x: dx,
y: dy
};
};
/**
* Drag and drop event. All basic annotations should share this
* capability as well as the extended ones.
* @private
*/
EventEmitter.prototype.onDrag = function (e) {
if (this.chart.isInsidePlot(e.chartX - this.chart.plotLeft, e.chartY - this.chart.plotTop, {
visiblePlotOnly: true
})) {
var translation_1 = this.mouseMoveToTranslation(e);
if (this.options.draggable === 'x') {
translation_1.y = 0;
}
if (this.options.draggable === 'y') {
translation_1.x = 0;
}
var emitter = this;
if (emitter.points.length) {
emitter.translate(translation_1.x, translation_1.y);
}
else {
emitter.shapes.forEach(function (shape) {
return shape.translate(translation_1.x, translation_1.y);
});
emitter.labels.forEach(function (label) {
return label.translate(translation_1.x, translation_1.y);
});
}
this.redraw(false);
}
};
/**
* Mouse down handler.
* @private
*/
EventEmitter.prototype.onMouseDown = function (e) {
if (e.preventDefault) {
e.preventDefault();
}
// On right click, do nothing:
if (e.button === 2) {
return;
}
var emitter = this, pointer = emitter.chart.pointer;
e = pointer.normalize(e);
var prevChartX = e.chartX, prevChartY = e.chartY;
emitter.cancelClick = false;
emitter.chart.hasDraggedAnnotation = true;
emitter.removeDrag = addEvent(doc, isTouchDevice ? 'touchmove' : 'mousemove', function (e) {
emitter.hasDragged = true;
e = pointer.normalize(e);
e.prevChartX = prevChartX;
e.prevChartY = prevChartY;
fireEvent(emitter, 'drag', e);
prevChartX = e.chartX;
prevChartY = e.chartY;
}, isTouchDevice ? { passive: false } : void 0);
emitter.removeMouseUp = addEvent(doc, isTouchDevice ? 'touchend' : 'mouseup', function (e) {
// Sometimes the target is the annotation and sometimes its the
// controllable
var annotation = pick(emitter.target && emitter.target.annotation, emitter.target);
if (annotation) {
// Keep annotation selected after dragging control point
annotation.cancelClick = emitter.hasDragged;
}
emitter.cancelClick = emitter.hasDragged;
emitter.hasDragged = false;
emitter.chart.hasDraggedAnnotation = false;
// ControlPoints vs Annotation:
fireEvent(pick(annotation, // #15952
emitter), 'afterUpdate');
emitter.onMouseUp(e);
}, isTouchDevice ? { passive: false } : void 0);
};
/**
* Mouse up handler.
*/
EventEmitter.prototype.onMouseUp = function (_e) {
var chart = this.chart, annotation = this.target || this, annotationsOptions = chart.options.annotations, index = chart.annotations.indexOf(annotation);
this.removeDocEvents();
annotationsOptions[index] = annotation.options;
};
/**
* Remove emitter document events.
* @private
*/
EventEmitter.prototype.removeDocEvents = function () {
if (this.removeDrag) {
this.removeDrag = this.removeDrag();
}
if (this.removeMouseUp) {
this.removeMouseUp = this.removeMouseUp();
}
};
return EventEmitter;
}());
/* *
*
* Default Export
*
* */
export default EventEmitter;