ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
80 lines • 10.5 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1jc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb21wb25lbnRzL2NvcmUvdXRpbC9keW5hbWljLWNzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFJSDs7R0FFRztBQUNILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUMsTUFBTSxRQUFRLEdBQUcsYUFBMEIsQ0FBQztBQUU1QyxTQUFTLE9BQU8sQ0FBQyxFQUFFLElBQUksS0FBYyxFQUFFO0lBQ3JDLElBQUksSUFBSSxFQUFFLENBQUM7UUFDVCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQVNELFNBQVMsWUFBWSxDQUFDLE1BQWU7SUFDbkMsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDcEIsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLE9BQU8sSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUM7QUFDL0IsQ0FBQztBQUVELE1BQU0sVUFBVSxTQUFTLENBQUMsR0FBVyxFQUFFLFVBQW1CLEVBQUU7SUFDMUQsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7UUFDakIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNyQixTQUFTLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFD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QUFPLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM3QyxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vTkctWk9SUk8vbmctem9ycm8tYW50ZC9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgTnpTYWZlQW55IH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3R5cGVzJztcblxuLyoqXG4gKiBTeW5jIGZyb20gcmMtdXRpbCBbaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0LWNvbXBvbmVudC91dGlsXVxuICovXG5pbXBvcnQgeyBjYW5Vc2VEb20gfSBmcm9tICcuL2Nhbi11c2UtZG9tJztcblxuY29uc3QgTUFSS19LRVkgPSBgcmMtdXRpbC1rZXlgIGFzIE56U2FmZUFueTtcblxuZnVuY3Rpb24gZ2V0TWFyayh7IG1hcmsgfTogT3B0aW9ucyA9IHt9KTogc3RyaW5nIHtcbiAgaWYgKG1hcmspIHtcbiAgICByZXR1cm4gbWFyay5zdGFydHNXaXRoKCdkYXRhLScpID8gbWFyayA6IGBkYXRhLSR7bWFya31gO1xuICB9XG4gIHJldHVybiBNQVJLX0tFWTtcbn1cblxuaW50ZXJmYWNlIE9wdGlvbnMge1xuICBhdHRhY2hUbz86IEVsZW1lbnQ7XG4gIGNzcE5vbmNlPzogc3RyaW5nIHwgbnVsbDtcbiAgcHJlcGVuZD86IGJvb2xlYW47XG4gIG1hcms/OiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGdldENvbnRhaW5lcihvcHRpb246IE9wdGlvbnMpOiBIVE1MRWxlbWVudCB8IEVsZW1lbnQge1xuICBpZiAob3B0aW9uLmF0dGFjaFRvKSB7XG4gICAgcmV0dXJuIG9wdGlvbi5hdHRhY2hUbztcbiAgfVxuXG4gIGNvbnN0IGhlYWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdoZWFkJyk7XG4gIHJldHVybiBoZWFkIHx8IGRvY3VtZW50LmJvZHk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RDU1MoY3NzOiBzdHJpbmcsIG9wdGlvbnM6IE9wdGlvbnMgPSB7fSk6IEhUTUxTdHlsZUVsZW1lbnQgfCBudWxsIHtcbiAgaWYgKCFjYW5Vc2VEb20oKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgc3R5bGVOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgaWYgKG9wdGlvbnMuY3NwTm9uY2UpIHtcbiAgICBzdHlsZU5vZGUubm9uY2UgPSBvcHRpb25zLmNzcE5vbmNlO1xuICB9XG4gIHN0eWxlTm9kZS5pbm5lckhUTUwgPSBjc3M7XG5cbiAgY29uc3QgY29udGFpbmVyID0gZ2V0Q29udGFpbmVyKG9wdGlvbnMpO1xuICBjb25zdCB7IGZpcnN0Q2hpbGQgfSA9IGNvbnRhaW5lcjtcblxuICBpZiAob3B0aW9ucy5wcmVwZW5kICYmIGNvbnRhaW5lci5wcmVwZW5kKSB7XG4gICAgLy8gVXNlIGBwcmVwZW5kYCBmaXJzdFxuICAgIGNvbnRhaW5lci5wcmVwZW5kKHN0eWxlTm9kZSk7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5wcmVwZW5kICYmIGZpcnN0Q2hpbGQpIHtcbiAgICAvLyBGYWxsYmFjayB0byBgaW5zZXJ0QmVmb3JlYCBsaWtlIElFIG5vdCBzdXBwb3J0IGBwcmVwZW5kYFxuICAgIGNvbnRhaW5lci5pbnNlcnRCZWZvcmUoc3R5bGVOb2RlLCBmaXJzdENoaWxkKTtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoc3R5bGVOb2RlKTtcbiAgfVxuXG4gIHJldHVybiBzdHlsZU5vZGU7XG59XG5cbmNvbnN0IGNvbnRhaW5lckNhY2hlID0gbmV3IE1hcDxFbGVtZW50LCBOb2RlICYgUGFyZW50Tm9kZT4oKTtcblxuZnVuY3Rpb24gZmluZEV4aXN0Tm9kZShrZXk6IHN0cmluZywgb3B0aW9uOiBPcHRpb25zID0ge30pOiBIVE1MU3R5bGVFbGVtZW50IHtcbiAgY29uc3QgY29udGFpbmVyID0gZ2V0Q29udGFpbmVyKG9wdGlvbik7XG5cbiAgcmV0dXJuIEFycmF5LmZyb20oY29udGFpbmVyQ2FjaGUuZ2V0KGNvbnRhaW5lcik/LmNoaWxkcmVuIHx8IFtdKS5maW5kKFxuICAgIG5vZGUgPT4gbm9kZS50YWdOYW1lID09PSAnU1RZTEUnICYmIG5vZGUuZ2V0QXR0cmlidXRlKGdldE1hcmsob3B0aW9uKSkgPT09IGtleVxuICApIGFzIEhUTUxTdHlsZUVsZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVDU1Moa2V5OiBzdHJpbmcsIG9wdGlvbjogT3B0aW9ucyA9IHt9KTogdm9pZCB7XG4gIGNvbnN0IGV4aXN0Tm9kZSA9IGZpbmRFeGlzdE5vZGUoa2V5LCBvcHRpb24pO1xuXG4gIGV4aXN0Tm9kZT8ucGFyZW50Tm9kZT8ucmVtb3ZlQ2hpbGQoZXhpc3ROb2RlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUNTUyhjc3M6IHN0cmluZywga2V5OiBzdHJpbmcsIG9wdGlvbnM6IE9wdGlvbnMgPSB7fSk6IEhUTUxTdHlsZUVsZW1lbnQgfCBudWxsIHtcbiAgY29uc3QgY29udGFpbmVyID0gZ2V0Q29udGFpbmVyKG9wdGlvbnMpO1xuXG4gIC8vIEdldCByZWFsIHBhcmVudFxuICBpZiAoIWNvbnRhaW5lckNhY2hlLmhhcyhjb250YWluZXIpKSB7XG4gICAgY29uc3QgcGxhY2Vob2xkZXJTdHlsZSA9IGluamVjdENTUygnJywgb3B0aW9ucyk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IHsgcGFyZW50Tm9kZSB9ID0gcGxhY2Vob2xkZXJTdHlsZTtcbiAgICBjb250YWluZXJDYWNoZS5zZXQoY29udGFpbmVyLCBwYXJlbnROb2RlKTtcbiAgICBwYXJlbnROb2RlLnJlbW92ZUNoaWxkKHBsYWNlaG9sZGVyU3R5bGUpO1xuICB9XG5cbiAgY29uc3QgZXhpc3ROb2RlID0gZmluZEV4aXN0Tm9kZShrZXksIG9wdGlvbnMpO1xuXG4gIGlmIChleGlzdE5vZGUpIHtcbiAgICBpZiAob3B0aW9ucy5jc3BOb25jZSAmJiBleGlzdE5vZGUubm9uY2UgIT09IG9wdGlvbnMuY3NwTm9uY2UpIHtcbiAgICAgIGV4aXN0Tm9kZS5ub25jZSA9IG9wdGlvbnMuY3NwTm9uY2U7XG4gICAgfVxuXG4gICAgaWYgKGV4aXN0Tm9kZS5pbm5lckhUTUwgIT09IGNzcykge1xuICAgICAgZXhpc3ROb2RlLmlubmVySFRNTCA9IGNzcztcbiAgICB9XG5cbiAgICByZXR1cm4gZXhpc3ROb2RlO1xuICB9XG5cbiAgY29uc3QgbmV3Tm9kZSA9IGluamVjdENTUyhjc3MsIG9wdGlvbnMpO1xuICBuZXdOb2RlPy5zZXRBdHRyaWJ1dGUoZ2V0TWFyayhvcHRpb25zKSwga2V5KTtcbiAgcmV0dXJuIG5ld05vZGU7XG59XG4iXX0=