12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- import env from './env.js';
- import { buildTransformer } from './fourPointsTransform.js';
- var EVENT_SAVED_PROP = '___zrEVENTSAVED';
- var _calcOut = [];
- export function transformLocalCoord(out, elFrom, elTarget, inX, inY) {
- return transformCoordWithViewport(_calcOut, elFrom, inX, inY, true)
- && transformCoordWithViewport(out, elTarget, _calcOut[0], _calcOut[1]);
- }
- export function transformCoordWithViewport(out, el, inX, inY, inverse) {
- if (el.getBoundingClientRect && env.domSupported && !isCanvasEl(el)) {
- var saved = el[EVENT_SAVED_PROP] || (el[EVENT_SAVED_PROP] = {});
- var markers = prepareCoordMarkers(el, saved);
- var transformer = preparePointerTransformer(markers, saved, inverse);
- if (transformer) {
- transformer(out, inX, inY);
- return true;
- }
- }
- return false;
- }
- function prepareCoordMarkers(el, saved) {
- var markers = saved.markers;
- if (markers) {
- return markers;
- }
- markers = saved.markers = [];
- var propLR = ['left', 'right'];
- var propTB = ['top', 'bottom'];
- for (var i = 0; i < 4; i++) {
- var marker = document.createElement('div');
- var stl = marker.style;
- var idxLR = i % 2;
- var idxTB = (i >> 1) % 2;
- stl.cssText = [
- 'position: absolute',
- 'visibility: hidden',
- 'padding: 0',
- 'margin: 0',
- 'border-width: 0',
- 'user-select: none',
- 'width:0',
- 'height:0',
- propLR[idxLR] + ':0',
- propTB[idxTB] + ':0',
- propLR[1 - idxLR] + ':auto',
- propTB[1 - idxTB] + ':auto',
- ''
- ].join('!important;');
- el.appendChild(marker);
- markers.push(marker);
- }
- return markers;
- }
- function preparePointerTransformer(markers, saved, inverse) {
- var transformerName = inverse ? 'invTrans' : 'trans';
- var transformer = saved[transformerName];
- var oldSrcCoords = saved.srcCoords;
- var srcCoords = [];
- var destCoords = [];
- var oldCoordTheSame = true;
- for (var i = 0; i < 4; i++) {
- var rect = markers[i].getBoundingClientRect();
- var ii = 2 * i;
- var x = rect.left;
- var y = rect.top;
- srcCoords.push(x, y);
- oldCoordTheSame = oldCoordTheSame && oldSrcCoords && x === oldSrcCoords[ii] && y === oldSrcCoords[ii + 1];
- destCoords.push(markers[i].offsetLeft, markers[i].offsetTop);
- }
- return (oldCoordTheSame && transformer)
- ? transformer
- : (saved.srcCoords = srcCoords,
- saved[transformerName] = inverse
- ? buildTransformer(destCoords, srcCoords)
- : buildTransformer(srcCoords, destCoords));
- }
- export function isCanvasEl(el) {
- return el.nodeName.toUpperCase() === 'CANVAS';
- }
- var replaceReg = /([&<>"'])/g;
- var replaceMap = {
- '&': '&',
- '<': '<',
- '>': '>',
- '"': '"',
- '\'': '''
- };
- export function encodeHTML(source) {
- return source == null
- ? ''
- : (source + '').replace(replaceReg, function (str, c) {
- return replaceMap[c];
- });
- }
|