UNPKG

dom-tools

Version:

A tiny collection of DOM helpers for IE8+.

64 lines (47 loc) 1.68 kB
'use strict'; // A modified version of "getComputedStyle" from react-bootstrap/dom-helpers v2.4.0 var camelize = require('./utils/camelizeStyle'); var rposition = /^(top|right|bottom|left)$/; var rnumnonpx = /^([+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|))(?!px)[a-z%]+$/i; module.exports = function _getComputedStyle(node) { if (!node) { throw new TypeError("No Element passed to `getComputedStyle()`"); } var doc = node.ownerDocument; return "defaultView" in doc ? doc.defaultView.opener ? node.ownerDocument.defaultView.getComputedStyle(node, null) : window.getComputedStyle(node, null) : { //ie 8 "magic" from: https://github.com/jquery/jquery/blob/1.11-stable/src/css/curCSS.js#L72 getPropertyValue: function (prop) { var style = node.style; prop = camelize(prop); if (prop == 'float') { prop = 'styleFloat'; } var current = node.currentStyle[prop] || null; if (current == null && style && style[prop]) { current = style[prop]; } if (rnumnonpx.test(current) && !rposition.test(prop)) { // Remember the original values var left = style.left; var runStyle = node.runtimeStyle; var rsLeft = runStyle && runStyle.left; // Put in the new values to get a computed value out if (rsLeft) { runStyle.left = node.currentStyle.left; } style.left = prop === "fontSize" ? "1em" : current; current = style.pixelLeft + "px"; // Revert the changed values style.left = left; if (rsLeft) { runStyle.left = rsLeft; } } return current; } } };