ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
80 lines • 10.3 kB
JavaScript
/**
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/
/**
* Sync from rc-util [https://github.com/react-component/util]
*/
import { canUseDom } from './can-use-dom';
const MARK_KEY = `rc-util-key`;
function getMark({ mark } = {}) {
if (mark) {
return mark.startsWith('data-') ? mark : `data-${mark}`;
}
return MARK_KEY;
}
function getContainer(option) {
if (option.attachTo) {
return option.attachTo;
}
const head = document.querySelector('head');
return head || document.body;
}
export function injectCSS(css, options = {}) {
if (!canUseDom()) {
return null;
}
const styleNode = document.createElement('style');
if (options.cspNonce) {
styleNode.nonce = options.cspNonce;
}
styleNode.innerHTML = css;
const container = getContainer(options);
const { firstChild } = container;
if (options.prepend && container.prepend) {
// Use `prepend` first
container.prepend(styleNode);
}
else if (options.prepend && firstChild) {
// Fallback to `insertBefore` like IE not support `prepend`
container.insertBefore(styleNode, firstChild);
}
else {
container.appendChild(styleNode);
}
return styleNode;
}
const containerCache = new Map();
function findExistNode(key, option = {}) {
const container = getContainer(option);
return Array.from(containerCache.get(container)?.children || []).find(node => node.tagName === 'STYLE' && node.getAttribute(getMark(option)) === key);
}
export function removeCSS(key, option = {}) {
const existNode = findExistNode(key, option);
existNode?.parentNode?.removeChild(existNode);
}
export function updateCSS(css, key, options = {}) {
const container = getContainer(options);
// Get real parent
if (!containerCache.has(container)) {
const placeholderStyle = injectCSS('', options);
// @ts-ignore
const { parentNode } = placeholderStyle;
containerCache.set(container, parentNode);
parentNode.removeChild(placeholderStyle);
}
const existNode = findExistNode(key, options);
if (existNode) {
if (options.cspNonce && existNode.nonce !== options.cspNonce) {
existNode.nonce = options.cspNonce;
}
if (existNode.innerHTML !== css) {
existNode.innerHTML = css;
}
return existNode;
}
const newNode = injectCSS(css, options);
newNode?.setAttribute(getMark(options), key);
return newNode;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1jc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb21wb25lbnRzL2NvcmUvdXRpbC9keW5hbWljLWNzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFJSDs7R0FFRztBQUNILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUMsTUFBTSxRQUFRLEdBQUcsYUFBMEIsQ0FBQztBQUU1QyxTQUFTLE9BQU8sQ0FBQyxFQUFFLElBQUksS0FBYyxFQUFFO0lBQ3JDLElBQUksSUFBSSxFQUFFO1FBQ1IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7S0FDekQ7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBU0QsU0FBUyxZQUFZLENBQUMsTUFBZTtJQUNuQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7UUFDbkIsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDO0tBQ3hCO0lBRUQsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxPQUFPLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDO0FBQy9CLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLEdBQVcsRUFBRSxVQUFtQixFQUFFO0lBQzFELElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRTtRQUNoQixPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUU7UUFDcEIsU0FBUyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO0tBQ3BDO0lBQ0QsU0FBUyxDQUFDLFNBQVMsR0FBRyxHQUFHLENB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ZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL05HLVpPUlJPL25nLXpvcnJvLWFudGQvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7IE56U2FmZUFueSB9IGZyb20gJ25nLXpvcnJvLWFudGQvY29yZS90eXBlcyc7XG5cbi8qKlxuICogU3luYyBmcm9tIHJjLXV0aWwgW2h0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdC1jb21wb25lbnQvdXRpbF1cbiAqL1xuaW1wb3J0IHsgY2FuVXNlRG9tIH0gZnJvbSAnLi9jYW4tdXNlLWRvbSc7XG5cbmNvbnN0IE1BUktfS0VZID0gYHJjLXV0aWwta2V5YCBhcyBOelNhZmVBbnk7XG5cbmZ1bmN0aW9uIGdldE1hcmsoeyBtYXJrIH06IE9wdGlvbnMgPSB7fSk6IHN0cmluZyB7XG4gIGlmIChtYXJrKSB7XG4gICAgcmV0dXJuIG1hcmsuc3RhcnRzV2l0aCgnZGF0YS0nKSA/IG1hcmsgOiBgZGF0YS0ke21hcmt9YDtcbiAgfVxuICByZXR1cm4gTUFSS19LRVk7XG59XG5cbmludGVyZmFjZSBPcHRpb25zIHtcbiAgYXR0YWNoVG8/OiBFbGVtZW50O1xuICBjc3BOb25jZT86IHN0cmluZyB8IG51bGw7XG4gIHByZXBlbmQ/OiBib29sZWFuO1xuICBtYXJrPzogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBnZXRDb250YWluZXIob3B0aW9uOiBPcHRpb25zKTogSFRNTEVsZW1lbnQgfCBFbGVtZW50IHtcbiAgaWYgKG9wdGlvbi5hdHRhY2hUbykge1xuICAgIHJldHVybiBvcHRpb24uYXR0YWNoVG87XG4gIH1cblxuICBjb25zdCBoZWFkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaGVhZCcpO1xuICByZXR1cm4gaGVhZCB8fCBkb2N1bWVudC5ib2R5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0Q1NTKGNzczogc3RyaW5nLCBvcHRpb25zOiBPcHRpb25zID0ge30pOiBIVE1MU3R5bGVFbGVtZW50IHwgbnVsbCB7XG4gIGlmICghY2FuVXNlRG9tKCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHN0eWxlTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIGlmIChvcHRpb25zLmNzcE5vbmNlKSB7XG4gICAgc3R5bGVOb2RlLm5vbmNlID0gb3B0aW9ucy5jc3BOb25jZTtcbiAgfVxuICBzdHlsZU5vZGUuaW5uZXJIVE1MID0gY3NzO1xuXG4gIGNvbnN0IGNvbnRhaW5lciA9IGdldENvbnRhaW5lcihvcHRpb25zKTtcbiAgY29uc3QgeyBmaXJzdENoaWxkIH0gPSBjb250YWluZXI7XG5cbiAgaWYgKG9wdGlvbnMucHJlcGVuZCAmJiBjb250YWluZXIucHJlcGVuZCkge1xuICAgIC8vIFVzZSBgcHJlcGVuZGAgZmlyc3RcbiAgICBjb250YWluZXIucHJlcGVuZChzdHlsZU5vZGUpO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMucHJlcGVuZCAmJiBmaXJzdENoaWxkKSB7XG4gICAgLy8gRmFsbGJhY2sgdG8gYGluc2VydEJlZm9yZWAgbGlrZSBJRSBub3Qgc3VwcG9ydCBgcHJlcGVuZGBcbiAgICBjb250YWluZXIuaW5zZXJ0QmVmb3JlKHN0eWxlTm9kZSwgZmlyc3RDaGlsZCk7XG4gIH0gZWxzZSB7XG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHN0eWxlTm9kZSk7XG4gIH1cblxuICByZXR1cm4gc3R5bGVOb2RlO1xufVxuXG5jb25zdCBjb250YWluZXJDYWNoZSA9IG5ldyBNYXA8RWxlbWVudCwgTm9kZSAmIFBhcmVudE5vZGU+KCk7XG5cbmZ1bmN0aW9uIGZpbmRFeGlzdE5vZGUoa2V5OiBzdHJpbmcsIG9wdGlvbjogT3B0aW9ucyA9IHt9KTogSFRNTFN0eWxlRWxlbWVudCB7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGdldENvbnRhaW5lcihvcHRpb24pO1xuXG4gIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lckNhY2hlLmdldChjb250YWluZXIpPy5jaGlsZHJlbiB8fCBbXSkuZmluZChcbiAgICBub2RlID0+IG5vZGUudGFnTmFtZSA9PT0gJ1NUWUxFJyAmJiBub2RlLmdldEF0dHJpYnV0ZShnZXRNYXJrKG9wdGlvbikpID09PSBrZXlcbiAgKSBhcyBIVE1MU3R5bGVFbGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQ1NTKGtleTogc3RyaW5nLCBvcHRpb246IE9wdGlvbnMgPSB7fSk6IHZvaWQge1xuICBjb25zdCBleGlzdE5vZGUgPSBmaW5kRXhpc3ROb2RlKGtleSwgb3B0aW9uKTtcblxuICBleGlzdE5vZGU/LnBhcmVudE5vZGU/LnJlbW92ZUNoaWxkKGV4aXN0Tm9kZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVDU1MoY3NzOiBzdHJpbmcsIGtleTogc3RyaW5nLCBvcHRpb25zOiBPcHRpb25zID0ge30pOiBIVE1MU3R5bGVFbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGdldENvbnRhaW5lcihvcHRpb25zKTtcblxuICAvLyBHZXQgcmVhbCBwYXJlbnRcbiAgaWYgKCFjb250YWluZXJDYWNoZS5oYXMoY29udGFpbmVyKSkge1xuICAgIGNvbnN0IHBsYWNlaG9sZGVyU3R5bGUgPSBpbmplY3RDU1MoJycsIG9wdGlvbnMpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCB7IHBhcmVudE5vZGUgfSA9IHBsYWNlaG9sZGVyU3R5bGU7XG4gICAgY29udGFpbmVyQ2FjaGUuc2V0KGNvbnRhaW5lciwgcGFyZW50Tm9kZSk7XG4gICAgcGFyZW50Tm9kZS5yZW1vdmVDaGlsZChwbGFjZWhvbGRlclN0eWxlKTtcbiAgfVxuXG4gIGNvbnN0IGV4aXN0Tm9kZSA9IGZpbmRFeGlzdE5vZGUoa2V5LCBvcHRpb25zKTtcblxuICBpZiAoZXhpc3ROb2RlKSB7XG4gICAgaWYgKG9wdGlvbnMuY3NwTm9uY2UgJiYgZXhpc3ROb2RlLm5vbmNlICE9PSBvcHRpb25zLmNzcE5vbmNlKSB7XG4gICAgICBleGlzdE5vZGUubm9uY2UgPSBvcHRpb25zLmNzcE5vbmNlO1xuICAgIH1cblxuICAgIGlmIChleGlzdE5vZGUuaW5uZXJIVE1MICE9PSBjc3MpIHtcbiAgICAgIGV4aXN0Tm9kZS5pbm5lckhUTUwgPSBjc3M7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4aXN0Tm9kZTtcbiAgfVxuXG4gIGNvbnN0IG5ld05vZGUgPSBpbmplY3RDU1MoY3NzLCBvcHRpb25zKTtcbiAgbmV3Tm9kZT8uc2V0QXR0cmlidXRlKGdldE1hcmsob3B0aW9ucyksIGtleSk7XG4gIHJldHVybiBuZXdOb2RlO1xufVxuIl19