fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
1 lines • 4.49 kB
Source Map (JSON)
{"version":3,"file":"normalizeValue.min.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":"gYAMO,SAASA,EACdC,EACAC,EACAC,EACAC,GAEA,MAAMC,EAAUC,MAAMD,QAAQH,GAC9B,IAAIK,EACAC,EAA0DN,EAC9D,GAAKD,IAASQ,GAAQR,IAASS,GAAWR,IAAUS,EAE7C,IAAa,kBAATV,EACT,MAAiB,uBAAVC,EACF,GAAa,oBAATD,EAEPO,EADEN,IAAUS,EACC,KAEAT,EAAMU,QAAQ,KAAM,KAAKC,MAAM,OAAOC,IAAIC,iBAEpD,GAAa,oBAATd,EAEPO,EADEL,GAAoBA,EAAiBa,gBAC1BC,EACXd,EAAiBa,gBACjBE,EAAwBhB,IAGbgB,EAAwBhB,QAElC,GAAa,YAATD,EACTO,EAAaN,IAAUS,GAAkB,WAAVT,EAE3BC,IAAiD,IAA7BA,EAAiBgB,UACvCX,GAAa,QAEV,GAAa,YAATP,EACTO,EAAaO,WAAWb,GACpBC,QAAwD,IAA7BA,EAAiBiB,UAC9CZ,GAAcL,EAAiBiB,cAE5B,GAAa,eAATnB,EACTO,EAAuB,UAAVN,EAAoBmB,EAAiB,QAAVnB,EAAkBoB,EAAQC,OAC7D,GAAa,gBAATtB,GAA0BA,IAASuB,EAE5CjB,EAAUkB,EAAUvB,EAAOE,GAAYA,EAAY,SAC9C,GAAa,eAATH,EAAuB,CAChC,MAAMyB,EAAYxB,EAAMyB,QAAQlB,GAC1BmB,EAAc1B,EAAMyB,QAAQjB,GAClCF,EAAaC,GACTiB,GAAa,GAAKE,GAAe,GAAKA,EAAcF,IAE9B,IAAfA,GAAoBE,GAAe,KAD5CpB,EAAaE,EAIjB,KAAO,IACI,SAATT,GACS,eAATA,GACS,SAATA,GACS,OAATA,EAEA,OAAOC,EACF,GAAa,mBAATD,EACT,MAAiB,oBAAVC,EAEPK,EAASF,EACJH,EAAmBY,IAAIW,GACxBA,EAAUvB,EAAOE,EACvB,OAxDEI,EAAa,GA0Df,OAAQH,GAAWwB,MAAMtB,GAAqBC,EAAaD,CAC7D"}