{"version":3,"file":"parseUseDirectives.min.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":"kLAIO,SAASA,EAAmBC,GACjC,MAAMC,EAAWC,EAAiBF,EAAK,CAAC,MAAO,YAC/C,IAAIG,EAAI,EACR,KAAOF,EAASG,QAAUD,EAAIF,EAASG,QAAQ,CAC7C,MAAMC,EAAKJ,EAASE,GAClBG,EAAiBD,EAAGE,aAAa,eAAiBF,EAAGE,aAAa,QAEpE,GAAuB,OAAnBD,EACF,OAGF,MAAME,EAAQF,EAAeG,MAAM,GAC7BC,EAAIL,EAAGE,aAAa,MAAQ,EAC5BI,EAAIN,EAAGE,aAAa,MAAQ,EAC5BK,EAAUZ,EAAIa,eAAeL,GACnC,GAAgB,OAAZI,EAEF,OAEF,IAAIE,EAAMF,EAAQG,WAAU,GACxBC,GACDF,EAAIP,aAAa,cAAgB,IAClC,cACAG,EACA,KACAC,EACA,IACF,MAAMM,EAAYhB,EAASG,OACrBc,EAAYC,EAGlB,GADAC,EAAsBN,GAClB,SAASO,KAAKP,EAAIQ,UAAW,CAC/B,MAAMC,EAAMT,EAAIU,cAAcC,gBAAgBP,EAAW,KACzD,IACE,IAAIQ,EAAI,EAAGC,EAAQb,EAAIc,WAAYC,EAAMF,EAAMvB,OAC/CsB,EAAIG,EACJH,IACA,CACA,MAAMI,EAAoBH,EAAMI,KAAKL,GACrCI,GAAQP,EAAIS,eAAed,EAAWY,EAAKR,SAAUQ,EAAKG,UAC5D,CAEA,KAAOnB,EAAIoB,YACTX,EAAIY,YAAYrB,EAAIoB,YAEtBpB,EAAMS,CACR,CAEA,IAAK,IAAIG,EAAI,EAAGC,EAAQtB,EAAGuB,WAAYC,EAAMF,EAAMvB,OAAQsB,EAAIG,EAAKH,IAAK,CACvE,MAAMI,EAAOH,EAAMI,KAAKL,GACxB,IAAKI,EACH,SAEF,MAAMR,SAAEA,EAAQW,UAAEA,GAAcH,EAEjB,MAAbR,GACa,MAAbA,GACa,eAAbA,GACa,SAAbA,IAKe,cAAbA,EACFN,EAAeiB,EAAY,IAAMjB,EAEjCF,EAAIsB,aAAad,EAAUW,GAE/B,CAEAnB,EAAIsB,aAAa,YAAapB,GAC9BF,EAAIsB,aAAa,sBAAuB,KACxCtB,EAAIuB,gBAAgB,MACDhC,EAAGiC,WACVC,aAAazB,EAAKT,GAE1BJ,EAASG,SAAWa,GACtBd,GAEJ,CACF"}