fela-dom
Version:
Fela package for working with the DOM
69 lines (53 loc) • 2.85 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = rehydrate;
var _fastLoops = require("fast-loops");
var _felaUtils = require("fela-utils");
var _rehydrateSupportRules = _interopRequireDefault(require("./rehydration/rehydrateSupportRules"));
var _rehydrateRules = _interopRequireDefault(require("./rehydration/rehydrateRules"));
var _render = _interopRequireDefault(require("./render"));
var _rehydrateKeyframes = _interopRequireDefault(require("./rehydration/rehydrateKeyframes"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
var CLASSNAME_REGEX = /[.][a-z0-9_-]*/gi; // TODO: static, font
function rehydrate(renderer) {
var targetDocument = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document;
(0, _render["default"])(renderer, targetDocument);
(0, _fastLoops.arrayEach)(targetDocument.querySelectorAll('[data-fela-type]'), function (node) {
var rehydrationAttribute = node.getAttribute('data-fela-rehydration') || -1;
var rehydrationIndex = renderer.uniqueRuleIdentifier || parseInt(rehydrationAttribute, 10); // skip rehydration if no rehydration index is set
// this index is set to -1 if something blocks rehydration
if (rehydrationIndex !== -1) {
var type = node.getAttribute('data-fela-type') || '';
var media = node.getAttribute('media') || '';
var support = node.getAttribute('data-fela-support') || '';
var css = node.textContent;
renderer.uniqueRuleIdentifier = rehydrationIndex;
var reference = type + media + support;
renderer.nodes[reference] = node;
if (type === _felaUtils.RULE_TYPE) {
if (support) {
(0, _rehydrateSupportRules["default"])(css, media, renderer.cache, renderer.specificityPrefix);
} else {
(0, _rehydrateRules["default"])(css, media, '', renderer.cache, renderer.specificityPrefix);
} // On Safari, style sheets with IE-specific media queries
// can yield null for node.sheet
// https://github.com/robinweser/fela/issues/431#issuecomment-423239591
if (node.sheet && node.sheet.cssRules) {
var nodeReference = media + support;
(0, _fastLoops.arrayEach)(node.sheet.cssRules, function (rule, index) {
var selectorText = rule.conditionText ? rule.cssRules[0].selectorText : rule.selectorText;
var score = (0, _felaUtils.getRuleScore)(renderer.ruleOrder, selectorText.split(CLASSNAME_REGEX)[1]);
if (score === 0) {
renderer.scoreIndex[nodeReference] = index;
}
rule.score = score;
});
}
} else if (type === _felaUtils.KEYFRAME_TYPE) {
(0, _rehydrateKeyframes["default"])(css, renderer.cache);
}
}
});
}