UNPKG

fabric

Version:

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

1 lines 5.11 kB
{"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.keys(valuesToConvert) as K[]).reduce(\n (acc, prop) => {\n const propValue = valuesToConvert[prop];\n if (propValue === 'Infinity') {\n finalValue = 1;\n } else if (propValue === '-Infinity') {\n finalValue = 0;\n } else {\n finalValue =\n typeof propValue === 'string' ? parseFloat(propValue) : propValue;\n if (typeof propValue === 'string' && 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","keys","reduce","acc","prop","propValue","parseFloat","isPercent","getValue","el","key","getAttribute","parseLinearCoords","x1","y1","x2","y2","parseRadialCoords","r1","r2","parseCoords","size","parseType","_objectSpread","parseGradientUnits"],"mappings":"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"}