Skip to content

Commit

Permalink
Simplify browser ranges
Browse files Browse the repository at this point in the history
  • Loading branch information
edg2s committed Jun 6, 2024
1 parent e06e7c6 commit 19a15f3
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 14 deletions.
18 changes: 9 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,15 @@ cat main.css | doiuse --browsers "ie >= 9, > 1%, last 2 versions"

**Sample output:**
```
/projects/website/main.css:5:3: CSS3 Box-sizing not supported by: IE (8,9,10,11), Chrome (36,37,38), Safari (8,7.1), Opera (24,25), iOS Safari (8,7.1,8.1), Android Browser (4.1,4.4,4.4.4), IE Mobile (10,11)
/projects/website/main.css:6:3: CSS3 Box-sizing not supported by: IE (8,9,10,11), Chrome (36,37,38), Safari (8,7.1), Opera (24,25), iOS Safari (8,7.1,8.1), Android Browser (4.1,4.4,4.4.4), IE Mobile (10,11)
/projects/website/main.css:8:3: CSS user-select: none not supported by: IE (8,9)
/projects/website/main.css:9:3: CSS user-select: none not supported by: IE (8,9)
/projects/website/main.css:10:3: CSS user-select: none not supported by: IE (8,9)
/projects/website/main.css:11:3: CSS user-select: none not supported by: IE (8,9)
/projects/website/main.css:12:3: CSS user-select: none not supported by: IE (8,9)
/projects/website/main.css:13:3: Pointer events not supported by: IE (8,9,10), Firefox (32,33), Chrome (36,37,38), Safari (8,7.1), Opera (24,25), iOS Safari (8,7.1,8.1), Android Browser (4.1,4.4,4.4.4), IE Mobile (10)
/projects/website/main.css:14:3: Pointer events not supported by: IE (8,9,10), Firefox (32,33), Chrome (36,37,38), Safari (8,7.1), Opera (24,25), iOS Safari (8,7.1,8.1), Android Browser (4.1,4.4,4.4.4), IE Mobile (10)
/projects/website/main.css:5:3: CSS3 Box-sizing not supported by: IE (8-11), Chrome (36-38), Safari (8,7.1), Opera (24-25), iOS Safari (8,7.1,8.1), Android Browser (4.1,4.4,4.4.4), IE Mobile (10-11)
/projects/website/main.css:6:3: CSS3 Box-sizing not supported by: IE (8-11), Chrome (36-38), Safari (8,7.1), Opera (24-25), iOS Safari (8,7.1,8.1), Android Browser (4.1,4.4,4.4.4), IE Mobile (10-11)
/projects/website/main.css:8:3: CSS user-select: none not supported by: IE (8-9)
/projects/website/main.css:9:3: CSS user-select: none not supported by: IE (8-9)
/projects/website/main.css:10:3: CSS user-select: none not supported by: IE (8-9)
/projects/website/main.css:11:3: CSS user-select: none not supported by: IE (8-9)
/projects/website/main.css:12:3: CSS user-select: none not supported by: IE (8-9)
/projects/website/main.css:13:3: Pointer events not supported by: IE (8-10), Firefox (32-33), Chrome (36-38), Safari (8,7.1), Opera (24-25), iOS Safari (8,7.1,8.1), Android Browser (4.1,4.4,4.4.4), IE Mobile (10)
/projects/website/main.css:14:3: Pointer events not supported by: IE (8-10), Firefox (32-33), Chrome (36-38), Safari (8,7.1), Opera (24-25), iOS Safari (8,7.1,8.1), Android Browser (4.1,4.4,4.4.4), IE Mobile (10)
/projects/website/main.css:32:3: CSS3 Transforms not supported by: IE (8)
```

Expand Down
8 changes: 4 additions & 4 deletions test/cli.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,13 @@ const pathToCli = ` node ${joinPath(selfPath, '../bin/cli.js')}`;
const catCss = ` cat ${cssFile} `;

const expectedCssGradients = [
'<streaming css input>:8:1: CSS Gradients not supported by: IE (8,9) (css-gradients)\n',
'<streaming css input>:12:1: CSS Gradients not supported by: IE (8,9) (css-gradients)\n',
'<streaming css input>:8:1: CSS Gradients not supported by: IE (8-9) (css-gradients)\n',
'<streaming css input>:12:1: CSS Gradients not supported by: IE (8-9) (css-gradients)\n',
];

const expectedCssRepeatingGradients = [
'<streaming css input>:16:1: CSS Repeating Gradients not supported by: IE (8,9) (css-repeating-gradients)\n',
'<streaming css input>:20:1: CSS Repeating Gradients not supported by: IE (8,9) (css-repeating-gradients)\n',
'<streaming css input>:16:1: CSS Repeating Gradients not supported by: IE (8-9) (css-repeating-gradients)\n',
'<streaming css input>:20:1: CSS Repeating Gradients not supported by: IE (8-9) (css-repeating-gradients)\n',
];
const expected = [
...expectedCssGradients,
Expand Down
40 changes: 39 additions & 1 deletion utils/util.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,45 @@ export function formatBrowserName(browserKey, versions) {
if (!versions) {
return browserName || '';
}
return (`${browserName} (${versions.join(',')})`);

const ranges = [];
let rangeStart = -1;
let rangeEnd = -1;

for (const [index, versionString] of versions.entries()) {
const current = +versionString;
const next = +versions[index + 1];

if (Number.isInteger(current)) {
if (rangeStart === -1) {
rangeStart = current;
rangeEnd = current;
} else if (current === rangeEnd + 1) {
rangeEnd = current;
} else {
ranges.push(rangeStart === rangeEnd ? [rangeStart] : [rangeStart, rangeEnd]);
rangeStart = current;
rangeEnd = current;
}

if (!Number.isInteger(next) || current + 1 !== next) {
ranges.push(rangeStart === rangeEnd ? [rangeStart] : [rangeStart, rangeEnd]);
rangeStart = -1;
rangeEnd = -1;
}
} else {
if (rangeStart !== -1) {
ranges.push(rangeStart === rangeEnd ? [rangeStart] : [rangeStart, rangeEnd]);
rangeStart = -1;
rangeEnd = -1;
}
ranges.push([versionString]);
}
}

const versionString = ranges.map((range) => range.join('-')).join(',');

return `${browserName} (${versionString})`;
}

/**
Expand Down

0 comments on commit 19a15f3

Please sign in to comment.