src/assets/primeng/components/dom/domhandler.js
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", { value: true });
var core_1 = require("@angular/core");
var DomHandler = (function () {
function DomHandler() {
this.calculatedScrollbarWidth = null;
}
DomHandler.prototype.addClass = function (element, className) {
if (element.classList)
element.classList.add(className);
else
element.className += ' ' + className;
};
DomHandler.prototype.addMultipleClasses = function (element, className) {
if (element.classList) {
var styles = className.split(' ');
for (var i = 0; i < styles.length; i++) {
element.classList.add(styles[i]);
}
}
else {
var styles = className.split(' ');
for (var i = 0; i < styles.length; i++) {
element.className += ' ' + styles[i];
}
}
};
DomHandler.prototype.removeClass = function (element, className) {
if (element.classList)
element.classList.remove(className);
else
element.className = element.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' ');
};
DomHandler.prototype.hasClass = function (element, className) {
if (element.classList)
return element.classList.contains(className);
else
return new RegExp('(^| )' + className + '( |$)', 'gi').test(element.className);
};
DomHandler.prototype.siblings = function (element) {
return Array.prototype.filter.call(element.parentNode.children, function (child) {
return child !== element;
});
};
DomHandler.prototype.find = function (element, selector) {
return element.querySelectorAll(selector);
};
DomHandler.prototype.findSingle = function (element, selector) {
return element.querySelector(selector);
};
DomHandler.prototype.index = function (element) {
var children = element.parentNode.childNodes;
var num = 0;
for (var i = 0; i < children.length; i++) {
if (children[i] == element)
return num;
if (children[i].nodeType == 1)
num++;
}
return -1;
};
DomHandler.prototype.relativePosition = function (element, target) {
var elementDimensions = element.offsetParent ? { width: element.offsetWidth, height: element.offsetHeight } : this.getHiddenElementDimensions(element);
var targetHeight = target.offsetHeight;
var targetWidth = target.offsetWidth;
var targetOffset = target.getBoundingClientRect();
var windowScrollTop = this.getWindowScrollTop();
var viewport = this.getViewport();
var top, left;
if ((targetOffset.top + targetHeight + elementDimensions.height) > viewport.height) {
top = -1 * (elementDimensions.height);
if (targetOffset.top + top < 0) {
top = 0;
}
}
else {
top = targetHeight;
}
if ((targetOffset.left + elementDimensions.width) > viewport.width)
left = targetWidth - elementDimensions.width;
else
left = 0;
element.style.top = top + 'px';
element.style.left = left + 'px';
};
DomHandler.prototype.absolutePosition = function (element, target) {
var elementDimensions = element.offsetParent ? { width: element.offsetWidth, height: element.offsetHeight } : this.getHiddenElementDimensions(element);
var elementOuterHeight = elementDimensions.height;
var elementOuterWidth = elementDimensions.width;
var targetOuterHeight = target.offsetHeight;
var targetOuterWidth = target.offsetWidth;
var targetOffset = target.getBoundingClientRect();
var windowScrollTop = this.getWindowScrollTop();
var windowScrollLeft = this.getWindowScrollLeft();
var viewport = this.getViewport();
var top, left;
if (targetOffset.top + targetOuterHeight + elementOuterHeight > viewport.height) {
top = targetOffset.top + windowScrollTop - elementOuterHeight;
if (top < 0) {
top = 0 + windowScrollTop;
}
}
else {
top = targetOuterHeight + targetOffset.top + windowScrollTop;
}
if (targetOffset.left + targetOuterWidth + elementOuterWidth > viewport.width)
left = targetOffset.left + windowScrollLeft + targetOuterWidth - elementOuterWidth;
else
left = targetOffset.left + windowScrollLeft;
element.style.top = top + 'px';
element.style.left = left + 'px';
};
DomHandler.prototype.getHiddenElementOuterHeight = function (element) {
element.style.visibility = 'hidden';
element.style.display = 'block';
var elementHeight = element.offsetHeight;
element.style.display = 'none';
element.style.visibility = 'visible';
return elementHeight;
};
DomHandler.prototype.getHiddenElementOuterWidth = function (element) {
element.style.visibility = 'hidden';
element.style.display = 'block';
var elementWidth = element.offsetWidth;
element.style.display = 'none';
element.style.visibility = 'visible';
return elementWidth;
};
DomHandler.prototype.getHiddenElementDimensions = function (element) {
var dimensions = {};
element.style.visibility = 'hidden';
element.style.display = 'block';
dimensions.width = element.offsetWidth;
dimensions.height = element.offsetHeight;
element.style.display = 'none';
element.style.visibility = 'visible';
return dimensions;
};
DomHandler.prototype.scrollInView = function (container, item) {
var borderTopValue = getComputedStyle(container).getPropertyValue('borderTopWidth');
var borderTop = borderTopValue ? parseFloat(borderTopValue) : 0;
var paddingTopValue = getComputedStyle(container).getPropertyValue('paddingTop');
var paddingTop = paddingTopValue ? parseFloat(paddingTopValue) : 0;
var containerRect = container.getBoundingClientRect();
var itemRect = item.getBoundingClientRect();
var offset = (itemRect.top + document.body.scrollTop) - (containerRect.top + document.body.scrollTop) - borderTop - paddingTop;
var scroll = container.scrollTop;
var elementHeight = container.clientHeight;
var itemHeight = this.getOuterHeight(item);
if (offset < 0) {
container.scrollTop = scroll + offset;
}
else if ((offset + itemHeight) > elementHeight) {
container.scrollTop = scroll + offset - elementHeight + itemHeight;
}
};
DomHandler.prototype.fadeIn = function (element, duration) {
element.style.opacity = 0;
var last = +new Date();
var opacity = 0;
var tick = function () {
opacity = +element.style.opacity + (new Date().getTime() - last) / duration;
element.style.opacity = opacity;
last = +new Date();
if (+opacity < 1) {
(window.requestAnimationFrame && requestAnimationFrame(tick)) || setTimeout(tick, 16);
}
};
tick();
};
DomHandler.prototype.fadeOut = function (element, ms) {
var opacity = 1, interval = 50, duration = ms, gap = interval / duration;
var fading = setInterval(function () {
opacity = opacity - gap;
if (opacity <= 0) {
opacity = 0;
clearInterval(fading);
}
element.style.opacity = opacity;
}, interval);
};
DomHandler.prototype.getWindowScrollTop = function () {
var doc = document.documentElement;
return (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);
};
DomHandler.prototype.getWindowScrollLeft = function () {
var doc = document.documentElement;
return (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);
};
DomHandler.prototype.matches = function (element, selector) {
var p = Element.prototype;
var f = p['matches'] || p.webkitMatchesSelector || p['mozMatchesSelector'] || p.msMatchesSelector || function (s) {
return [].indexOf.call(document.querySelectorAll(s), this) !== -1;
};
return f.call(element, selector);
};
DomHandler.prototype.getOuterWidth = function (el, margin) {
var width = el.offsetWidth;
if (margin) {
var style = getComputedStyle(el);
width += parseFloat(style.marginLeft) + parseFloat(style.marginRight);
}
return width;
};
DomHandler.prototype.getHorizontalPadding = function (el) {
var style = getComputedStyle(el);
return parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);
};
DomHandler.prototype.getHorizontalMargin = function (el) {
var style = getComputedStyle(el);
return parseFloat(style.marginLeft) + parseFloat(style.marginRight);
};
DomHandler.prototype.innerWidth = function (el) {
var width = el.offsetWidth;
var style = getComputedStyle(el);
width += parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);
return width;
};
DomHandler.prototype.width = function (el) {
var width = el.offsetWidth;
var style = getComputedStyle(el);
width -= parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);
return width;
};
DomHandler.prototype.getInnerHeight = function (el) {
var height = el.offsetHeight;
var style = getComputedStyle(el);
height += parseFloat(style.paddingTop) + parseFloat(style.paddingBottom);
return height;
};
DomHandler.prototype.getOuterHeight = function (el, margin) {
var height = el.offsetHeight;
if (margin) {
var style = getComputedStyle(el);
height += parseFloat(style.marginTop) + parseFloat(style.marginBottom);
}
return height;
};
DomHandler.prototype.getHeight = function (el) {
var height = el.offsetHeight;
var style = getComputedStyle(el);
height -= parseFloat(style.paddingTop) + parseFloat(style.paddingBottom) + parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);
return height;
};
DomHandler.prototype.getWidth = function (el) {
var width = el.offsetWidth;
var style = getComputedStyle(el);
width -= parseFloat(style.paddingLeft) + parseFloat(style.paddingRight) + parseFloat(style.borderLeftWidth) + parseFloat(style.borderRightWidth);
return width;
};
DomHandler.prototype.getViewport = function () {
var win = window, d = document, e = d.documentElement, g = d.getElementsByTagName('body')[0], w = win.innerWidth || e.clientWidth || g.clientWidth, h = win.innerHeight || e.clientHeight || g.clientHeight;
return { width: w, height: h };
};
DomHandler.prototype.getOffset = function (el) {
var rect = el.getBoundingClientRect();
return {
top: rect.top + document.body.scrollTop,
left: rect.left + document.body.scrollLeft
};
};
DomHandler.prototype.getUserAgent = function () {
return navigator.userAgent;
};
DomHandler.prototype.isIE = function () {
var ua = window.navigator.userAgent;
var msie = ua.indexOf('MSIE ');
if (msie > 0) {
// IE 10 or older => return version number
return true;
}
var trident = ua.indexOf('Trident/');
if (trident > 0) {
// IE 11 => return version number
var rv = ua.indexOf('rv:');
return true;
}
var edge = ua.indexOf('Edge/');
if (edge > 0) {
// Edge (IE 12+) => return version number
return true;
}
// other browser
return false;
};
DomHandler.prototype.appendChild = function (element, target) {
if (this.isElement(target))
target.appendChild(element);
else if (target.el && target.el.nativeElement)
target.el.nativeElement.appendChild(element);
else
throw 'Cannot append ' + target + ' to ' + element;
};
DomHandler.prototype.removeChild = function (element, target) {
if (this.isElement(target))
target.removeChild(element);
else if (target.el && target.el.nativeElement)
target.el.nativeElement.removeChild(element);
else
throw 'Cannot remove ' + element + ' from ' + target;
};
DomHandler.prototype.isElement = function (obj) {
return (typeof HTMLElement === "object" ? obj instanceof HTMLElement :
obj && typeof obj === "object" && obj !== null && obj.nodeType === 1 && typeof obj.nodeName === "string");
};
DomHandler.prototype.calculateScrollbarWidth = function () {
if (this.calculatedScrollbarWidth !== null)
return this.calculatedScrollbarWidth;
var scrollDiv = document.createElement("div");
scrollDiv.className = "ui-scrollbar-measure";
document.body.appendChild(scrollDiv);
var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
document.body.removeChild(scrollDiv);
this.calculatedScrollbarWidth = scrollbarWidth;
return scrollbarWidth;
};
DomHandler.prototype.invokeElementMethod = function (element, methodName, args) {
element[methodName].apply(element, args);
};
DomHandler.prototype.clearSelection = function () {
if (window.getSelection) {
if (window.getSelection().empty) {
window.getSelection().empty();
}
else if (window.getSelection().removeAllRanges && window.getSelection().rangeCount > 0 && window.getSelection().getRangeAt(0).getClientRects().length > 0) {
window.getSelection().removeAllRanges();
}
}
else if (document['selection'] && document['selection'].empty) {
try {
document['selection'].empty();
}
catch (error) {
//ignore IE bug
}
}
};
return DomHandler;
}());
DomHandler.zindex = 1000;
DomHandler = __decorate([
core_1.Injectable()
], DomHandler);
exports.DomHandler = DomHandler;
//# sourceMappingURL=domhandler.js.map