Skip to content

Commit ce348df

Browse files
committed
Only use alignment shorthands when supported
1 parent 48f9a51 commit ce348df

File tree

4 files changed

+191
-65
lines changed

4 files changed

+191
-65
lines changed

build-prefixes.js

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -102,18 +102,21 @@ for (let prop in prefixes) {
102102
}
103103
}
104104
}
105-
// p[prop] = browserMap;
106-
let s = JSON.stringify(browserMap);
105+
addValue(p, browserMap, prop);
106+
}
107+
108+
function addValue(map, value, prop) {
109+
let s = JSON.stringify(value);
107110
let found = false;
108-
for (let [key, val] of p) {
111+
for (let [key, val] of map) {
109112
if (JSON.stringify(val) === s) {
110113
key.push(prop);
111114
found = true;
112115
break;
113116
}
114117
}
115118
if (!found) {
116-
p.set([prop], browserMap);
119+
map.set([prop], value);
117120
}
118121
}
119122

@@ -147,7 +150,7 @@ let cssFeatures = [
147150
'css-rrggbbaa'
148151
];
149152

150-
let compat = {};
153+
let compat = new Map();
151154
for (let feature of cssFeatures) {
152155
let data = unpack(features[feature]);
153156
let browserMap = {};
@@ -172,12 +175,15 @@ for (let feature of cssFeatures) {
172175
}
173176
}
174177

175-
compat[feature] = browserMap;
178+
addValue(compat, browserMap, feature);
176179
}
177180

178181
let mdnFeatures = {
179182
doublePositionGradients: mdn.css.types.image.gradient['radial-gradient'].doubleposition.__compat.support,
180-
clamp: mdn.css.types.clamp.__compat.support
183+
clamp: mdn.css.types.clamp.__compat.support,
184+
placeSelf: mdn.css.properties['place-self'].__compat.support,
185+
placeContent: mdn.css.properties['place-content'].__compat.support,
186+
placeItems: mdn.css.properties['place-items'].__compat.support
181187
};
182188

183189
for (let feature in mdnFeatures) {
@@ -202,7 +208,7 @@ for (let feature in mdnFeatures) {
202208
browserMap[name] = v;
203209
}
204210

205-
compat[feature] = browserMap;
211+
addValue(compat, browserMap, feature);
206212
}
207213

