fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
1 lines • 2.68 kB
Source Map (JSON)
{"version":3,"file":"parseColorStops.mjs","names":[],"sources":["../../../../src/gradient/parser/parseColorStops.ts"],"sourcesContent":["import { Color } from '../../color/Color';\nimport { parsePercent } from '../../parser/percent';\nimport { ifNaN } from '../../util/internals/ifNaN';\nimport type { ColorStop } from '../typedefs';\n\nconst RE_KEY_VALUE_PAIRS = /\\s*;\\s*/;\nconst RE_KEY_VALUE = /\\s*:\\s*/;\n\nfunction parseColorStop(el: SVGStopElement, opacityMultiplier: number) {\n let colorValue, opacityValue;\n const style = el.getAttribute('style');\n if (style) {\n const keyValuePairs = style.split(RE_KEY_VALUE_PAIRS);\n\n if (keyValuePairs[keyValuePairs.length - 1] === '') {\n keyValuePairs.pop();\n }\n\n for (let i = keyValuePairs.length; i--; ) {\n const [key, value] = keyValuePairs[i]\n .split(RE_KEY_VALUE)\n .map((s) => s.trim());\n if (key === 'stop-color') {\n colorValue = value;\n } else if (key === 'stop-opacity') {\n opacityValue = value;\n }\n }\n }\n\n colorValue = colorValue || el.getAttribute('stop-color') || 'rgb(0,0,0)';\n opacityValue = ifNaN(\n parseFloat(opacityValue || el.getAttribute('stop-opacity') || ''),\n 1,\n );\n\n const color = new Color(colorValue);\n\n color.setAlpha(color.getAlpha() * opacityValue * opacityMultiplier);\n\n return {\n offset: parsePercent(el.getAttribute('offset'), 0),\n color: color.toRgba(),\n };\n}\n\nexport function parseColorStops(\n el: SVGGradientElement,\n opacityAttr: string | null,\n) {\n const colorStops: ColorStop[] = [],\n colorStopEls = el.getElementsByTagName('stop'),\n multiplier = parsePercent(opacityAttr, 1);\n for (let i = colorStopEls.length; i--; ) {\n colorStops.push(parseColorStop(colorStopEls[i], multiplier));\n }\n return colorStops;\n}\n"],"mappings":";;;;AAKA,MAAM,qBAAqB;AAC3B,MAAM,eAAe;AAErB,SAAS,eAAe,IAAoB,mBAA2B;CACrE,IAAI,YAAY;CAChB,MAAM,QAAQ,GAAG,aAAa,QAAQ;AACtC,KAAI,OAAO;EACT,MAAM,gBAAgB,MAAM,MAAM,mBAAmB;AAErD,MAAI,cAAc,cAAc,SAAS,OAAO,GAC9C,eAAc,KAAK;AAGrB,OAAK,IAAI,IAAI,cAAc,QAAQ,MAAO;GACxC,MAAM,CAAC,KAAK,SAAS,cAAc,GAChC,MAAM,aAAa,CACnB,KAAK,MAAM,EAAE,MAAM,CAAC;AACvB,OAAI,QAAQ,aACV,cAAa;YACJ,QAAQ,eACjB,gBAAe;;;AAKrB,cAAa,cAAc,GAAG,aAAa,aAAa,IAAI;AAC5D,gBAAe,MACb,WAAW,gBAAgB,GAAG,aAAa,eAAe,IAAI,GAAG,EACjE,EACD;CAED,MAAM,QAAQ,IAAI,MAAM,WAAW;AAEnC,OAAM,SAAS,MAAM,UAAU,GAAG,eAAe,kBAAkB;AAEnE,QAAO;EACL,QAAQ,aAAa,GAAG,aAAa,SAAS,EAAE,EAAE;EAClD,OAAO,MAAM,QAAQ;EACtB;;AAGH,SAAgB,gBACd,IACA,aACA;CACA,MAAM,aAA0B,EAAE,EAChC,eAAe,GAAG,qBAAqB,OAAO,EAC9C,aAAa,aAAa,aAAa,EAAE;AAC3C,MAAK,IAAI,IAAI,aAAa,QAAQ,KAChC,YAAW,KAAK,eAAe,aAAa,IAAI,WAAW,CAAC;AAE9D,QAAO"}