Skip to content

Commit 7e24d73

Browse files
committed
Add linear-gradient syntax invalid warnings
1 parent 9d18405 commit 7e24d73

File tree

4 files changed

+35
-3
lines changed

4 files changed

+35
-3
lines changed

index.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,9 @@ function getDirection(gradient) {
176176

177177
function gradientToFilter(gradient) {
178178
var obj = parseGradient(gradient);
179+
180+
if (!obj) return null;
181+
179182
var startColor = obj.colorStops[0].color;
180183
var endColor = obj.colorStops.slice(-1)[0].color;
181184
var result = getDirection(obj);
@@ -214,7 +217,6 @@ function getGradientFromRule(rule) {
214217
var len = gradients.length;
215218
// Only select the first gradienat if there more than one gradients
216219
if (len) {
217-
// skip `linear-gradient`
218220
gradient.value = gradients[0].trim();
219221
gradient.decl = decl;
220222

@@ -251,6 +253,12 @@ module.exports = postcss.plugin('postcss-filter-gradient', function (opts) {
251253
if (gradient.value) {
252254
filter = gradientToFilter(gradient.value);
253255

256+
// warn users when the gradient value is not valid.
257+
if (!filter) {
258+
gradient.decl.warn(result, '`' + gradient.value + '` is not a valid linear gradient value.');
259+
return;
260+
}
261+
254262
if (opts.skipMultiColor && filter.isMultiColor) {
255263
return;
256264
}

test/fixtures/invalid-syntax.css

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
a {
2+
background: linear-gradient();
3+
}
4+
5+
b {
6+
background: linear-gradient(#000);
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
a {
2+
background: linear-gradient();
3+
}
4+
5+
b {
6+
background: linear-gradient(#000);
7+
}

test/test.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@ var test = function (inputFile, opts, done, warnings) {
1313
postcss([plugin(opts)]).process(input).then(function (result) {
1414
expect(result.css).to.eql(output);
1515
if (warnings) {
16-
result.warnings().forEach(function (warn) {
17-
expect(warn.text).to.eql(warnings);
16+
result.warnings().forEach(function (warn, i) {
17+
var expectedWarning = Array.isArray(warnings) ? warnings[i] : warnings;
18+
expect(warn.text).to.eql(expectedWarning);
1819
});
1920
} else {
2021
expect(result.warnings()).to.be.empty;
@@ -42,6 +43,15 @@ describe('postcss-filter-gradient', function () {
4243
test('filter', {}, done, warnings);
4344
});
4445

46+
it('should do nothing when handle invalid linear gradient syntax', function (done) {
47+
var warnings = [
48+
'`linear-gradient()` is not a valid linear gradient value.',
49+
'`linear-gradient(#000)` is not a valid linear gradient value.'
50+
];
51+
52+
test('invalid-syntax', {}, done, warnings);
53+
});
54+
4555
it('should support the standard syntax', function (done) {
4656
test('standard', {}, done);
4757
});

0 commit comments

Comments
 (0)