UNPKG

ant-design-vue

Version:

An enterprise-class UI design language and Vue-based implementation

104 lines (79 loc) 3.01 kB
import canUseDom from '../../_util/canUseDom'; var MARK_KEY = "vc-util-key"; function getMark() { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, mark = _ref.mark; if (mark) { return mark.startsWith('data-') ? mark : "data-".concat(mark); } return MARK_KEY; } function getContainer(option) { if (option.attachTo) { return option.attachTo; } var head = document.querySelector('head'); return head || document.body; } export function injectCSS(css) { var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var _a, _b; if (!canUseDom()) { return null; } var styleNode = document.createElement('style'); if ((_a = option.csp) === null || _a === void 0 ? void 0 : _a.nonce) { styleNode.nonce = (_b = option.csp) === null || _b === void 0 ? void 0 : _b.nonce; } styleNode.innerHTML = css; var container = getContainer(option); var firstChild = container.firstChild; if (option.prepend && container.prepend) { // Use `prepend` first container.prepend(styleNode); } else if (option.prepend && firstChild) { // Fallback to `insertBefore` like IE not support `prepend` container.insertBefore(styleNode, firstChild); } else { container.appendChild(styleNode); } return styleNode; } var containerCache = new Map(); function findExistNode(key) { var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var container = getContainer(option); return Array.from(containerCache.get(container).children).find(function (node) { return node.tagName === 'STYLE' && node.getAttribute(getMark(option)) === key; }); } export function removeCSS(key) { var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var _a; var existNode = findExistNode(key, option); (_a = existNode === null || existNode === void 0 ? void 0 : existNode.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(existNode); } export function updateCSS(css, key) { var option = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var _a, _b, _c; var container = getContainer(option); // Get real parent if (!containerCache.has(container)) { var placeholderStyle = injectCSS('', option); var parentNode = placeholderStyle.parentNode; containerCache.set(container, parentNode); parentNode.removeChild(placeholderStyle); } var existNode = findExistNode(key, option); if (existNode) { if (((_a = option.csp) === null || _a === void 0 ? void 0 : _a.nonce) && existNode.nonce !== ((_b = option.csp) === null || _b === void 0 ? void 0 : _b.nonce)) { existNode.nonce = (_c = option.csp) === null || _c === void 0 ? void 0 : _c.nonce; } if (existNode.innerHTML !== css) { existNode.innerHTML = css; } return existNode; } var newNode = injectCSS(css, option); newNode.setAttribute(getMark(option), key); return newNode; }