devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
68 lines (50 loc) • 2.04 kB
JavaScript
var window = require("../../core/utils/window").getWindow();
var getSizeByStyles = function getSizeByStyles(elementStyles, styles) {
var result = 0;
styles.forEach(function (style) {
result += parseFloat(elementStyles[style]) || 0;
});
return result;
};
var getElementBoxParams = function getElementBoxParams(name, elementStyles) {
var beforeName = name === "width" ? "Left" : "Top";
var afterName = name === "width" ? "Right" : "Bottom";
return {
padding: getSizeByStyles(elementStyles, ["padding" + beforeName, "padding" + afterName]),
border: getSizeByStyles(elementStyles, ["border" + beforeName + "Width", "border" + afterName + "Width"]),
margin: getSizeByStyles(elementStyles, ["margin" + beforeName, "margin" + afterName])
};
};
var getBoxSizingOffset = function getBoxSizingOffset(name, elementStyles, boxParams) {
var size = elementStyles[name];
if (elementStyles.boxSizing === "border-box" && size.length && size[size.length - 1] !== "%") {
return boxParams.border + boxParams.padding;
}
return 0;
};
var getSize = function getSize(element, name, include) {
var elementStyles = window.getComputedStyle(element);
var boxParams = getElementBoxParams(name, elementStyles);
var clientRect = element.getClientRects().length;
var boundingClientRect = element.getBoundingClientRect()[name];
var result = clientRect ? boundingClientRect : 0;
if (result <= 0) {
result = parseFloat(elementStyles[name] || element.style[name]) || 0;
result -= getBoxSizingOffset(name, elementStyles, boxParams);
} else {
result -= boxParams.padding + boxParams.border;
}
if (include.paddings) {
result += boxParams.padding;
}
if (include.borders) {
result += boxParams.border;
}
if (include.margins) {
result += boxParams.margin;
}
return result;
};
exports.getSize = getSize;
exports.getElementBoxParams = getElementBoxParams;
;