all files / common/ position.js

100% Statements 91/91
100% Branches 44/44
100% Functions 14/14
100% Lines 91/91
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125   89× 89× 89× 89×   88×   88× 61× 61× 61×   88× 88× 126× 126× 126×   88×   1019× 1019× 1019×   1018× 233×   1018× 233×   1018× 1018× 1018× 1018×   1018×   1018×   1018× 1018×   63× 63× 63×   125× 125× 125×     11× 11× 11×     48× 48× 48×   74× 74× 74×   121× 121× 121×     569× 569× 569×   1018×   1008×   1018×   243×   18×   775×   808×   210×   112×      
define(["require", "exports", "@syncfusion/ej2-base"], function (require, exports, ej2_base_1) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    var elementRect;
    var popupRect;
    var element;
    var parentDocument;
    var fixedParent = false;
    function calculateRelativeBasedPosition(anchor, element) {
        var fixedElement = false;
        var anchorPos = { left: 0, top: 0 };
        var tempAnchor = anchor;
        if (!anchor || !element) {
            return anchorPos;
        }
        if (ej2_base_1.isNullOrUndefined(element.offsetParent) && element.style.position === 'fixed') {
            fixedElement = true;
        }
        while ((element.offsetParent || fixedElement) && anchor && element.offsetParent !== anchor) {
            anchorPos.left += anchor.offsetLeft;
            anchorPos.top += anchor.offsetTop;
            anchor = anchor.offsetParent;
        }
        anchor = tempAnchor;
        while ((element.offsetParent || fixedElement) && anchor && element.offsetParent !== anchor) {
            anchorPos.left -= anchor.scrollLeft;
            anchorPos.top -= anchor.scrollTop;
            anchor = anchor.parentElement;
        }
        return anchorPos;
    }
    exports.calculateRelativeBasedPosition = calculateRelativeBasedPosition;
    function calculatePosition(currentElement, positionX, positionY, parentElement, targetValues) {
        popupRect = targetValues;
        fixedParent = parentElement ? true : false;
        if (!currentElement) {
            return { left: 0, top: 0 };
        }
        if (!positionX) {
            positionX = 'left';
        }
        if (!positionY) {
            positionY = 'top';
        }
        parentDocument = currentElement.ownerDocument;
        element = currentElement;
        var pos = { left: 0, top: 0 };
        return updatePosition(positionX.toLowerCase(), positionY.toLowerCase(), pos);
    }
    exports.calculatePosition = calculatePosition;
    function setPosx(value, pos) {
        pos.left = value;
    }
    function setPosy(value, pos) {
        pos.top = value;
    }
    function updatePosition(posX, posY, pos) {
        elementRect = element.getBoundingClientRect();
        switch (posY + posX) {
            case 'topcenter':
                setPosx(getElementHCenter(), pos);
                setPosy(getElementTop(), pos);
                break;
            case 'topright':
                setPosx(getElementRight(), pos);
                setPosy(getElementTop(), pos);
                break;
            case 'centercenter':
                setPosx(getElementHCenter(), pos);
                setPosy(getElementVCenter(), pos);
                break;
            case 'centerright':
                setPosx(getElementRight(), pos);
                setPosy(getElementVCenter(), pos);
                break;
            case 'centerleft':
                setPosx(getElementLeft(), pos);
                setPosy(getElementVCenter(), pos);
                break;
            case 'bottomcenter':
                setPosx(getElementHCenter(), pos);
                setPosy(getElementBottom(), pos);
                break;
            case 'bottomright':
                setPosx(getElementRight(), pos);
                setPosy(getElementBottom(), pos);
                break;
            case 'bottomleft':
                setPosx(getElementLeft(), pos);
                setPosy(getElementBottom(), pos);
                break;
            default:
            case 'topleft':
                setPosx(getElementLeft(), pos);
                setPosy(getElementTop(), pos);
                break;
        }
        return pos;
    }
    function getBodyScrollTop() {
        return parentDocument.documentElement.scrollTop || parentDocument.body.scrollTop;
    }
    function getBodyScrollLeft() {
        return parentDocument.documentElement.scrollLeft || parentDocument.body.scrollLeft;
    }
    function getElementBottom() {
        return fixedParent ? elementRect.bottom : elementRect.bottom + getBodyScrollTop();
    }
    function getElementVCenter() {
        return getElementTop() + (elementRect.height / 2);
    }
    function getElementTop() {
        return fixedParent ? elementRect.top : elementRect.top + getBodyScrollTop();
    }
    function getElementLeft() {
        return elementRect.left + getBodyScrollLeft();
    }
    function getElementRight() {
        return elementRect.right + getBodyScrollLeft() - (popupRect ? popupRect.width : 0);
    }
    function getElementHCenter() {
        return getElementLeft() + (elementRect.width / 2);
    }
});