ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
80 lines • 10.4 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, option = {}) {
if (!canUseDom()) {
return null;
}
const styleNode = document.createElement('style');
if (option.csp?.nonce) {
styleNode.nonce = option.csp?.nonce;
}
styleNode.innerHTML = css;
const container = getContainer(option);
const { firstChild } = container;
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;
}
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, option = {}) {
const container = getContainer(option);
// Get real parent
if (!containerCache.has(container)) {
const placeholderStyle = injectCSS('', option);
// @ts-ignore
const { parentNode } = placeholderStyle;
containerCache.set(container, parentNode);
parentNode.removeChild(placeholderStyle);
}
const existNode = findExistNode(key, option);
if (existNode) {
if (option.csp?.nonce && existNode.nonce !== option.csp?.nonce) {
existNode.nonce = option.csp?.nonce;
}
if (existNode.innerHTML !== css) {
existNode.innerHTML = css;
}
return existNode;
}
const newNode = injectCSS(css, option);
newNode?.setAttribute(getMark(option), key);
return newNode;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1jc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb21wb25lbnRzL2NvcmUvdXRpbC9keW5hbWljLWNzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFJSDs7R0FFRztBQUNILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUMsTUFBTSxRQUFRLEdBQUcsYUFBMEIsQ0FBQztBQUU1QyxTQUFTLE9BQU8sQ0FBQyxFQUFFLElBQUksS0FBYyxFQUFFO0lBQ3JDLElBQUksSUFBSSxFQUFFO1FBQ1IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7S0FDekQ7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBU0QsU0FBUyxZQUFZLENBQUMsTUFBZTtJQUNuQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7UUFDbkIsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDO0tBQ3hCO0lBRUQsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxPQUFPLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDO0FBQy9CLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLEdBQVcsRUFBRSxTQUFrQixFQUFFO0lBQ3pELElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRTtRQUNoQixPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsRCxJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFO1FBQ3JCLFNBQVMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUM7S0FDckM7SUFDRCxTQUFTLENB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Iiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vTkctWk9SUk8vbmctem9ycm8tYW50ZC9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgTnpTYWZlQW55IH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3R5cGVzJztcblxuLyoqXG4gKiBTeW5jIGZyb20gcmMtdXRpbCBbaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0LWNvbXBvbmVudC91dGlsXVxuICovXG5pbXBvcnQgeyBjYW5Vc2VEb20gfSBmcm9tICcuL2Nhbi11c2UtZG9tJztcblxuY29uc3QgTUFSS19LRVkgPSBgcmMtdXRpbC1rZXlgIGFzIE56U2FmZUFueTtcblxuZnVuY3Rpb24gZ2V0TWFyayh7IG1hcmsgfTogT3B0aW9ucyA9IHt9KTogc3RyaW5nIHtcbiAgaWYgKG1hcmspIHtcbiAgICByZXR1cm4gbWFyay5zdGFydHNXaXRoKCdkYXRhLScpID8gbWFyayA6IGBkYXRhLSR7bWFya31gO1xuICB9XG4gIHJldHVybiBNQVJLX0tFWTtcbn1cblxuaW50ZXJmYWNlIE9wdGlvbnMge1xuICBhdHRhY2hUbz86IEVsZW1lbnQ7XG4gIGNzcD86IHsgbm9uY2U/OiBzdHJpbmcgfTtcbiAgcHJlcGVuZD86IGJvb2xlYW47XG4gIG1hcms/OiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGdldENvbnRhaW5lcihvcHRpb246IE9wdGlvbnMpOiBIVE1MRWxlbWVudCB8IEVsZW1lbnQge1xuICBpZiAob3B0aW9uLmF0dGFjaFRvKSB7XG4gICAgcmV0dXJuIG9wdGlvbi5hdHRhY2hUbztcbiAgfVxuXG4gIGNvbnN0IGhlYWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdoZWFkJyk7XG4gIHJldHVybiBoZWFkIHx8IGRvY3VtZW50LmJvZHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RDU1MoY3NzOiBzdHJpbmcsIG9wdGlvbjogT3B0aW9ucyA9IHt9KTogSFRNTFN0eWxlRWxlbWVudCB8IG51bGwge1xuICBpZiAoIWNhblVzZURvbSgpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBzdHlsZU5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICBpZiAob3B0aW9uLmNzcD8ubm9uY2UpIHtcbiAgICBzdHlsZU5vZGUubm9uY2UgPSBvcHRpb24uY3NwPy5ub25jZTtcbiAgfVxuICBzdHlsZU5vZGUuaW5uZXJIVE1MID0gY3NzO1xuXG4gIGNvbnN0IGNvbnRhaW5lciA9IGdldENvbnRhaW5lcihvcHRpb24pO1xuICBjb25zdCB7IGZpcnN0Q2hpbGQgfSA9IGNvbnRhaW5lcjtcblxuICBpZiAob3B0aW9uLnByZXBlbmQgJiYgY29udGFpbmVyLnByZXBlbmQpIHtcbiAgICAvLyBVc2UgYHByZXBlbmRgIGZpcnN0XG4gICAgY29udGFpbmVyLnByZXBlbmQoc3R5bGVOb2RlKTtcbiAgfSBlbHNlIGlmIChvcHRpb24ucHJlcGVuZCAmJiBmaXJzdENoaWxkKSB7XG4gICAgLy8gRmFsbGJhY2sgdG8gYGluc2VydEJlZm9yZWAgbGlrZSBJRSBub3Qgc3VwcG9ydCBgcHJlcGVuZGBcbiAgICBjb250YWluZXIuaW5zZXJ0QmVmb3JlKHN0eWxlTm9kZSwgZmlyc3RDaGlsZCk7XG4gIH0gZWxzZSB7XG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHN0eWxlTm9kZSk7XG4gIH1cblxuICByZXR1cm4gc3R5bGVOb2RlO1xufVxuXG5jb25zdCBjb250YWluZXJDYWNoZSA9IG5ldyBNYXA8RWxlbWVudCwgTm9kZSAmIFBhcmVudE5vZGU+KCk7XG5cbmZ1bmN0aW9uIGZpbmRFeGlzdE5vZGUoa2V5OiBzdHJpbmcsIG9wdGlvbjogT3B0aW9ucyA9IHt9KTogSFRNTFN0eWxlRWxlbWVudCB7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGdldENvbnRhaW5lcihvcHRpb24pO1xuXG4gIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lckNhY2hlLmdldChjb250YWluZXIpPy5jaGlsZHJlbiB8fCBbXSkuZmluZChcbiAgICBub2RlID0+IG5vZGUudGFnTmFtZSA9PT0gJ1NUWUxFJyAmJiBub2RlLmdldEF0dHJpYnV0ZShnZXRNYXJrKG9wdGlvbikpID09PSBrZXlcbiAgKSBhcyBIVE1MU3R5bGVFbGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlQ1NTKGtleTogc3RyaW5nLCBvcHRpb246IE9wdGlvbnMgPSB7fSk6IHZvaWQge1xuICBjb25zdCBleGlzdE5vZGUgPSBmaW5kRXhpc3ROb2RlKGtleSwgb3B0aW9uKTtcblxuICBleGlzdE5vZGU/LnBhcmVudE5vZGU/LnJlbW92ZUNoaWxkKGV4aXN0Tm9kZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVDU1MoY3NzOiBzdHJpbmcsIGtleTogc3RyaW5nLCBvcHRpb246IE9wdGlvbnMgPSB7fSk6IEhUTUxTdHlsZUVsZW1lbnQgfCBudWxsIHtcbiAgY29uc3QgY29udGFpbmVyID0gZ2V0Q29udGFpbmVyKG9wdGlvbik7XG5cbiAgLy8gR2V0IHJlYWwgcGFyZW50XG4gIGlmICghY29udGFpbmVyQ2FjaGUuaGFzKGNvbnRhaW5lcikpIHtcbiAgICBjb25zdCBwbGFjZWhvbGRlclN0eWxlID0gaW5qZWN0Q1NTKCcnLCBvcHRpb24pO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCB7IHBhcmVudE5vZGUgfSA9IHBsYWNlaG9sZGVyU3R5bGU7XG4gICAgY29udGFpbmVyQ2FjaGUuc2V0KGNvbnRhaW5lciwgcGFyZW50Tm9kZSk7XG4gICAgcGFyZW50Tm9kZS5yZW1vdmVDaGlsZChwbGFjZWhvbGRlclN0eWxlKTtcbiAgfVxuXG4gIGNvbnN0IGV4aXN0Tm9kZSA9IGZpbmRFeGlzdE5vZGUoa2V5LCBvcHRpb24pO1xuXG4gIGlmIChleGlzdE5vZGUpIHtcbiAgICBpZiAob3B0aW9uLmNzcD8ubm9uY2UgJiYgZXhpc3ROb2RlLm5vbmNlICE9PSBvcHRpb24uY3NwPy5ub25jZSkge1xuICAgICAgZXhpc3ROb2RlLm5vbmNlID0gb3B0aW9uLmNzcD8ubm9uY2U7XG4gICAgfVxuXG4gICAgaWYgKGV4aXN0Tm9kZS5pbm5lckhUTUwgIT09IGNzcykge1xuICAgICAgZXhpc3ROb2RlLmlubmVySFRNTCA9IGNzcztcbiAgICB9XG5cbiAgICByZXR1cm4gZXhpc3ROb2RlO1xuICB9XG5cbiAgY29uc3QgbmV3Tm9kZSA9IGluamVjdENTUyhjc3MsIG9wdGlvbik7XG4gIG5ld05vZGU/LnNldEF0dHJpYnV0ZShnZXRNYXJrKG9wdGlvbiksIGtleSk7XG4gIHJldHVybiBuZXdOb2RlO1xufVxuIl19