import SpriteSymbol from './symbol';
|
import parse from './utils/parse';
|
import wrapInSvgString from './utils/wrap-in-svg-string';
|
|
export default class BrowserSpriteSymbol extends SpriteSymbol {
|
get isMounted() {
|
return !!this.node;
|
}
|
|
/**
|
* @param {Element} node
|
* @return {BrowserSpriteSymbol}
|
*/
|
static createFromExistingNode(node) {
|
return new BrowserSpriteSymbol({
|
id: node.getAttribute('id'),
|
viewBox: node.getAttribute('viewBox'),
|
content: node.outerHTML
|
});
|
}
|
|
destroy() {
|
if (this.isMounted) {
|
this.unmount();
|
}
|
super.destroy();
|
}
|
|
/**
|
* @param {Element|string} target
|
* @return {Element}
|
*/
|
mount(target) {
|
if (this.isMounted) {
|
return this.node;
|
}
|
|
const mountTarget = typeof target === 'string' ? document.querySelector(target) : target;
|
const node = this.render();
|
this.node = node;
|
|
mountTarget.appendChild(node);
|
|
return node;
|
}
|
|
/**
|
* @return {Element}
|
*/
|
render() {
|
const content = this.stringify();
|
return parse(wrapInSvgString(content)).childNodes[0];
|
}
|
|
unmount() {
|
this.node.parentNode.removeChild(this.node);
|
}
|
}
|