Skip to content

Commit 604504a

Browse files
committed
Group features by browser support
1 parent 87d6e9f commit 604504a

File tree

2 files changed

+712
-3823
lines changed

2 files changed

+712
-3823
lines changed

build-prefixes.js

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ const BROWSER_MAPPING = {
1515
op_mini: null,
1616
};
1717

18-
let p = {};
18+
let p = new Map();
1919
for (let prop in prefixes) {
2020
let browserMap = {};
2121
for (let b of prefixes[prop].browsers) {
@@ -43,17 +43,31 @@ for (let prop in prefixes) {
4343
}
4444
}
4545
}
46-
p[prop] = browserMap;
46+
// p[prop] = browserMap;
47+
let s = JSON.stringify(browserMap);
48+
let found = false;
49+
for (let [key, val] of p) {
50+
if (JSON.stringify(val) === s) {
51+
key.push(prop);
52+
found = true;
53+
break;
54+
}
55+
}
56+
if (!found) {
57+
p.set([prop], browserMap);
58+
}
4759
}
4860

61+
console.log(p)
62+
4963
let prefixMapping = {
5064
webkit: 'WebKit',
5165
moz: 'Moz',
5266
ms: 'Ms',
5367
o: 'O'
5468
};
5569

56-
let enumify = (f) => f.replace(/^@/, 'At').replace(/^::/, 'PseudoElement').replace(/^:/, 'PseudoClass').replace(/(^|-)([a-z])/g, (_, a, x) => x.toUpperCase())
70+
let enumify = (f) => f.replace(/^@([a-z])/, (_, x) => 'At' + x.toUpperCase()).replace(/^::([a-z])/, (_, x) => 'PseudoElement' + x.toUpperCase()).replace(/^:([a-z])/, (_, x) => 'PseudoClass' + x.toUpperCase()).replace(/(^|-)([a-z])/g, (_, a, x) => x.toUpperCase())
5771

5872
let s = `// This file is autogenerated by build-prefixes.js. DO NOT EDIT!
5973
@@ -66,15 +80,15 @@ pub struct Browsers {
6680
}
6781
6882
pub enum Feature {
69-
${Object.keys(p).map(enumify).sort().join(',\n ')}
83+
${[...p.keys()].flat().map(enumify).sort().join(',\n ')}
7084
}
7185
7286
impl Feature {
7387
pub fn prefixes_for(&self, browsers: Browsers) -> VendorPrefix {
7488
let mut prefixes = VendorPrefix::None;
7589
match self {
76-
${Object.entries(p).map(([name, versions]) => {
77-
return `Feature::${enumify(name)} => {
90+
${[...p].map(([features, versions]) => {
91+
return `${features.map(name => `Feature::${enumify(name)}`).join(' |\n ')} => {
7892
${Object.entries(versions).map(([name, prefixes]) => {
7993
return `if let Some(version) = browsers.${name} {
8094
${Object.entries(prefixes).map(([prefix, [min, max]]) => {

0 commit comments

Comments
 (0)