UNPKG

fabric

Version:

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

1 lines 5.97 kB
{"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';\nimport { TEXT_DECORATION_THICKNESS } from '../shapes/Text/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' || attr === TEXT_DECORATION_THICKNESS) {\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","TEXT_DECORATION_THICKNESS","parseUnit","fillIndex","indexOf","strokeIndex","isNaN"],"mappings":"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"}