fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
1 lines • 3.05 kB
Source Map (JSON)
{"version":3,"file":"parseColorStops.min.mjs","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"],"names":["RE_KEY_VALUE_PAIRS","RE_KEY_VALUE","parseColorStop","el","opacityMultiplier","colorValue","opacityValue","style","getAttribute","keyValuePairs","split","length","pop","i","key","value","map","s","trim","ifNaN","parseFloat","color","Color","setAlpha","getAlpha","offset","parsePercent","toRgba","parseColorStops","opacityAttr","colorStops","colorStopEls","getElementsByTagName","multiplier","push"],"mappings":"yKAKA,MAAMA,EAAqB,UACrBC,EAAe,UAErB,SAASC,EAAeC,EAAoBC,GAC1C,IAAIC,EAAYC,EAChB,MAAMC,EAAQJ,EAAGK,aAAa,SAC9B,GAAID,EAAO,CACT,MAAME,EAAgBF,EAAMG,MAAMV,GAEc,KAA5CS,EAAcA,EAAcE,OAAS,IACvCF,EAAcG,MAGhB,IAAK,IAAIC,EAAIJ,EAAcE,OAAQE,KAAO,CACxC,MAAOC,EAAKC,GAASN,EAAcI,GAChCH,MAAMT,GACNe,IAAKC,GAAMA,EAAEC,QACJ,eAARJ,EACFT,EAAaU,EACI,iBAARD,IACTR,EAAeS,EAEnB,CACF,CAEAV,EAAaA,GAAcF,EAAGK,aAAa,eAAiB,aAC5DF,EAAea,EACbC,WAAWd,GAAgBH,EAAGK,aAAa,iBAAmB,IAC9D,GAGF,MAAMa,EAAQ,IAAIC,EAAMjB,GAIxB,OAFAgB,EAAME,SAASF,EAAMG,WAAalB,EAAeF,GAE1C,CACLqB,OAAQC,EAAavB,EAAGK,aAAa,UAAW,GAChDa,MAAOA,EAAMM,SAEjB,CAEO,SAASC,EACdzB,EACA0B,GAEA,MAAMC,EAA0B,GAC9BC,EAAe5B,EAAG6B,qBAAqB,QACvCC,EAAaP,EAAaG,EAAa,GACzC,IAAK,IAAIhB,EAAIkB,EAAapB,OAAQE,KAChCiB,EAAWI,KAAKhC,EAAe6B,EAAalB,GAAIoB,IAElD,OAAOH,CACT"}