UNPKG

@blare/angular2gridster

Version:

[![npm version](https://badge.fury.io/js/angular2gridster.svg)](https://badge.fury.io/js/angular2gridster)

147 lines 18.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc */ /** @type {?} */ export var 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) { /** @type {?} */ var left = position.x; /** @type {?} */ var top = position.y; // Replace unitless items with px /** @type {?} */ var 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: function () { if (document['selection']) { document['selection'].empty(); } else if (window.getSelection) { window.getSelection().removeAllRanges(); } }, isElementFitContainer: function (element, containerEl) { /** @type {?} */ var containerRect = containerEl.getBoundingClientRect(); /** @type {?} */ var elRect = element.getBoundingClientRect(); return elRect.left > containerRect.left && elRect.right < containerRect.right && elRect.top > containerRect.top && elRect.bottom < containerRect.bottom; }, isElementIntersectContainer: function (element, containerEl) { /** @type {?} */ var containerRect = containerEl.getBoundingClientRect(); /** @type {?} */ var elRect = element.getBoundingClientRect(); /** @type {?} */ var elWidth = elRect.right - elRect.left; /** @type {?} */ var 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) { /** @type {?} */ var containerRect = containerEl.getBoundingClientRect(); /** @type {?} */ var elRect = element.getBoundingClientRect(); return elRect.right > containerRect.left && elRect.bottom > containerRect.top && elRect.left < containerRect.right && elRect.top < containerRect.bottom; }, isCursorAboveElement: function (event, element) { /** @type {?} */ var elRect = element.getBoundingClientRect(); return event.pageX > elRect.left && event.pageX < elRect.right && event.pageY > elRect.top && event.pageY < elRect.bottom; }, getElementOuterHeight: function ($element) { /** @type {?} */ var 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: function (element, parentElement) { /** @type {?} */ var parentElementRect = parentElement.getBoundingClientRect(); /** @type {?} */ var elementRect = element.getBoundingClientRect(); return { top: elementRect.top - parentElementRect.top, left: elementRect.left - parentElementRect.left }; }, getScrollableContainer: /** * @param {?} node * @return {?} */ function (node) { /** @type {?} */ var regex = /(auto|scroll)/; /** @type {?} */ var parents = function (_node, ps) { if (_node.parentNode === null) { return ps; } return parents(_node.parentNode, ps.concat([_node])); }; /** @type {?} */ var style = function (_node, prop) { return getComputedStyle(_node, null).getPropertyValue(prop); }; /** @type {?} */ var overflow = function (_node) { return (style(_node, 'overflow') + style(_node, 'overflow-y') + style(_node, 'overflow-x')); }; /** @type {?} */ var scroll = function (_node) { return regex.test(overflow(_node)); }; /* eslint-disable consistent-return */ /** @type {?} */ var scrollParent = function (_node) { if (!(_node instanceof HTMLElement || _node instanceof SVGElement)) { return; } /** @type {?} */ var ps = parents(_node.parentNode, []); for (var 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYmxhcmUvYW5ndWxhcjJncmlkc3Rlci8iLCJzb3VyY2VzIjpbImxpYi91dGlscy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUdBLE1BQU0sS0FBTyxLQUFLLEdBQUc7SUFDakIscUJBQXFCLEVBQUUsVUFBVSxRQUFxQixFQUFFLFFBQWdDO1FBQ3BGLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ3hDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQzNDLENBQUM7SUFDRCx1QkFBdUIsRUFBRSxVQUFVLFFBQXFCO1FBQ3BELFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN6QixRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUNELFlBQVksRUFBRSxVQUFVLFFBQXFCLEVBQUUsUUFBZ0M7O1lBQ3JFLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQzs7WUFDakIsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDOzs7WUFHaEIsU0FBUyxHQUFHLGVBQWEsSUFBSSxXQUFNLEdBQUcsUUFBSztRQUVqRCxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUN4QyxRQUFRLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsU0FBUyxDQUFDO1FBQzlDLFFBQVEsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQUcsU0FBUyxDQUFDO1FBQzNDLFFBQVEsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsU0FBUyxDQUFDO1FBQzFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBQzdDLENBQUM7SUFDRCxjQUFjLEVB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Z2dhYmxlRXZlbnQnO1xuXG5leHBvcnQgY29uc3QgdXRpbHMgPSB7XG4gICAgc2V0Q3NzRWxlbWVudFBvc2l0aW9uOiBmdW5jdGlvbiAoJGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwb3NpdGlvbjoge3g6IG51bWJlciwgeTogbnVtYmVyfSkge1xuICAgICAgICAkZWxlbWVudC5zdHlsZS5sZWZ0ID0gcG9zaXRpb24ueCArICdweCc7XG4gICAgICAgICRlbGVtZW50LnN0eWxlLnRvcCA9IHBvc2l0aW9uLnkgKyAncHgnO1xuICAgIH0sXG4gICAgcmVzZXRDU1NFbGVtZW50UG9zaXRpb246IGZ1bmN0aW9uICgkZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgJGVsZW1lbnQuc3R5bGUubGVmdCA9ICcnO1xuICAgICAgICAkZWxlbWVudC5zdHlsZS50b3AgPSAnJztcbiAgICB9LFxuICAgIHNldFRyYW5zZm9ybTogZnVuY3Rpb24gKCRlbGVtZW50OiBIVE1MRWxlbWVudCwgcG9zaXRpb246IHt4OiBudW1iZXIsIHk6IG51bWJlcn0pIHtcbiAgICAgICAgY29uc3QgbGVmdCA9IHBvc2l0aW9uLng7XG4gICAgICAgIGNvbnN0IHRvcCA9IHBvc2l0aW9uLnk7XG5cbiAgICAgICAgLy8gUmVwbGFjZSB1bml0bGVzcyBpdGVtcyB3aXRoIHB4XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZSA9IGB0cmFuc2xhdGUoJHtsZWZ0fXB4LCR7dG9wfXB4KWA7XG5cbiAgICAgICAgJGVsZW1lbnQuc3R5bGVbJ3RyYW5zZm9ybSddID0gdHJhbnNsYXRlO1xuICAgICAgICAkZWxlbWVudC5zdHlsZVsnV2Via2l0VHJhbnNmb3JtJ10gPSB0cmFuc2xhdGU7XG4gICAgICAgICRlbGVtZW50LnN0eWxlWydNb3pUcmFuc2Zvcm0nXSA9IHRyYW5zbGF0ZTtcbiAgICAgICAgJGVsZW1lbnQuc3R5bGVbJ21zVHJhbnNmb3JtJ10gPSB0cmFuc2xhdGU7XG4gICAgICAgICRlbGVtZW50LnN0eWxlWydPVHJhbnNmb3JtJ10gPSB0cmFuc2xhdGU7XG4gICAgfSxcbiAgICByZXNldFRyYW5zZm9ybTogZnVuY3Rpb24gKCRlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgICAgICAkZWxlbWVudC5zdHlsZVsndHJhbnNmb3JtJ10gPSAnJztcbiAgICAgICAgJGVsZW1lbnQuc3R5bGVbJ1dlYmtpdFRyYW5zZm9ybSddID0gJyc7XG4gICAgICAgICRlbGVtZW50LnN0eWxlWydNb3pUcmFuc2Zvcm0nXSA9ICcnO1xuICAgICAgICAkZWxlbWVudC5zdHlsZVsnbXNUcmFuc2Zvcm0nXSA9ICcnO1xuICAgICAgICAkZWxlbWVudC5zdHlsZVsnT1RyYW5zZm9ybSddID0gJyc7XG4gICAgfSxcbiAgICBjbGVhclNlbGVjdGlvbjogKCkgPT4ge1xuICAgICAgICBpZiAoZG9jdW1lbnRbJ3NlbGVjdGlvbiddKSB7XG4gICAgICAgICAgICBkb2N1bWVudFsnc2VsZWN0aW9uJ10uZW1wdHkoKTtcbiAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGlzRWxlbWVudEZpdENvbnRhaW5lcjogZnVuY3Rpb24gKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBjb250YWluZXJFbDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyUmVjdCA9IGNvbnRhaW5lckVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBlbFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIHJldHVybiBlbFJlY3QubGVmdCA+IGNvbnRhaW5lclJlY3QubGVmdCAmJlxuICAgICAgICAgICAgZWxSZWN0LnJpZ2h0IDwgY29udGFpbmVyUmVjdC5yaWdodCAmJlxuICAgICAgICAgICAgZWxSZWN0LnRvcCA+IGNvbnRhaW5lclJlY3QudG9wICYmXG4gICAgICAgICAgICBlbFJlY3QuYm90dG9tIDwgY29udGFpbmVyUmVjdC5ib3R0b207XG4gICAgfSxcbiAgICBpc0VsZW1lbnRJbnRlcnNlY3RDb250YWluZXI6IGZ1bmN0aW9uIChlbGVtZW50OiBIVE1MRWxlbWVudCwgY29udGFpbmVyRWw6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXJFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgZWxSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBjb25zdCBlbFdpZHRoID0gZWxSZWN0LnJpZ2h0IC0gZWxSZWN0LmxlZnQ7XG4gICAgICAgIGNvbnN0IGVsSGVpZ2h0ID0gZWxSZWN0LmJvdHRvbSAtIGVsUmVjdC50b3A7XG5cbiAgICAgICAgcmV0dXJuIChlbFJlY3QubGVmdCArIChlbFdpZHRoIC8gMikpID4gY29udGFpbmVyUmVjdC5sZWZ0ICYmXG4gICAgICAgICAgICAoZWxSZWN0LnJpZ2h0IC0gKGVsV2lkdGggLyAyKSkgPCBjb250YWluZXJSZWN0LnJpZ2h0ICYmXG4gICAgICAgICAgICAoZWxSZWN0LnRvcCArIChlbEhlaWdodCAvIDIpKSA+IGNvbnRhaW5lclJlY3QudG9wICYmXG4gICAgICAgICAgICAoZWxSZWN0LmJvdHRvbSAtIChlbEhlaWdodCAvIDIpKSA8IGNvbnRhaW5lclJlY3QuYm90dG9tO1xuICAgIH0sXG4gICAgaXNFbGVtZW50VG91Y2hDb250YWluZXI6IGZ1bmN0aW9uIChlbGVtZW50OiBIVE1MRWxlbWVudCwgY29udGFpbmVyRWw6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXJFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgZWxSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICByZXR1cm4gZWxSZWN0LnJpZ2h0ID4gY29udGFpbmVyUmVjdC5sZWZ0ICYmXG4gICAgICAgICAgICBlbFJlY3QuYm90dG9tID4gY29udGFpbmVyUmVjdC50b3AgJiZcbiAgICAgICAgICAgIGVsUmVjdC5sZWZ0IDwgY29udGFpbmVyUmVjdC5yaWdodCAmJlxuICAgICAgICAgICAgZWxSZWN0LnRvcCA8IGNvbnRhaW5lclJlY3QuYm90dG9tO1xuICAgIH0sXG4gICAgaXNDdXJzb3JBYm92ZUVsZW1lbnQ6IGZ1bmN0aW9uIChldmVudDogRHJhZ2dhYmxlRXZlbnQsIGVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZWxSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICByZXR1cm4gZXZlbnQucGFnZVggPiBlbFJlY3QubGVmdCAmJlxuICAgICAgICAgICAgZXZlbnQucGFnZVggPCBlbFJlY3QucmlnaHQgJiZcbiAgICAgICAgICAgIGV2ZW50LnBhZ2VZID4gZWxSZWN0LnRvcCAmJlxuICAgICAgICAgICAgZXZlbnQucGFnZVkgPCBlbFJlY3QuYm90dG9tO1xuICAgIH0sXG4gICAgZ2V0RWxlbWVudE91dGVySGVpZ2h0OiBmdW5jdGlvbiAoJGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHN0eWxlT2JqID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoJGVsZW1lbnQpO1xuICAgICAgICAvLyBOT1RFOiBNYW51YWxseSBjYWxjdWxhdGluZyBoZWlnaHQgYmVjYXVzZSBJRSdzIGBjbGllbnRIZWlnaHRgIGlzbid0IGFsd2F5c1xuICAgICAgICAvLyByZWxpYWJsZS5cbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoc3R5bGVPYmouZ2V0UHJvcGVydHlWYWx1ZSgnaGVpZ2h0JykpICtcbiAgICAgICAgICAgIHBhcnNlRmxvYXQoc3R5bGVPYmouZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy10b3AnKSkgK1xuICAgICAgICAgICAgcGFyc2VGbG9hdChzdHlsZU9iai5nZXRQcm9wZXJ0eVZhbHVlKCdwYWRkaW5nLWJvdHRvbScpKTtcbiAgICB9LFxuICAgIGdldFJlbGF0aXZlQ29vcmRpbmF0ZXM6IChlbGVtZW50LCBwYXJlbnRFbGVtZW50KToge3RvcDogbnVtYmVyLCBsZWZ0OiBudW1iZXJ9ID0+IHtcbiAgICAgICAgY29uc3QgcGFyZW50RWxlbWVudFJlY3QgPSBwYXJlbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBlbGVtZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvcDogZWxlbWVudFJlY3QudG9wIC0gcGFyZW50RWxlbWVudFJlY3QudG9wLFxuICAgICAgICAgICAgbGVmdDogZWxlbWVudFJlY3QubGVmdCAtIHBhcmVudEVsZW1lbnRSZWN0LmxlZnRcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIGdldFNjcm9sbGFibGVDb250YWluZXIobm9kZSkge1xuICAgICAgICBjb25zdCByZWdleCA9IC8oYXV0b3xzY3JvbGwpLztcbiAgICAgICAgY29uc3QgcGFyZW50cyA9IChfbm9kZSwgcHMpID0+IHtcbiAgICAgICAgICAgIGlmIChfbm9kZS5wYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHBhcmVudHMoX25vZGUucGFyZW50Tm9kZSwgcHMuY29uY2F0KFtfbm9kZV0pKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBzdHlsZSA9IChfbm9kZSwgcHJvcCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUoX25vZGUsIG51bGwpLmdldFByb3BlcnR5VmFsdWUocHJvcCk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG92ZXJmbG93ID0gX25vZGUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBzdHlsZShfbm9kZSwgJ292ZXJmbG93JykgKyBzdHlsZShfbm9kZSwgJ292ZXJmbG93LXknKSArIHN0eWxlKF9ub2RlLCAnb3ZlcmZsb3cteCcpXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzY3JvbGwgPSBfbm9kZSA9PiByZWdleC50ZXN0KG92ZXJmbG93KF9ub2RlKSk7XG5cbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUgY29uc2lzdGVudC1yZXR1cm4gKi9cbiAgICAgICAgY29uc3Qgc2Nyb2xsUGFyZW50ID0gX25vZGUgPT4ge1xuICAgICAgICAgICAgaWYgKCEoX25vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCB8fCBfbm9kZSBpbnN0YW5jZW9mIFNWR0VsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwcyA9IHBhcmVudHMoX25vZGUucGFyZW50Tm9kZSwgW10pO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNjcm9sbChwc1tpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBzW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBzY3JvbGxQYXJlbnQobm9kZSk7XG4gICAgfVxufTtcbiJdfQ==