UNPKG

fabric

Version:

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

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