UNPKG

angular2gridsterv3

Version:
116 lines 18.8 kB
export const utils = { setCssElementPosition: function ($element, position) { $element.style.left = position.x + 'px'; $element.style.top = position.y + 'px'; }, resetCSSElementPosition: function ($element) { $element.style.left = ''; $element.style.top = ''; }, setTransform: function ($element, position) { const left = position.x; const top = position.y; // Replace unitless items with px const translate = `translate(${left}px,${top}px)`; $element.style['transform'] = translate; $element.style['WebkitTransform'] = translate; $element.style['MozTransform'] = translate; $element.style['msTransform'] = translate; $element.style['OTransform'] = translate; }, resetTransform: function ($element) { $element.style['transform'] = ''; $element.style['WebkitTransform'] = ''; $element.style['MozTransform'] = ''; $element.style['msTransform'] = ''; $element.style['OTransform'] = ''; }, clearSelection: () => { if (document['selection']) { document['selection'].empty(); } else if (window.getSelection) { window.getSelection().removeAllRanges(); } }, isElementFitContainer: function (element, containerEl) { const containerRect = containerEl.getBoundingClientRect(); const elRect = element.getBoundingClientRect(); return elRect.left > containerRect.left && elRect.right < containerRect.right && elRect.top > containerRect.top && elRect.bottom < containerRect.bottom; }, isElementIntersectContainer: function (element, containerEl) { const containerRect = containerEl.getBoundingClientRect(); const elRect = element.getBoundingClientRect(); const elWidth = elRect.right - elRect.left; const elHeight = elRect.bottom - elRect.top; return (elRect.left + (elWidth / 2)) > containerRect.left && (elRect.right - (elWidth / 2)) < containerRect.right && (elRect.top + (elHeight / 2)) > containerRect.top && (elRect.bottom - (elHeight / 2)) < containerRect.bottom; }, isElementTouchContainer: function (element, containerEl) { const containerRect = containerEl.getBoundingClientRect(); const elRect = element.getBoundingClientRect(); return elRect.right > containerRect.left && elRect.bottom > containerRect.top && elRect.left < containerRect.right && elRect.top < containerRect.bottom; }, isCursorAboveElement: function (event, element) { const elRect = element.getBoundingClientRect(); return event.pageX > elRect.left && event.pageX < elRect.right && event.pageY > elRect.top && event.pageY < elRect.bottom; }, getElementOuterHeight: function ($element) { const styleObj = window.getComputedStyle($element); // NOTE: Manually calculating height because IE's `clientHeight` isn't always // reliable. return parseFloat(styleObj.getPropertyValue('height')) + parseFloat(styleObj.getPropertyValue('padding-top')) + parseFloat(styleObj.getPropertyValue('padding-bottom')); }, getRelativeCoordinates: (element, parentElement) => { const parentElementRect = parentElement.getBoundingClientRect(); const elementRect = element.getBoundingClientRect(); return { top: elementRect.top - parentElementRect.top, left: elementRect.left - parentElementRect.left }; }, getScrollableContainer(node) { const regex = /(auto|scroll)/; const parents = (_node, ps) => { if (_node.parentNode === null) { return ps; } return parents(_node.parentNode, ps.concat([_node])); }; const style = (_node, prop) => { return getComputedStyle(_node, null).getPropertyValue(prop); }; const overflow = _node => { return (style(_node, 'overflow') + style(_node, 'overflow-y') + style(_node, 'overflow-x')); }; const scroll = _node => regex.test(overflow(_node)); /* eslint-disable consistent-return */ const scrollParent = _node => { if (!(_node instanceof HTMLElement || _node instanceof SVGElement)) { return; } const ps = parents(_node.parentNode, []); for (let i = 0; i < ps.length; i += 1) { if (scroll(ps[i])) { return ps[i]; } } return document.scrollingElement || document.documentElement; }; return scrollParent(node); } }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyMmdyaWRzdGVydjMvc3JjL2xpYi91dGlscy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUc7SUFDakIscUJBQXFCLEVBQUUsVUFBVSxRQUFxQixFQUFFLFFBQWdDO1FBQ3BGLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ3hDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQzNDLENBQUM7SUFDRCx1QkFBdUIsRUFBRSxVQUFVLFFBQXFCO1FBQ3BELFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN6QixRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUNELFlBQVksRUFBRSxVQUFVLFFBQXFCLEVBQUUsUUFBZ0M7UUFDM0UsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN4QixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBRXZCLGlDQUFpQztRQUNqQyxNQUFNLFNBQVMsR0FBRyxhQUFhLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztRQUVsRCxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUN4QyxRQUFRLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsU0FBUyxDQUFDO1FBQzlDLFFBQVEsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQUcsU0FBUyxDQUFDO1FBQzNDLFFBQVEsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsU0FBUyxDQUFDO1FBQzFDLFFBQVEsQ0FBQyxL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Z0JBQ25DLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNmLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNoQjthQUNKO1lBRUQsT0FBTyxRQUFRLENBQUMsZ0JBQWdCLElBQUksUUFBUSxDQUFDLGVBQWUsQ0FBQztRQUNqRSxDQUFDLENBQUM7UUFFRixPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJy4vRHJhZ2dhYmxlRXZlbnQnO1xyXG5cclxuZXhwb3J0IGNvbnN0IHV0aWxzID0ge1xyXG4gICAgc2V0Q3NzRWxlbWVudFBvc2l0aW9uOiBmdW5jdGlvbiAoJGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwb3NpdGlvbjoge3g6IG51bWJlciwgeTogbnVtYmVyfSkge1xyXG4gICAgICAgICRlbGVtZW50LnN0eWxlLmxlZnQgPSBwb3NpdGlvbi54ICsgJ3B4JztcclxuICAgICAgICAkZWxlbWVudC5zdHlsZS50b3AgPSBwb3NpdGlvbi55ICsgJ3B4JztcclxuICAgIH0sXHJcbiAgICByZXNldENTU0VsZW1lbnRQb3NpdGlvbjogZnVuY3Rpb24gKCRlbGVtZW50OiBIVE1MRWxlbWVudCkge1xyXG4gICAgICAgICRlbGVtZW50LnN0eWxlLmxlZnQgPSAnJztcclxuICAgICAgICAkZWxlbWVudC5zdHlsZS50b3AgPSAnJztcclxuICAgIH0sXHJcbiAgICBzZXRUcmFuc2Zvcm06IGZ1bmN0aW9uICgkZWxlbWVudDogSFRNTEVsZW1lbnQsIHBvc2l0aW9uOiB7eDogbnVtYmVyLCB5OiBudW1iZXJ9KSB7XHJcbiAgICAgICAgY29uc3QgbGVmdCA9IHBvc2l0aW9uLng7XHJcbiAgICAgICAgY29uc3QgdG9wID0gcG9zaXRpb24ueTtcclxuXHJcbiAgICAgICAgLy8gUmVwbGFjZSB1bml0bGVzcyBpdGVtcyB3aXRoIHB4XHJcbiAgICAgICAgY29uc3QgdHJhbnNsYXRlID0gYHRyYW5zbGF0ZSgke2xlZnR9cHgsJHt0b3B9cHgpYDtcclxuXHJcbiAgICAgICAgJGVsZW1lbnQuc3R5bGVbJ3RyYW5zZm9ybSddID0gdHJhbnNsYXRlO1xyXG4gICAgICAgICRlbGVtZW50LnN0eWxlWydXZWJraXRUcmFuc2Zvcm0nXSA9IHRyYW5zbGF0ZTtcclxuICAgICAgICAkZWxlbWVudC5zdHlsZVsnTW96VHJhbnNmb3JtJ10gPSB0cmFuc2xhdGU7XHJcbiAgICAgICAgJGVsZW1lbnQuc3R5bGVbJ21zVHJhbnNmb3JtJ10gPSB0cmFuc2xhdGU7XHJcbiAgICAgICAgJGVsZW1lbnQuc3R5bGVbJ09UcmFuc2Zvcm0nXSA9IHRyYW5zbGF0ZTtcclxuICAgIH0sXHJcbiAgICByZXNldFRyYW5zZm9ybTogZnVuY3Rpb24gKCRlbGVtZW50OiBIVE1MRWxlbWVudCkge1xyXG4gICAgICAgICRlbGVtZW50LnN0eWxlWyd0cmFuc2Zvcm0nXSA9ICcnO1xyXG4gICAgICAgICRlbGVtZW50LnN0eWxlWydXZWJraXRUcmFuc2Zvcm0nXSA9ICcnO1xyXG4gICAgICAgICRlbGVtZW50LnN0eWxlWydNb3pUcmFuc2Zvcm0nXSA9ICcnO1xyXG4gICAgICAgICRlbGVtZW50LnN0eWxlWydtc1RyYW5zZm9ybSddID0gJyc7XHJcbiAgICAgICAgJGVsZW1lbnQuc3R5bGVbJ09UcmFuc2Zvcm0nXSA9ICcnO1xyXG4gICAgfSxcclxuICAgIGNsZWFyU2VsZWN0aW9uOiAoKSA9PiB7XHJcbiAgICAgICAgaWYgKGRvY3VtZW50WydzZWxlY3Rpb24nXSkge1xyXG4gICAgICAgICAgICBkb2N1bWVudFsnc2VsZWN0aW9uJ10uZW1wdHkoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24pIHtcclxuICAgICAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICBpc0VsZW1lbnRGaXRDb250YWluZXI6IGZ1bmN0aW9uIChlbGVtZW50OiBIVE1MRWxlbWVudCwgY29udGFpbmVyRWw6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgY29udGFpbmVyUmVjdCA9IGNvbnRhaW5lckVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgIGNvbnN0IGVsUmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG4gICAgICAgIHJldHVybiBlbFJlY3QubGVmdCA+IGNvbnRhaW5lclJlY3QubGVmdCAmJlxyXG4gICAgICAgICAgICBlbFJlY3QucmlnaHQgPCBjb250YWluZXJSZWN0LnJpZ2h0ICYmXHJcbiAgICAgICAgICAgIGVsUmVjdC50b3AgPiBjb250YWluZXJSZWN0LnRvcCAmJlxyXG4gICAgICAgICAgICBlbFJlY3QuYm90dG9tIDwgY29udGFpbmVyUmVjdC5ib3R0b207XHJcbiAgICB9LFxyXG4gICAgaXNFbGVtZW50SW50ZXJzZWN0Q29udGFpbmVyOiBmdW5jdGlvbiAoZWxlbWVudDogSFRNTEVsZW1lbnQsIGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXJFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICBjb25zdCBlbFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgICAgICBjb25zdCBlbFdpZHRoID0gZWxSZWN0LnJpZ2h0IC0gZWxSZWN0LmxlZnQ7XHJcbiAgICAgICAgY29uc3QgZWxIZWlnaHQgPSBlbFJlY3QuYm90dG9tIC0gZWxSZWN0LnRvcDtcclxuXHJcbiAgICAgICAgcmV0dXJuIChlbFJlY3QubGVmdCArIChlbFdpZHRoIC8gMikpID4gY29udGFpbmVyUmVjdC5sZWZ0ICYmXHJcbiAgICAgICAgICAgIChlbFJlY3QucmlnaHQgLSAoZWxXaWR0aCAvIDIpKSA8IGNvbnRhaW5lclJlY3QucmlnaHQgJiZcclxuICAgICAgICAgICAgKGVsUmVjdC50b3AgKyAoZWxIZWlnaHQgLyAyKSkgPiBjb250YWluZXJSZWN0LnRvcCAmJlxyXG4gICAgICAgICAgICAoZWxSZWN0LmJvdHRvbSAtIChlbEhlaWdodCAvIDIpKSA8IGNvbnRhaW5lclJlY3QuYm90dG9tO1xyXG4gICAgfSxcclxuICAgIGlzRWxlbWVudFRvdWNoQ29udGFpbmVyOiBmdW5jdGlvbiAoZWxlbWVudDogSFRNTEVsZW1lbnQsIGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXJFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICBjb25zdCBlbFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgICAgICByZXR1cm4gZWxSZWN0LnJpZ2h0ID4gY29udGFpbmVyUmVjdC5sZWZ0ICYmXHJcbiAgICAgICAgICAgIGVsUmVjdC5ib3R0b20gPiBjb250YWluZXJSZWN0LnRvcCAmJlxyXG4gICAgICAgICAgICBlbFJlY3QubGVmdCA8IGNvbnRhaW5lclJlY3QucmlnaHQgJiZcclxuICAgICAgICAgICAgZWxSZWN0LnRvcCA8IGNvbnRhaW5lclJlY3QuYm90dG9tO1xyXG4gICAgfSxcclxuICAgIGlzQ3Vyc29yQWJvdmVFbGVtZW50OiBmdW5jdGlvbiAoZXZlbnQ6IERyYWdnYWJsZUV2ZW50LCBlbGVtZW50KTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgZWxSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGV2ZW50LnBhZ2VYID4gZWxSZWN0LmxlZnQgJiZcclxuICAgICAgICAgICAgZXZlbnQucGFnZVggPCBlbFJlY3QucmlnaHQgJiZcclxuICAgICAgICAgICAgZXZlbnQucGFnZVkgPiBlbFJlY3QudG9wICYmXHJcbiAgICAgICAgICAgIGV2ZW50LnBhZ2VZIDwgZWxSZWN0LmJvdHRvbTtcclxuICAgIH0sXHJcbiAgICBnZXRFbGVtZW50T3V0ZXJIZWlnaHQ6IGZ1bmN0aW9uICgkZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBzdHlsZU9iaiA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCRlbGVtZW50KTtcclxuICAgICAgICAvLyBOT1RFOiBNYW51YWxseSBjYWxjdWxhdGluZyBoZWlnaHQgYmVjYXVzZSBJRSdzIGBjbGllbnRIZWlnaHRgIGlzbid0IGFsd2F5c1xyXG4gICAgICAgIC8vIHJlbGlhYmxlLlxyXG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHN0eWxlT2JqLmdldFByb3BlcnR5VmFsdWUoJ2hlaWdodCcpKSArXHJcbiAgICAgICAgICAgIHBhcnNlRmxvYXQoc3R5bGVPYmouZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy10b3AnKSkgK1xyXG4gICAgICAgICAgICBwYXJzZUZsb2F0KHN0eWxlT2JqLmdldFByb3BlcnR5VmFsdWUoJ3BhZGRpbmctYm90dG9tJykpO1xyXG4gICAgfSxcclxuICAgIGdldFJlbGF0aXZlQ29vcmRpbmF0ZXM6IChlbGVtZW50LCBwYXJlbnRFbGVtZW50KToge3RvcDogbnVtYmVyLCBsZWZ0OiBudW1iZXJ9ID0+IHtcclxuICAgICAgICBjb25zdCBwYXJlbnRFbGVtZW50UmVjdCA9IHBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0b3A6IGVsZW1lbnRSZWN0LnRvcCAtIHBhcmVudEVsZW1lbnRSZWN0LnRvcCxcclxuICAgICAgICAgICAgbGVmdDogZWxlbWVudFJlY3QubGVmdCAtIHBhcmVudEVsZW1lbnRSZWN0LmxlZnRcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIGdldFNjcm9sbGFibGVDb250YWluZXIobm9kZSkge1xyXG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gLyhhdXRvfHNjcm9sbCkvO1xyXG4gICAgICAgIGNvbnN0IHBhcmVudHMgPSAoX25vZGUsIHBzKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChfbm9kZS5wYXJlbnROb2RlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHBhcmVudHMoX25vZGUucGFyZW50Tm9kZSwgcHMuY29uY2F0KFtfbm9kZV0pKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBzdHlsZSA9IChfbm9kZSwgcHJvcCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShfbm9kZSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShwcm9wKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IG92ZXJmbG93ID0gX25vZGUgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgc3R5bGUoX25vZGUsICdvdmVyZmxvdycpICsgc3R5bGUoX25vZGUsICdvdmVyZmxvdy15JykgKyBzdHlsZShfbm9kZSwgJ292ZXJmbG93LXgnKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsID0gX25vZGUgPT4gcmVnZXgudGVzdChvdmVyZmxvdyhfbm9kZSkpO1xyXG5cclxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBjb25zaXN0ZW50LXJldHVybiAqL1xyXG4gICAgICAgIGNvbnN0IHNjcm9sbFBhcmVudCA9IF9ub2RlID0+IHtcclxuICAgICAgICAgICAgaWYgKCEoX25vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCB8fCBfbm9kZSBpbnN0YW5jZW9mIFNWR0VsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHBzID0gcGFyZW50cyhfbm9kZS5wYXJlbnROb2RlLCBbXSk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBzLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsKHBzW2ldKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwc1tpXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiBzY3JvbGxQYXJlbnQobm9kZSk7XHJcbiAgICB9XHJcbn07XHJcbiJdfQ==