| 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); | 
|   } | 
| } |