40 lines
932 B
JavaScript
40 lines
932 B
JavaScript
import BrowserSprite from 'svg-baker-runtime/src/browser-sprite';
|
|
import domready from 'domready';
|
|
|
|
const spriteNodeId = '__SVG_SPRITE_NODE__';
|
|
const spriteGlobalVarName = '__SVG_SPRITE__';
|
|
const isSpriteExists = !!window[spriteGlobalVarName];
|
|
|
|
// eslint-disable-next-line import/no-mutable-exports
|
|
let sprite;
|
|
|
|
if (isSpriteExists) {
|
|
sprite = window[spriteGlobalVarName];
|
|
} else {
|
|
sprite = new BrowserSprite({ attrs: { id: spriteNodeId } });
|
|
window[spriteGlobalVarName] = sprite;
|
|
}
|
|
|
|
const loadSprite = () => {
|
|
/**
|
|
* Check for page already contains sprite node
|
|
* If found - attach to and reuse it's content
|
|
* If not - render and mount the new sprite
|
|
*/
|
|
const existing = document.getElementById(spriteNodeId);
|
|
|
|
if (existing) {
|
|
sprite.attach(existing);
|
|
} else {
|
|
sprite.mount(document.body, true);
|
|
}
|
|
};
|
|
|
|
if (document.body) {
|
|
loadSprite();
|
|
} else {
|
|
domready(loadSprite);
|
|
}
|
|
|
|
export default sprite;
|