fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
1 lines • 5.81 kB
Source Map (JSON)
{"version":3,"file":"normalizeValue.mjs","sources":["../../../src/parser/normalizeValue.ts"],"sourcesContent":["import { multiplyTransformMatrices } from '../util/misc/matrix';\nimport { parseUnit } from '../util/misc/svgParsing';\nimport { parseTransformAttribute } from './parseTransformAttribute';\nimport { CENTER, LEFT, RIGHT, NONE, FILL, STROKE } from '../constants';\n\nexport function normalizeValue(\n attr: string,\n value: any,\n parentAttributes: Record<string, any>,\n fontSize: number,\n): string | null | boolean | number[] | number {\n const isArray = Array.isArray(value);\n let parsed: number | number[];\n let ouputValue: string | null | boolean | number[] | number = value;\n if ((attr === FILL || attr === STROKE) && value === NONE) {\n ouputValue = '';\n } else if (attr === 'strokeUniform') {\n return value === 'non-scaling-stroke';\n } else if (attr === 'strokeDashArray') {\n if (value === NONE) {\n ouputValue = null;\n } else {\n ouputValue = value.replace(/,/g, ' ').split(/\\s+/).map(parseFloat);\n }\n } else if (attr === 'transformMatrix') {\n if (parentAttributes && parentAttributes.transformMatrix) {\n ouputValue = multiplyTransformMatrices(\n parentAttributes.transformMatrix,\n parseTransformAttribute(value),\n );\n } else {\n ouputValue = parseTransformAttribute(value);\n }\n } else if (attr === 'visible') {\n ouputValue = value !== NONE && value !== 'hidden';\n // display=none on parent element always takes precedence over child element\n if (parentAttributes && parentAttributes.visible === false) {\n ouputValue = false;\n }\n } else if (attr === 'opacity') {\n ouputValue = parseFloat(value);\n if (parentAttributes && typeof parentAttributes.opacity !== 'undefined') {\n ouputValue *= parentAttributes.opacity as number;\n }\n } else if (attr === 'textAnchor' /* text-anchor */) {\n ouputValue = value === 'start' ? LEFT : value === 'end' ? RIGHT : CENTER;\n } else if (attr === 'charSpacing') {\n // parseUnit returns px and we convert it to em\n parsed = (parseUnit(value, fontSize) / fontSize) * 1000;\n } else if (attr === 'paintFirst') {\n const fillIndex = value.indexOf(FILL);\n const strokeIndex = value.indexOf(STROKE);\n ouputValue = FILL;\n if (fillIndex > -1 && strokeIndex > -1 && strokeIndex < fillIndex) {\n ouputValue = STROKE;\n } else if (fillIndex === -1 && strokeIndex > -1) {\n ouputValue = STROKE;\n }\n } else if (\n attr === 'href' ||\n attr === 'xlink:href' ||\n attr === 'font' ||\n attr === 'id'\n ) {\n return value;\n } else if (attr === 'imageSmoothing') {\n return value === 'optimizeQuality';\n } else {\n parsed = isArray\n ? (value as string[]).map(parseUnit)\n : parseUnit(value, fontSize);\n }\n\n return !isArray && isNaN(parsed! as number) ? ouputValue : parsed!;\n}\n"],"names":["normalizeValue","attr","value","parentAttributes","fontSize","isArray","Array","parsed","ouputValue","FILL","STROKE","NONE","replace","split","map","parseFloat","transformMatrix","multiplyTransformMatrices","parseTransformAttribute","visible","opacity","LEFT","RIGHT","CENTER","parseUnit","fillIndex","indexOf","strokeIndex","isNaN"],"mappings":"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"}