From c3fdc72c1b8fe1b9ae590f0429c542c64bcbc86f Mon Sep 17 00:00:00 2001 From: "asamuzaK (Kazz)" Date: Sat, 3 May 2025 15:48:29 +0900 Subject: [PATCH] Fix isColor() Related https://github.com/jsdom/cssstyle/issues/199 --- src/js/util.ts | 4 +++- test/css-gradient.test.ts | 17 +++++++++++++++++ test/util.test.ts | 10 ++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/js/util.ts b/src/js/util.ts index 008e584..93c1fa3 100644 --- a/src/js/util.ts +++ b/src/js/util.ts @@ -31,6 +31,8 @@ const DEG_HALF = 180; /* regexp */ const REG_COLOR = new RegExp(`^(?:${SYN_COLOR_TYPE})$`); +const REG_FN_COLOR = + /^(?:(?:ok)?l(?:ab|ch)|color(?:-mix)?|hsla?|hwb|rgba?|var)\(/; const REG_MIX = new RegExp(SYN_MIX); /** @@ -175,7 +177,7 @@ export const isColor = (value: unknown, opt: Options = {}): boolean => { } } else if (REG_COLOR.test(value) || REG_MIX.test(value)) { return true; - } else { + } else if (REG_FN_COLOR.test(value)) { opt.nullable = true; if (!opt.format) { opt.format = VAL_SPEC; diff --git a/test/css-gradient.test.ts b/test/css-gradient.test.ts index 3933eb3..cc3fa49 100644 --- a/test/css-gradient.test.ts +++ b/test/css-gradient.test.ts @@ -411,4 +411,21 @@ describe('is CSS gradient', () => { const res = func('linear-gradient(red, blue)'); assert.strictEqual(res, true, 'result'); }); + + it('should get true', () => { + const res = func('radial-gradient(transparent, var(--custom-color))'); + assert.strictEqual(res, true, 'result'); + }); + + it('should get true', () => { + const res = func('radial-gradient(transparent, var(--custom-color))'); + assert.strictEqual(res, true, 'result'); + }); + + it('should get true', () => { + const res = func( + 'radial-gradient(transparent, /* comment */ var(--custom-color))' + ); + assert.strictEqual(res, true, 'result'); + }); }); diff --git a/test/util.test.ts b/test/util.test.ts index 283c7f5..364e464 100644 --- a/test/util.test.ts +++ b/test/util.test.ts @@ -190,6 +190,16 @@ describe('is color', () => { ); assert.strictEqual(res, true, 'result'); }); + + it('should get false', () => { + const res = func('url(var(--foo))'); + assert.strictEqual(res, false, 'result'); + }); + + it('should get false', () => { + const res = func('radial-gradient(transparent, var(--custom-color))'); + assert.strictEqual(res, false, 'result'); + }); }); describe('value to JSON string', () => {