UNPKG

fabric

Version:

Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.

1 lines 4.39 kB
{"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"}