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]; 
 | 
        }); 
 | 
} 
 |