UNPKG

fela-dom

Version:

Fela package for working with the DOM

69 lines (53 loc) 2.85 kB
"use strict"; 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); } } }); }