UNPKG

fabric

Version:

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

1 lines 3.9 kB
{"version":3,"file":"parseColorStops.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":";;;;AAKA,MAAMA,kBAAkB,GAAG,SAAS;AACpC,MAAMC,YAAY,GAAG,SAAS;AAE9B,SAASC,cAAcA,CAACC,EAAkB,EAAEC,iBAAyB,EAAE;EACrE,IAAIC,UAAU,EAAEC,YAAY;AAC5B,EAAA,MAAMC,KAAK,GAAGJ,EAAE,CAACK,YAAY,CAAC,OAAO,CAAC;AACtC,EAAA,IAAID,KAAK,EAAE;AACT,IAAA,MAAME,aAAa,GAAGF,KAAK,CAACG,KAAK,CAACV,kBAAkB,CAAC;IAErD,IAAIS,aAAa,CAACA,aAAa,CAACE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;MAClDF,aAAa,CAACG,GAAG,EAAE;AACrB,IAAA;IAEA,KAAK,IAAIC,CAAC,GAAGJ,aAAa,CAACE,MAAM,EAAEE,CAAC,EAAE,GAAI;MACxC,MAAM,CAACC,GAAG,EAAEC,KAAK,CAAC,GAAGN,aAAa,CAACI,CAAC,CAAC,CAClCH,KAAK,CAACT,YAAY,CAAC,CACnBe,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAACC,IAAI,EAAE,CAAC;MACvB,IAAIJ,GAAG,KAAK,YAAY,EAAE;AACxBT,QAAAA,UAAU,GAAGU,KAAK;AACpB,MAAA,CAAC,MAAM,IAAID,GAAG,KAAK,cAAc,EAAE;AACjCR,QAAAA,YAAY,GAAGS,KAAK;AACtB,MAAA;AACF,IAAA;AACF,EAAA;EAEAV,UAAU,GAAGA,UAAU,IAAIF,EAAE,CAACK,YAAY,CAAC,YAAY,CAAC,IAAI,YAAY;AACxEF,EAAAA,YAAY,GAAGa,KAAK,CAClBC,UAAU,CAACd,YAAY,IAAIH,EAAE,CAACK,YAAY,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,EACjE,CACF,CAAC;AAED,EAAA,MAAMa,KAAK,GAAG,IAAIC,KAAK,CAACjB,UAAU,CAAC;AAEnCgB,EAAAA,KAAK,CAACE,QAAQ,CAACF,KAAK,CAACG,QAAQ,EAAE,GAAGlB,YAAY,GAAGF,iBAAiB,CAAC;EAEnE,OAAO;IACLqB,MAAM,EAAEC,YAAY,CAACvB,EAAE,CAACK,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAClDa,IAAAA,KAAK,EAAEA,KAAK,CAACM,MAAM;GACpB;AACH;AAEO,SAASC,eAAeA,CAC7BzB,EAAsB,EACtB0B,WAA0B,EAC1B;EACA,MAAMC,UAAuB,GAAG,EAAE;AAChCC,IAAAA,YAAY,GAAG5B,EAAE,CAAC6B,oBAAoB,CAAC,MAAM,CAAC;AAC9CC,IAAAA,UAAU,GAAGP,YAAY,CAACG,WAAW,EAAE,CAAC,CAAC;EAC3C,KAAK,IAAIhB,CAAC,GAAGkB,YAAY,CAACpB,MAAM,EAAEE,CAAC,EAAE,GAAI;AACvCiB,IAAAA,UAAU,CAACI,IAAI,CAAChC,cAAc,CAAC6B,YAAY,CAAClB,CAAC,CAAC,EAAEoB,UAAU,CAAC,CAAC;AAC9D,EAAA;AACA,EAAA,OAAOH,UAAU;AACnB;;;;"}