fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
1 lines • 4.99 kB
Source Map (JSON)
{"version":3,"file":"parseCoords.mjs","sources":["../../../../src/gradient/parser/parseCoords.ts"],"sourcesContent":["import { isPercent } from '../../parser/percent';\nimport type { TSize } from '../../typedefs';\nimport type { GradientCoords, GradientType, GradientUnits } from '../typedefs';\nimport { parseGradientUnits, parseType } from './misc';\n\nfunction convertPercentUnitsToValues<\n T extends GradientType,\n K extends keyof GradientCoords<T>,\n>(\n valuesToConvert: Record<K, string | number>,\n { width, height, gradientUnits }: TSize & { gradientUnits: GradientUnits },\n) {\n let finalValue;\n return (Object.entries(valuesToConvert) as [K, string | number][]).reduce(\n (acc, [prop, propValue]) => {\n if (propValue === 'Infinity') {\n finalValue = 1;\n } else if (propValue === '-Infinity') {\n finalValue = 0;\n } else {\n const isString = typeof propValue === 'string';\n finalValue = isString ? parseFloat(propValue) : propValue;\n if (isString && isPercent(propValue)) {\n finalValue *= 0.01;\n if (gradientUnits === 'pixels') {\n // then we need to fix those percentages here in svg parsing\n if (prop === 'x1' || prop === 'x2' || prop === 'r2') {\n finalValue *= width;\n }\n if (prop === 'y1' || prop === 'y2') {\n finalValue *= height;\n }\n }\n }\n }\n acc[prop] = finalValue;\n return acc;\n },\n {} as Record<K, number>,\n );\n}\n\nfunction getValue(el: SVGGradientElement, key: string) {\n return el.getAttribute(key);\n}\n\nexport function parseLinearCoords(el: SVGGradientElement) {\n return {\n x1: getValue(el, 'x1') || 0,\n y1: getValue(el, 'y1') || 0,\n x2: getValue(el, 'x2') || '100%',\n y2: getValue(el, 'y2') || 0,\n };\n}\n\nexport function parseRadialCoords(el: SVGGradientElement) {\n return {\n x1: getValue(el, 'fx') || getValue(el, 'cx') || '50%',\n y1: getValue(el, 'fy') || getValue(el, 'cy') || '50%',\n r1: 0,\n x2: getValue(el, 'cx') || '50%',\n y2: getValue(el, 'cy') || '50%',\n r2: getValue(el, 'r') || '50%',\n };\n}\n\nexport function parseCoords(el: SVGGradientElement, size: TSize) {\n return convertPercentUnitsToValues(\n parseType(el) === 'linear' ? parseLinearCoords(el) : parseRadialCoords(el),\n {\n ...size,\n gradientUnits: parseGradientUnits(el),\n },\n );\n}\n"],"names":["convertPercentUnitsToValues","valuesToConvert","_ref","width","height","gradientUnits","finalValue","Object","entries","reduce","acc","_ref2","prop","propValue","isString","parseFloat","isPercent","getValue","el","key","getAttribute","parseLinearCoords","x1","y1","x2","y2","parseRadialCoords","r1","r2","parseCoords","size","parseType","parseGradientUnits"],"mappings":"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"}