1248d297a4f012ef15880bf6743dede19a629d8afd712120c1bedf9bb5fae34b5fc87bda9ec6a9c288ad2f4294ff7dd6ab14bc74b9dfd146c9d8667ab877ff 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import SpriteSymbol from './symbol';
  2. import parse from './utils/parse';
  3. import wrapInSvgString from './utils/wrap-in-svg-string';
  4. export default class BrowserSpriteSymbol extends SpriteSymbol {
  5. get isMounted() {
  6. return !!this.node;
  7. }
  8. /**
  9. * @param {Element} node
  10. * @return {BrowserSpriteSymbol}
  11. */
  12. static createFromExistingNode(node) {
  13. return new BrowserSpriteSymbol({
  14. id: node.getAttribute('id'),
  15. viewBox: node.getAttribute('viewBox'),
  16. content: node.outerHTML
  17. });
  18. }
  19. destroy() {
  20. if (this.isMounted) {
  21. this.unmount();
  22. }
  23. super.destroy();
  24. }
  25. /**
  26. * @param {Element|string} target
  27. * @return {Element}
  28. */
  29. mount(target) {
  30. if (this.isMounted) {
  31. return this.node;
  32. }
  33. const mountTarget = typeof target === 'string' ? document.querySelector(target) : target;
  34. const node = this.render();
  35. this.node = node;
  36. mountTarget.appendChild(node);
  37. return node;
  38. }
  39. /**
  40. * @return {Element}
  41. */
  42. render() {
  43. const content = this.stringify();
  44. return parse(wrapInSvgString(content)).childNodes[0];
  45. }
  46. unmount() {
  47. this.node.parentNode.removeChild(this.node);
  48. }
  49. }