UNPKG

ng2-date-picker

Version:

[![Build Status](https://travis-ci.org/vlio20/angular-datepicker.svg?branch=master)](https://travis-ci.org/vlio20/angular-datepicker) [![Backers on Open Collective](https://opencollective.com/angular-datepicker/backers/badge.svg)](#backers) [![Sponsor

89 lines 12.8 kB
import * as tslib_1 from "tslib"; var DomHelper_1; import { Injectable } from '@angular/core'; let DomHelper = DomHelper_1 = class DomHelper { static setYAxisPosition(element, container, anchor, drops) { const anchorRect = anchor.getBoundingClientRect(); const containerRect = container.getBoundingClientRect(); const bottom = anchorRect.bottom - containerRect.top; const top = anchorRect.top - containerRect.top; if (drops === 'down') { element.style.top = (bottom + 1 + 'px'); } else { element.style.top = (top - 1 - element.scrollHeight) + 'px'; } } static setXAxisPosition(element, container, anchor, dimElem, opens) { const anchorRect = anchor.getBoundingClientRect(); const containerRect = container.getBoundingClientRect(); const left = anchorRect.left - containerRect.left; if (opens === 'right') { element.style.left = left + 'px'; } else { element.style.left = left - dimElem.offsetWidth + anchor.offsetWidth + 'px'; } } static isTopInView(el) { const { top } = el.getBoundingClientRect(); return (top >= 0); } static isBottomInView(el) { const { bottom } = el.getBoundingClientRect(); return (bottom <= window.innerHeight); } static isLeftInView(el) { const { left } = el.getBoundingClientRect(); return (left >= 0); } static isRightInView(el) { const { right } = el.getBoundingClientRect(); return (right <= window.innerWidth); } appendElementToPosition(config) { const { container, element } = config; if (!container.style.position || container.style.position === 'static') { container.style.position = 'relative'; } if (element.style.position !== 'absolute') { element.style.position = 'absolute'; } element.style.visibility = 'hidden'; setTimeout(() => { this.setElementPosition(config); element.style.visibility = 'visible'; }); } setElementPosition({ element, container, anchor, dimElem, drops, opens }) { DomHelper_1.setYAxisPosition(element, container, anchor, 'down'); DomHelper_1.setXAxisPosition(element, container, anchor, dimElem, 'right'); if (drops !== 'down' && drops !== 'up') { if (DomHelper_1.isBottomInView(dimElem)) { DomHelper_1.setYAxisPosition(element, container, anchor, 'down'); } else if (DomHelper_1.isTopInView(dimElem)) { DomHelper_1.setYAxisPosition(element, container, anchor, 'up'); } } else { DomHelper_1.setYAxisPosition(element, container, anchor, drops); } if (opens !== 'left' && opens !== 'right') { if (DomHelper_1.isRightInView(dimElem)) { DomHelper_1.setXAxisPosition(element, container, anchor, dimElem, 'right'); } else if (DomHelper_1.isLeftInView(dimElem)) { DomHelper_1.setXAxisPosition(element, container, anchor, dimElem, 'left'); } } else { DomHelper_1.setXAxisPosition(element, container, anchor, dimElem, opens); } } }; DomHelper = DomHelper_1 = tslib_1.__decorate([ Injectable() ], DomHelper); export { DomHelper }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLWFwcGVuZGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZzItZGF0ZS1waWNrZXIvIiwic291cmNlcyI6WyJjb21tb24vc2VydmljZXMvZG9tLWFwcGVuZGVyL2RvbS1hcHBlbmRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUl6QyxJQUFhLFNBQVMsaUJBQXRCLE1BQWEsU0FBUztJQUVaLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFvQixFQUFFLFNBQXNCLEVBQUUsTUFBbUIsRUFBRSxLQUFhO1FBQzlHLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ2xELE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3hELE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQztRQUNyRCxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUM7UUFFL0MsSUFBSSxLQUFLLEtBQUssTUFBTSxFQUFFO1lBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztTQUN6QzthQUFNO1lBQ0wsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDN0Q7SUFDSCxDQUFDO0lBRU8sTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQW9CLEVBQUUsU0FBc0IsRUFBRSxNQUFtQixFQUFFLE9BQW9CLEVBQUUsS0FBYTtRQUNwSSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUNsRCxNQUFNLGFBQWEs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RTtpQkFBTSxJQUFJLFdBQVMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3pDLFdBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQzthQUM5RDtTQUNGO2FBQU07WUFDTCxXQUFTLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDL0Q7UUFFRCxJQUFJLEtBQUssS0FBSyxNQUFNLElBQUksS0FBSyxLQUFLLE9BQU8sRUFBRTtZQUN6QyxJQUFJLFdBQVMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3BDLFdBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDMUU7aUJBQU0sSUFBSSxXQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUMxQyxXQUFTLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQ3pFO1NBQ0Y7YUFBTTtZQUNMLFdBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDeEU7SUFDSCxDQUFDO0NBQ0YsQ0FBQTtBQTNGWSxTQUFTO0lBRHJCLFVBQVUsRUFBRTtHQUNBLFNBQVMsQ0EyRnJCO1NBM0ZZLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtURHJvcHMsIFRPcGVuc30gZnJvbSAnLi4vLi4vdHlwZXMvcG9pc3Rpb25zLnR5cGUnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRG9tSGVscGVyIHtcblxuICBwcml2YXRlIHN0YXRpYyBzZXRZQXhpc1Bvc2l0aW9uKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBjb250YWluZXI6IEhUTUxFbGVtZW50LCBhbmNob3I6IEhUTUxFbGVtZW50LCBkcm9wczogVERyb3BzKSB7XG4gICAgY29uc3QgYW5jaG9yUmVjdCA9IGFuY2hvci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBjb250YWluZXJSZWN0ID0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGJvdHRvbSA9IGFuY2hvclJlY3QuYm90dG9tIC0gY29udGFpbmVyUmVjdC50b3A7XG4gICAgY29uc3QgdG9wID0gYW5jaG9yUmVjdC50b3AgLSBjb250YWluZXJSZWN0LnRvcDtcblxuICAgIGlmIChkcm9wcyA9PT0gJ2Rvd24nKSB7XG4gICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IChib3R0b20gKyAxICsgJ3B4Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gKHRvcCAtIDEgLSBlbGVtZW50LnNjcm9sbEhlaWdodCkgKyAncHgnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHNldFhBeGlzUG9zaXRpb24oZWxlbWVudDogSFRNTEVsZW1lbnQsIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsIGFuY2hvcjogSFRNTEVsZW1lbnQsIGRpbUVsZW06IEhUTUxFbGVtZW50LCBvcGVuczogVE9wZW5zKSB7XG4gICAgY29uc3QgYW5jaG9yUmVjdCA9IGFuY2hvci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBjb250YWluZXJSZWN0ID0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGxlZnQgPSBhbmNob3JSZWN0LmxlZnQgLSBjb250YWluZXJSZWN0LmxlZnQ7XG5cbiAgICBpZiAob3BlbnMgPT09ICdyaWdodCcpIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGxlZnQgKyAncHgnO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBsZWZ0IC0gZGltRWxlbS5vZmZzZXRXaWR0aCArIGFuY2hvci5vZmZzZXRXaWR0aCArICdweCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNUb3BJblZpZXcoZWw6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgY29uc3Qge3RvcH0gPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICByZXR1cm4gKHRvcCA+PSAwKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGlzQm90dG9tSW5WaWV3KGVsOiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHtib3R0b219ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmV0dXJuIChib3R0b20gPD0gd2luZG93LmlubmVySGVpZ2h0KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGlzTGVmdEluVmlldyhlbDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICBjb25zdCB7bGVmdH0gPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICByZXR1cm4gKGxlZnQgPj0gMCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBpc1JpZ2h0SW5WaWV3KGVsOiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHtyaWdodH0gPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICByZXR1cm4gKHJpZ2h0IDw9IHdpbmRvdy5pbm5lcldpZHRoKTtcbiAgfVxuXG4gIGFwcGVuZEVsZW1lbnRUb1Bvc2l0aW9uKGNvbmZpZzogSUFwcGVuZFRvQXJncyk6IHZvaWQge1xuICAgIGNvbnN0IHtjb250YWluZXIsIGVsZW1lbnR9ID0gY29uZmlnO1xuXG4gICAgaWYgKCFjb250YWluZXIuc3R5bGUucG9zaXRpb24gfHwgY29udGFpbmVyLnN0eWxlLnBvc2l0aW9uID09PSAnc3RhdGljJykge1xuICAgICAgY29udGFpbmVyLnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudC5zdHlsZS5wb3NpdGlvbiAhPT0gJ2Fic29sdXRlJykge1xuICAgICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgfVxuXG4gICAgZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2V0RWxlbWVudFBvc2l0aW9uKGNvbmZpZyk7XG5cbiAgICAgIGVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcbiAgICB9KTtcbiAgfVxuXG4gIHNldEVsZW1lbnRQb3NpdGlvbih7ZWxlbWVudCwgY29udGFpbmVyLCBhbmNob3IsIGRpbUVsZW0sIGRyb3BzLCBvcGVuc306IElBcHBlbmRUb0FyZ3MpIHtcbiAgICBEb21IZWxwZXIuc2V0WUF4aXNQb3NpdGlvbihlbGVtZW50LCBjb250YWluZXIsIGFuY2hvciwgJ2Rvd24nKTtcbiAgICBEb21IZWxwZXIuc2V0WEF4aXNQb3NpdGlvbihlbGVtZW50LCBjb250YWluZXIsIGFuY2hvciwgZGltRWxlbSwgJ3JpZ2h0Jyk7XG5cbiAgICBpZiAoZHJvcHMgIT09ICdkb3duJyAmJiBkcm9wcyAhPT0gJ3VwJykge1xuICAgICAgaWYgKERvbUhlbHBlci5pc0JvdHRvbUluVmlldyhkaW1FbGVtKSkge1xuICAgICAgICBEb21IZWxwZXIuc2V0WUF4aXNQb3NpdGlvbihlbGVtZW50LCBjb250YWluZXIsIGFuY2hvciwgJ2Rvd24nKTtcbiAgICAgIH0gZWxzZSBpZiAoRG9tSGVscGVyLmlzVG9wSW5WaWV3KGRpbUVsZW0pKSB7XG4gICAgICAgIERvbUhlbHBlci5zZXRZQXhpc1Bvc2l0aW9uKGVsZW1lbnQsIGNvbnRhaW5lciwgYW5jaG9yLCAndXAnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgRG9tSGVscGVyLnNldFlBeGlzUG9zaXRpb24oZWxlbWVudCwgY29udGFpbmVyLCBhbmNob3IsIGRyb3BzKTtcbiAgICB9XG5cbiAgICBpZiAob3BlbnMgIT09ICdsZWZ0JyAmJiBvcGVucyAhPT0gJ3JpZ2h0Jykge1xuICAgICAgaWYgKERvbUhlbHBlci5pc1JpZ2h0SW5WaWV3KGRpbUVsZW0pKSB7XG4gICAgICAgIERvbUhlbHBlci5zZXRYQXhpc1Bvc2l0aW9uKGVsZW1lbnQsIGNvbnRhaW5lciwgYW5jaG9yLCBkaW1FbGVtLCAncmlnaHQnKTtcbiAgICAgIH0gZWxzZSBpZiAoRG9tSGVscGVyLmlzTGVmdEluVmlldyhkaW1FbGVtKSkge1xuICAgICAgICBEb21IZWxwZXIuc2V0WEF4aXNQb3NpdGlvbihlbGVtZW50LCBjb250YWluZXIsIGFuY2hvciwgZGltRWxlbSwgJ2xlZnQnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgRG9tSGVscGVyLnNldFhBeGlzUG9zaXRpb24oZWxlbWVudCwgY29udGFpbmVyLCBhbmNob3IsIGRpbUVsZW0sIG9wZW5zKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXBwZW5kVG9BcmdzIHtcbiAgY29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgZWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gIGFuY2hvcjogSFRNTEVsZW1lbnQ7XG4gIGRpbUVsZW06IEhUTUxFbGVtZW50O1xuICBkcm9wczogVERyb3BzO1xuICBvcGVuczogVE9wZW5zO1xufVxuIl19