UNPKG

petals-ui

Version:
50 lines (49 loc) 1.76 kB
import { registerIconProviders, setDefaultIconProvider, getIconProviders } from './register'; const loadedCache = {}; function isValidProviderUrl(url) { return typeof url === 'string' && url.length > 0 && loadedCache[url] !== true; } function loadProviderUrls(urls, index = 0) { const url = urls[index]; if (!isValidProviderUrl(url)) { return; } let el; let parentEl; if (/.+\.css(\?.+)?$/gi.test(url)) { el = document.createElement('link'); parentEl = document.head; el.setAttribute('rel', 'stylesheet'); el.setAttribute('href', url); } else { el = document.createElement('script'); parentEl = document.body; el.setAttribute('src', url); } const nextIndex = index + 1; if (urls.length > nextIndex) { el.onload = el.onerror = () => loadProviderUrls(urls, nextIndex); } loadedCache[url] = true; parentEl.appendChild(el); } function loadIconProviders() { const providers = getIconProviders(); Object.keys(providers).forEach(k => { const provider = providers[k]; const urls = [...(provider.urls || [])]; // 因为 iconfont 资源会把 SVG 插入 before,所以前加载相同 type 会覆盖后加载,为了数组覆盖顺序,倒序插入 loadProviderUrls(provider.type === 'svg' ? urls.reverse() : urls); }); } function registerAndLoadIconProviders(providers, defaultProvider) { const providerAliases = Object.keys(providers); if (providerAliases.length === 0) { return; } registerIconProviders(providers); setDefaultIconProvider(defaultProvider || providerAliases[0]); loadIconProviders(); } export { loadIconProviders, registerAndLoadIconProviders };