208214
let prefixMapping = {
@@ -284,14 +290,14 @@ let c = `// This file is autogenerated by build-prefixes.js. DO NOT EDIT!
284290
use crate::properties::prefixes::Browsers;
285291
286292
pub enum Feature {
287-
${Object.keys(compat).map(enumify).sort().join(',\n ')}
293+
${[...compat.keys()].flat().map(enumify).sort().join(',\n ')}
288294
}
289295
290296
impl Feature {
291297
pub fn is_compatible(&self, browsers: Browsers) -> bool {
292298
match self {
293-
${Object.entries(compat).map(([name, browsers]) =>
294-
`Feature::${enumify(name)} => {
299+
${[...compat].map(([features, browsers]) =>
300+
`${features.map(name => `Feature::${enumify(name)}`).join(' |\n ')} => {
295301
${Object.entries(browsers).map(([browser, min]) =>
296302
`if let Some(version) = browsers.${browser} {
297303
if version >= ${min} {

src/compat.rs

Lines changed: 90 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ pub enum Feature {
3131
DoublePositionGradients,
3232
FormValidation,
3333
Fullscreen,
34+
PlaceContent,
35+
PlaceItems,
36+
PlaceSelf,
3437
Shadowdomv1
3538
}
3639

@@ -131,7 +134,8 @@ impl Feature {
131134
}
132135
}
133136
}
134-
Feature::CssGencontent => {
137+
Feature::CssGencontent |
138+
Feature::CssFirstLine => {
135139
if let Some(version) = browsers.ie {
136140
if version >= 589824 {
137141
return true
@@ -225,53 +229,6 @@ impl Feature {
225229
}
226230
}
227231
}
228-
Feature::CssFirstLine => {
229-
if let Some(version) = browsers.ie {
230-
if version >= 589824 {
231-
return true
232-
}
233-
}
234-
if let Some(version) = browsers.edge {
235-
if version >= 786432 {
236-
return true
237-
}
238-
}
239-
if let Some(version) = browsers.firefox {
240-
if version >= 131072 {
241-
return true
242-
}
243-
}
244-
if let Some(version) = browsers.chrome {
245-
if version >= 262144 {
246-
return true
247-
}
248-
}
249-
if let Some(version) = browsers.safari {
250-
if version >= 196864 {
251-
return true
252-
}
253-
}
254-
if let Some(version) = browsers.opera {
255-
if version >= 589824 {
256-
return true
257-
}
258-
}
259-
if let Some(version) = browsers.ios_saf {
260-
if version >= 197120 {
261-
return true
262-
}
263-
}
264-
if let Some(version) = browsers.android {
265-
if version >= 131328 {
266-
return true
267-
}
268-
}
269-
if let Some(version) = browsers.samsung {
270-
if version >= 262144 {
271-
return true
272-
}
273-
}
274-
}
275232
Feature::CssInOutOfRange => {
276233
if let Some(version) = browsers.edge {
277234
if version >= 5177344 {
@@ -1200,6 +1157,91 @@ impl Feature {
12001157
}
12011158
}
12021159
}
1160+
Feature::PlaceSelf |
1161+
Feature::PlaceItems => {
1162+
if let Some(version) = browsers.chrome {
1163+
if version >= 3866624 {
1164+
return true
1165+
}
1166+
}
1167+
if let Some(version) = browsers.edge {
1168+
if version >= 5177344 {
1169+
return true
1170+
}
1171+
}
1172+
if let Some(version) = browsers.firefox {
1173+
if version >= 2949120 {
1174+
return true
1175+
}
1176+
}
1177+
if let Some(version) = browsers.opera {
1178+
if version >= 2818048 {
1179+
return true
1180+
}
1181+
}
1182+
if let Some(version) = browsers.safari {
1183+
if version >= 720896 {
1184+
return true
1185+
}
1186+
}
1187+
if let Some(version) = browsers.ios_saf {
1188+
if version >= 720896 {
1189+
return true
1190+
}
1191+
}
1192+
if let Some(version) = browsers.samsung {
1193+
if version >= 458752 {
1194+
return true
1195+
}
1196+
}
1197+
if let Some(version) = browsers.android {
1198+
if version >= 3866624 {
1199+
return true
1200+
}
1201+
}
1202+
}
1203+
Feature::PlaceContent => {
1204+
if let Some(version) = browsers.chrome {
1205+
if version >= 3866624 {
1206+
return true
1207+
}
1208+
}
1209+
if let Some(version) = browsers.edge {
1210+
if version >= 5177344 {
1211+
return true
1212+
}
1213+
}
1214+
if let Some(version) = browsers.firefox {
1215+
if version >= 2949120 {
1216+
return true
1217+
}
1218+
}
1219+
if let Some(version) = browsers.opera {
1220+
if version >= 2818048 {
1221+
return true
1222+
}
1223+
}
1224+
if let Some(version) = browsers.safari {
1225+
if version >= 589824 {
1226+
return true
1227+
}
1228+
}
1229+
if let Some(version) = browsers.ios_saf {
1230+
if version >= 589824 {
1231+
return true
1232+
}
1233+
}
1234+
if let Some(version) = browsers.samsung {
1235+
if version >= 458752 {
1236+
return true
1237+
}
1238+
}
1239+
if let Some(version) = browsers.android {
1240+
if version >= 3866624 {
1241+
return true
1242+
}
1243+
}
1244+
}
12031245
}
12041246
false
12051247
}

src/lib.rs

Lines changed: 74 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1694,8 +1694,9 @@ mod tests {
16941694
-moz-box-pack: end;
16951695
-ms-flex-pack: end;
16961696
-webkit-align-content: space-between;
1697+
align-content: space-between;
16971698
-webkit-justify-content: flex-end;
1698-
place-content: space-between flex-end;
1699+
justify-content: flex-end;
16991700
}
17001701
"#},
17011702
Browsers {
@@ -1723,6 +1724,33 @@ mod tests {
17231724
safari: Some(11 << 16),
17241725
..Browsers::default()
17251726
});
1727+
prefix_test(r#"
1728+
.foo {
1729+
place-content: space-between flex-end;
1730+
}
1731+
"#, indoc! {r#"
1732+
.foo {
1733+
align-content: space-between;
1734+
justify-content: flex-end;
1735+
}
1736+
"#},
1737+
Browsers {
1738+
chrome: Some(30 << 16),
1739+
..Browsers::default()
1740+
});
1741+
prefix_test(r#"
1742+
.foo {
1743+
place-content: space-between flex-end;
1744+
}
1745+
"#, indoc! {r#"
1746+
.foo {
1747+
place-content: space-between flex-end;
1748+
}
1749+
"#},
1750+
Browsers {
1751+
chrome: Some(60 << 16),
1752+
..Browsers::default()
1753+
});
17261754
prefix_test(r#"
17271755
.foo {
17281756
align-self: flex-end;
@@ -1763,7 +1791,8 @@ mod tests {
17631791
.foo {
17641792
-ms-flex-item-align: center;
17651793
-webkit-align-self: center;
1766-
place-self: center flex-end;
1794+
align-self: center;
1795+
justify-self: flex-end;
17671796
}
17681797
"#},
17691798
Browsers {
@@ -1787,6 +1816,33 @@ mod tests {
17871816
safari: Some(11 << 16),
17881817
..Browsers::default()
17891818
});
1819+
prefix_test(r#"
1820+
.foo {
1821+
place-self: center flex-end;
1822+
}
1823+
"#, indoc! {r#"
1824+
.foo {
1825+
align-self: center;
1826+
justify-self: flex-end;
1827+
}
1828+
"#},
1829+
Browsers {
1830+
chrome: Some(57 << 16),
1831+
..Browsers::default()
1832+
});
1833+
prefix_test(r#"
1834+
.foo {
1835+
place-self: center flex-end;
1836+
}
1837+
"#, indoc! {r#"
1838+
.foo {
1839+
place-self: center flex-end;
1840+
}
1841+
"#},
1842+
Browsers {
1843+
chrome: Some(59 << 16),
1844+
..Browsers::default()
1845+
});
17901846
prefix_test(r#"
17911847
.foo {
17921848
align-items: flex-end;
@@ -1833,7 +1889,8 @@ mod tests {
18331889
-moz-box-align: end;
18341890
-ms-flex-align: end;
18351891
-webkit-align-items: flex-end;
1836-
place-items: flex-end center;
1892+
align-items: flex-end;
1893+
justify-items: center;
18371894
}
18381895
"#},
18391896
Browsers {
@@ -1859,6 +1916,20 @@ mod tests {
18591916
safari: Some(11 << 16),
18601917
..Browsers::default()
18611918
});
1919+
prefix_test(r#"
1920+
.foo {
1921+
place-items: flex-end center;
1922+
}
1923+
"#, indoc! {r#"
1924+
.foo {
1925+
align-items: flex-end;
1926+
justify-items: center;
1927+
}
1928+
"#},
1929+
Browsers {
1930+
safari: Some(10 << 16),
1931+
..Browsers::default()
1932+
});
18621933
prefix_test(r#"
18631934
.foo {
18641935
order: 1;

0 commit comments

Comments
 (0)