]> source.dussan.org Git - svg.js.git/commitdiff
only apply color conversion to attributes that can take a color (fixes #1241)
authorUlrich-Matthias Schäfer <ulima.ums@googlemail.com>
Sun, 3 Sep 2023 06:07:53 +0000 (08:07 +0200)
committerUlrich-Matthias Schäfer <ulima.ums@googlemail.com>
Sun, 3 Sep 2023 06:07:53 +0000 (08:07 +0200)
spec/spec/modules/core/attr.js
src/modules/core/attr.js

index b47794a4c520082e5458a7544fad8ae890af10dd..9a52c563cd77f5991e4c84f1e4f3b789849a03d9 100644 (file)
@@ -1,6 +1,6 @@
 /* globals describe, expect, it, beforeEach, spyOn, jasmine */
 
-import { Element, create, Text } from '../../../../src/main.js'
+import { Element, create, Text, Rect } from '../../../../src/main.js'
 import { registerAttrHook } from '../../../../src/modules/core/attr.js'
 
 const { objectContaining } = jasmine
@@ -105,6 +105,12 @@ describe('attr.js', () => {
       expect(frozen.attr('leading', 2)).toBe(frozen)
     })
 
+    it('only applies transforms color values if the attribute is designed to take a color as input', () => {
+      const rect = new Rect().attr('id', '#ff0')
+
+      expect(rect.attr('id')).toBe('#ff0')
+    })
+
     it('executes registered hooks', () => {
       registerAttrHook((attr, val, el) => {
         if (el.node.id === 'somethingVeryRandom' && attr === 'name') {
index a96f7064ac08b057e62fbb3319a4eaf7a8d692b2..36b331bb9b21a55eeafe47e9dbaeac64715896dd 100644 (file)
@@ -4,6 +4,16 @@ import Color from '../../types/Color.js'
 import SVGArray from '../../types/SVGArray.js'
 import SVGNumber from '../../types/SVGNumber.js'
 
+const colorAttributes = new Set([
+  'fill',
+  'stroke',
+  'color',
+  'bgcolor',
+  'stop-color',
+  'flood-color',
+  'lighting-color'
+])
+
 const hooks = []
 export function registerAttrHook(fn) {
   hooks.push(fn)
@@ -53,7 +63,7 @@ export default function attr(attr, val, ns) {
     // ensure correct numeric values (also accepts NaN and Infinity)
     if (typeof val === 'number') {
       val = new SVGNumber(val)
-    } else if (Color.isColor(val)) {
+    } else if (colorAttributes.has(attr) && Color.isColor(val)) {
       // ensure full hex color
       val = new Color(val)
     } else if (val.constructor === Array) {