UNPKG

rc-util

Version:
64 lines (48 loc) 1.72 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.injectCSS = injectCSS; exports.updateCSS = updateCSS; var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _canUseDom = _interopRequireDefault(require("./canUseDom")); var MARK_KEY = "rc-util-key"; function getContainer(option) { if (option.attachTo) { return option.attachTo; } var head = document.querySelector('head'); return head || document.body; } function injectCSS(css) { var _option$csp; var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; if (!(0, _canUseDom.default)()) { return null; } var styleNode = document.createElement('style'); styleNode.nonce = (_option$csp = option.csp) === null || _option$csp === void 0 ? void 0 : _option$csp.nonce; styleNode.innerHTML = css; var container = getContainer(option); var firstChild = container.firstChild; if (option.prepend && firstChild) { container.insertBefore(styleNode, firstChild); } else { container.appendChild(styleNode); } return styleNode; } function updateCSS(css, key) { var option = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var container = getContainer(option); var existNode = (0, _toConsumableArray2.default)(container.children).find(function (node) { return node.tagName === 'STYLE' && node[MARK_KEY] === key; }); if (existNode) { existNode.parentElement.removeChild(existNode); } var newNode = injectCSS(css, option); newNode[MARK_KEY] = key; return newNode; }