rc-util
Version:
Common Utils For React Component
64 lines (48 loc) • 1.72 kB
JavaScript
;
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;
}