fela-dom
Version:
Fela package for working with the DOM
65 lines (55 loc) • 1.94 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = insertRule;
var _felaUtils = require("fela-utils");
function insertRule(_ref, renderer, node) {
var selector = _ref.selector,
declaration = _ref.declaration,
support = _ref.support,
media = _ref.media,
pseudo = _ref.pseudo;
var nodeReference = media + support;
try {
var score = (0, _felaUtils.getRuleScore)(renderer.ruleOrder, pseudo);
var cssRules = node.sheet.cssRules;
var index = cssRules.length; // This heavily optimises the amount of rule iterations we need
// due to most rules having a score=0 anyways
if (score === 0) {
if (renderer.scoreIndex[nodeReference] === undefined) {
index = 0;
} else {
index = renderer.scoreIndex[nodeReference] + 1;
}
} else {
// we start iterating from the last score=0 entry
// to correctly inject pseudo classes etc.
var startIndex = renderer.scoreIndex[nodeReference] || 0;
for (var i = startIndex, len = cssRules.length; i < len; ++i) {
if (cssRules[i].score > score) {
index = i;
break;
}
}
}
var cssRule = (0, _felaUtils.generateCSSRule)(selector, declaration);
if (support.length > 0) {
var cssSupportRule = (0, _felaUtils.generateCSSSupportRule)(support, cssRule);
node.sheet.insertRule(cssSupportRule, index);
} else {
node.sheet.insertRule(cssRule, index);
}
if (score === 0) {
renderer.scoreIndex[nodeReference] = index;
}
cssRules[index].score = score;
} catch (e) {// We're disabled these warnings due to false-positive errors with browser prefixes
// See https://github.com/robinweser/fela/issues/634
// console.warn(
// `An error occurred while inserting the rules into DOM.\n`,
// declaration.replace(/;/g, ';\n'),
// e
// )
}
}