{"version":3,"file":"parseUseDirectives.mjs","sources":["../../../src/parser/parseUseDirectives.ts"],"sourcesContent":["import { svgNS } from './constants';\nimport { getMultipleNodes } from './getMultipleNodes';\nimport { applyViewboxTransform } from './applyViewboxTransform';\n\nexport function parseUseDirectives(doc: Document) {\n  const nodelist = getMultipleNodes(doc, ['use', 'svg:use']);\n  let i = 0;\n  while (nodelist.length && i < nodelist.length) {\n    const el = nodelist[i],\n      xlinkAttribute = el.getAttribute('xlink:href') || el.getAttribute('href');\n\n    if (xlinkAttribute === null) {\n      return;\n    }\n\n    const xlink = xlinkAttribute.slice(1);\n    const x = el.getAttribute('x') || 0;\n    const y = el.getAttribute('y') || 0;\n    const el2Orig = doc.getElementById(xlink);\n    if (el2Orig === null) {\n      // if we can't find the target of the xlink, consider this use tag bad, similar to no xlink\n      return;\n    }\n    let el2 = el2Orig.cloneNode(true) as Element;\n    let currentTrans =\n      (el2.getAttribute('transform') || '') +\n      ' translate(' +\n      x +\n      ', ' +\n      y +\n      ')';\n    const oldLength = nodelist.length;\n    const namespace = svgNS;\n\n    applyViewboxTransform(el2);\n    if (/^svg$/i.test(el2.nodeName)) {\n      const el3 = el2.ownerDocument.createElementNS(namespace, 'g');\n      for (\n        let j = 0, attrs = el2.attributes, len = attrs.length;\n        j < len;\n        j++\n      ) {\n        const attr: Attr | null = attrs.item(j);\n        attr && el3.setAttributeNS(namespace, attr.nodeName, attr.nodeValue!);\n      }\n      // el2.firstChild != null\n      while (el2.firstChild) {\n        el3.appendChild(el2.firstChild);\n      }\n      el2 = el3;\n    }\n\n    for (let j = 0, attrs = el.attributes, len = attrs.length; j < len; j++) {\n      const attr = attrs.item(j);\n      if (!attr) {\n        continue;\n      }\n      const { nodeName, nodeValue } = attr;\n      if (\n        nodeName === 'x' ||\n        nodeName === 'y' ||\n        nodeName === 'xlink:href' ||\n        nodeName === 'href'\n      ) {\n        continue;\n      }\n\n      if (nodeName === 'transform') {\n        currentTrans = nodeValue + ' ' + currentTrans;\n      } else {\n        el2.setAttribute(nodeName, nodeValue!);\n      }\n    }\n\n    el2.setAttribute('transform', currentTrans);\n    el2.setAttribute('instantiated_by_use', '1');\n    el2.removeAttribute('id');\n    const parentNode = el.parentNode;\n    parentNode!.replaceChild(el2, el);\n    // some browsers do not shorten nodelist after replaceChild (IE8)\n    if (nodelist.length === oldLength) {\n      i++;\n    }\n  }\n}\n"],"names":["parseUseDirectives","doc","nodelist","getMultipleNodes","i","length","el","xlinkAttribute","getAttribute","xlink","slice","x","y","el2Orig","getElementById","el2","cloneNode","currentTrans","oldLength","namespace","svgNS","applyViewboxTransform","test","nodeName","el3","ownerDocument","createElementNS","j","attrs","attributes","len","attr","item","setAttributeNS","nodeValue","firstChild","appendChild","setAttribute","removeAttribute","parentNode","replaceChild"],"mappings":"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"}