Skip to content

Commit

Permalink
Implement vendor prefixing for text-size-adjust
Browse files Browse the repository at this point in the history
Fixes #435
  • Loading branch information
devongovett committed Apr 18, 2023
1 parent 68e3dbd commit 15a48a8
Show file tree
Hide file tree
Showing 8 changed files with 171 additions and 59 deletions.
24 changes: 17 additions & 7 deletions scripts/build-prefixes.js
Expand Up @@ -32,7 +32,7 @@ const MDN_BROWSER_MAPPING = {

const latestBrowserVersions = {};
for (let b in browsers) {
let versions = browsers[b].versions.slice(10);
let versions = browsers[b].versions.slice(-10);
for (let i = versions.length - 1; i >= 0; i--) {
if (versions[i] != null && versions[i] != "all" && versions[i] != "TP") {
latestBrowserVersions[b] = versions[i];
Expand Down Expand Up @@ -87,22 +87,25 @@ for (let prop in prefixes) {
prefix = 'webkit';
}

name = BROWSER_MAPPING[name] || name;
let origName = name;
let isCurrentVersion = version === latestBrowserVersions[name];
name = BROWSER_MAPPING[name] || name;
let v = parseVersion(version);
if (v == null) {
console.log('BAD VERSION', prop, name, version);
continue;
}
if (browserMap[name]?.[prefix] == null) {
browserMap[name] = browserMap[name] || {};
browserMap[name][prefix] = isCurrentVersion ? [v, null] : [v, v];
browserMap[name][prefix] = prefixes[prop].browsers.filter(b => b.startsWith(origName) || b.startsWith(name)).length === 1
? isCurrentVersion ? [null, null] : [null, v]
: isCurrentVersion ? [v, null] : [v, v];
} else {
if (v < browserMap[name][prefix][0]) {
browserMap[name][prefix][0] = v;
}

if (isCurrentVersion) {
if (isCurrentVersion && browserMap[name][prefix][0] != null) {
browserMap[name][prefix][1] = null;
} else if (v > browserMap[name][prefix][1] && browserMap[name][prefix][1] != null) {
browserMap[name][prefix][1] = v;
Expand Down Expand Up @@ -138,6 +141,7 @@ for (let prop in prefixes) {
addValue(p, browserMap, prop);
}


function addValue(map, value, prop) {
let s = JSON.stringify(value);
let found = false;
Expand Down Expand Up @@ -365,13 +369,19 @@ impl Feature {
${[...p].map(([features, versions]) => {
return `${features.map(name => `Feature::${enumify(name)}`).join(' |\n ')} => {
${Object.entries(versions).map(([name, prefixes]) => {
return `if let Some(version) = browsers.${name} {
let needsVersion = !Object.values(prefixes).every(([min, max]) => min == null && max == null);
return `if ${needsVersion ? `let Some(version) = browsers.${name}` : `browsers.${name}.is_some()`} {
${Object.entries(prefixes).map(([prefix, [min, max]]) => {
if (!prefixMapping[prefix]) {
throw new Error('Missing prefix ' + prefix);
}
let addPrefix = `prefixes |= VendorPrefix::${prefixMapping[prefix]};`;
let condition;
if (max == null) {
if (min == null && max == null) {
return addPrefix;
} else if (min == null) {
condition = `version <= ${max}`;
} else if (max == null) {
condition = `version >= ${min}`;
} else if (min == max) {
condition = `version == ${min}`;
Expand All @@ -380,7 +390,7 @@ impl Feature {
}
return `if ${condition} {
prefixes |= VendorPrefix::${prefixMapping[prefix]};
${addPrefix}
}`
}).join('\n ')}
}`;
Expand Down
50 changes: 29 additions & 21 deletions src/compat.rs
Expand Up @@ -293,7 +293,7 @@ impl Feature {
}
}
if let Some(version) = browsers.android {
if version < 7274496 {
if version < 7340032 {
return false;
}
}
Expand Down Expand Up @@ -385,7 +385,7 @@ impl Feature {
}
}
if let Some(version) = browsers.android {
if version < 7274496 {
if version < 7340032 {
return false;
}
}
Expand Down Expand Up @@ -430,7 +430,7 @@ impl Feature {
}
}
if let Some(version) = browsers.android {
if version < 7274496 {
if version < 7340032 {
return false;
}
}
Expand Down Expand Up @@ -501,7 +501,7 @@ impl Feature {
}
}
if let Some(version) = browsers.android {
if version < 7274496 {
if version < 7340032 {
return false;
}
}
Expand Down Expand Up @@ -546,7 +546,7 @@ impl Feature {
}
}
if let Some(version) = browsers.android {
if version < 7274496 {
if version < 7340032 {
return false;
}
}
Expand Down Expand Up @@ -591,7 +591,7 @@ impl Feature {
}
}
if let Some(version) = browsers.android {
if version < 7274496 {
if version < 7340032 {
return false;
}
}
Expand Down Expand Up @@ -636,7 +636,7 @@ impl Feature {
}
}
if let Some(version) = browsers.android {
if version < 7274496 {
if version < 7340032 {
return false;
}
}
Expand Down Expand Up @@ -728,7 +728,7 @@ impl Feature {
}
}
if let Some(version) = browsers.android {
if version < 7274496 {
if version < 7340032 {
return false;
}
}
Expand Down Expand Up @@ -773,7 +773,7 @@ impl Feature {
}
}
if let Some(version) = browsers.android {
if version < 7274496 {
if version < 7340032 {
return false;
}
}
Expand Down Expand Up @@ -848,7 +848,7 @@ impl Feature {
}
}
if let Some(version) = browsers.android {
if version < 7274496 {
if version < 7340032 {
return false;
}
}
Expand Down Expand Up @@ -893,7 +893,7 @@ impl Feature {
}
}
if let Some(version) = browsers.android {
if version < 7274496 {
if version < 7340032 {
return false;
}
}
Expand Down Expand Up @@ -983,7 +983,7 @@ impl Feature {
}
}
if let Some(version) = browsers.android {
if version < 7274496 {
if version < 7340032 {
return false;
}
}
Expand Down Expand Up @@ -1028,7 +1028,7 @@ impl Feature {
}
}
if let Some(version) = browsers.android {
if version < 7274496 {
if version < 7340032 {
return false;
}
}
Expand Down Expand Up @@ -1146,7 +1146,7 @@ impl Feature {
}
}
if let Some(version) = browsers.android {
if version < 7274496 {
if version < 7340032 {
return false;
}
}
Expand Down Expand Up @@ -1191,7 +1191,7 @@ impl Feature {
}
}
if let Some(version) = browsers.android {
if version < 7274496 {
if version < 7340032 {
return false;
}
}
Expand All @@ -1205,6 +1205,11 @@ impl Feature {
}
}
Feature::CssNesting => {
if let Some(version) = browsers.edge {
if version < 7340032 {
return false;
}
}
if let Some(version) = browsers.chrome {
if version < 7340032 {
return false;
Expand All @@ -1220,9 +1225,12 @@ impl Feature {
return false;
}
}
if browsers.android.is_some()
|| browsers.edge.is_some()
|| browsers.firefox.is_some()
if let Some(version) = browsers.android {
if version < 7340032 {
return false;
}
}
if browsers.firefox.is_some()
|| browsers.ie.is_some()
|| browsers.opera.is_some()
|| browsers.samsung.is_some()
Expand Down Expand Up @@ -1262,7 +1270,7 @@ impl Feature {
}
}
if let Some(version) = browsers.android {
if version < 7274496 {
if version < 7340032 {
return false;
}
}
Expand Down Expand Up @@ -1302,7 +1310,7 @@ impl Feature {
}
}
if let Some(version) = browsers.android {
if version < 7274496 {
if version < 7340032 {
return false;
}
}
Expand Down Expand Up @@ -1347,7 +1355,7 @@ impl Feature {
}
}
if let Some(version) = browsers.android {
if version < 7274496 {
if version < 7340032 {
return false;
}
}
Expand Down
47 changes: 47 additions & 0 deletions src/lib.rs
Expand Up @@ -11906,6 +11906,53 @@ mod tests {
);
}

#[test]
fn test_text_size_adjust() {
minify_test(".foo { text-size-adjust: none }", ".foo{text-size-adjust:none}");
minify_test(".foo { text-size-adjust: auto }", ".foo{text-size-adjust:auto}");
minify_test(".foo { text-size-adjust: 80% }", ".foo{text-size-adjust:80%}");
prefix_test(
r#"
.foo {
text-size-adjust: none;
}
"#,
indoc! {r#"
.foo {
-webkit-text-size-adjust: none;
-moz-text-size-adjust: none;
-ms-text-size-adjust: none;
text-size-adjust: none;
}
"#},
Browsers {
ios_saf: Some(16 << 16),
edge: Some(15 << 16),
firefox: Some(20 << 16),
..Browsers::default()
},
);
prefix_test(
r#"
.foo {
-webkit-text-size-adjust: none;
-moz-text-size-adjust: none;
-ms-text-size-adjust: none;
text-size-adjust: none;
}
"#,
indoc! {r#"
.foo {
text-size-adjust: none;
}
"#},
Browsers {
chrome: Some(110 << 16),
..Browsers::default()
},
);
}

#[test]
fn test_text_decoration() {
minify_test(".foo { text-decoration-line: none }", ".foo{text-decoration-line:none}");
Expand Down

0 comments on commit 15a48a8

Please sign in to comment.