Skip to content

Commit 04fc5bf

Browse files
committed
Handle border image
1 parent ecf2ab6 commit 04fc5bf

File tree

7 files changed

+334
-45
lines changed

7 files changed

+334
-45
lines changed

scripts/build-prefixes.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,8 @@ for (let key in mdn.css.types.image.gradient) {
313313
}
314314

315315
mdnFeatures.gradientInterpolationHints = mdn.css.types.image.gradient['linear-gradient'].interpolation_hints.__compat.support;
316+
mdnFeatures.borderImageRepeatRound = mdn.css.properties['border-image-repeat'].round.__compat.support;
317+
mdnFeatures.borderImageRepeatSpace = mdn.css.properties['border-image-repeat'].space.__compat.support;
316318

317319
for (let feature in mdnFeatures) {
318320
let browserMap = {};

src/compat.rs

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ use crate::targets::Browsers;
66
pub enum Feature {
77
AbsFunction,
88
AnyPseudo,
9+
BorderImageRepeatRound,
10+
BorderImageRepeatSpace,
911
Calc,
1012
CapUnit,
1113
ChUnit,
@@ -3316,6 +3318,100 @@ impl Feature {
33163318
return false;
33173319
}
33183320
}
3321+
Feature::BorderImageRepeatRound => {
3322+
if let Some(version) = browsers.chrome {
3323+
if version < 1966080 {
3324+
return false;
3325+
}
3326+
}
3327+
if let Some(version) = browsers.edge {
3328+
if version < 786432 {
3329+
return false;
3330+
}
3331+
}
3332+
if let Some(version) = browsers.firefox {
3333+
if version < 983040 {
3334+
return false;
3335+
}
3336+
}
3337+
if let Some(version) = browsers.ie {
3338+
if version < 720896 {
3339+
return false;
3340+
}
3341+
}
3342+
if let Some(version) = browsers.opera {
3343+
if version < 1179648 {
3344+
return false;
3345+
}
3346+
}
3347+
if let Some(version) = browsers.safari {
3348+
if version < 590080 {
3349+
return false;
3350+
}
3351+
}
3352+
if let Some(version) = browsers.ios_saf {
3353+
if version < 590592 {
3354+
return false;
3355+
}
3356+
}
3357+
if let Some(version) = browsers.samsung {
3358+
if version < 131072 {
3359+
return false;
3360+
}
3361+
}
3362+
if let Some(version) = browsers.android {
3363+
if version < 2424832 {
3364+
return false;
3365+
}
3366+
}
3367+
}
3368+
Feature::BorderImageRepeatSpace => {
3369+
if let Some(version) = browsers.chrome {
3370+
if version < 3670016 {
3371+
return false;
3372+
}
3373+
}
3374+
if let Some(version) = browsers.edge {
3375+
if version < 786432 {
3376+
return false;
3377+
}
3378+
}
3379+
if let Some(version) = browsers.firefox {
3380+
if version < 3276800 {
3381+
return false;
3382+
}
3383+
}
3384+
if let Some(version) = browsers.ie {
3385+
if version < 720896 {
3386+
return false;
3387+
}
3388+
}
3389+
if let Some(version) = browsers.opera {
3390+
if version < 2818048 {
3391+
return false;
3392+
}
3393+
}
3394+
if let Some(version) = browsers.safari {
3395+
if version < 590080 {
3396+
return false;
3397+
}
3398+
}
3399+
if let Some(version) = browsers.ios_saf {
3400+
if version < 590592 {
3401+
return false;
3402+
}
3403+
}
3404+
if let Some(version) = browsers.samsung {
3405+
if version < 393216 {
3406+
return false;
3407+
}
3408+
}
3409+
if let Some(version) = browsers.android {
3410+
if version < 3670016 {
3411+
return false;
3412+
}
3413+
}
3414+
}
33193415
Feature::P3Colors | Feature::LangList => {
33203416
if let Some(version) = browsers.safari {
33213417
if version < 655616 {

src/lib.rs

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2165,6 +2165,124 @@ mod tests {
21652165
},
21662166
);
21672167

2168+
prefix_test(
2169+
r#"
2170+
.foo {
2171+
border-image-source: linear-gradient(red, green);
2172+
border-image-source: linear-gradient(lch(56.208% 136.76 46.312), lch(51% 135.366 301.364));
2173+
}
2174+
"#,
2175+
indoc! {r#"
2176+
.foo {
2177+
border-image-source: linear-gradient(red, green);
2178+
border-image-source: linear-gradient(lch(56.208% 136.76 46.312), lch(51% 135.366 301.364));
2179+
}
2180+
"#
2181+
},
2182+
Browsers {
2183+
chrome: Some(95 << 16),
2184+
..Browsers::default()
2185+
},
2186+
);
2187+
2188+
prefix_test(
2189+
r#"
2190+
.foo {
2191+
border-image-source: linear-gradient(red, green);
2192+
border-image-source: linear-gradient(lch(56.208% 136.76 46.312), lch(51% 135.366 301.364));
2193+
}
2194+
"#,
2195+
indoc! {r#"
2196+
.foo {
2197+
border-image-source: linear-gradient(lch(56.208% 136.76 46.312), lch(51% 135.366 301.364));
2198+
}
2199+
"#
2200+
},
2201+
Browsers {
2202+
chrome: Some(112 << 16),
2203+
..Browsers::default()
2204+
},
2205+
);
2206+
2207+
prefix_test(
2208+
r#"
2209+
.foo {
2210+
border-image: linear-gradient(red, green);
2211+
border-image: linear-gradient(lch(56.208% 136.76 46.312), lch(51% 135.366 301.364));
2212+
}
2213+
"#,
2214+
indoc! {r#"
2215+
.foo {
2216+
border-image: linear-gradient(red, green);
2217+
border-image: linear-gradient(lch(56.208% 136.76 46.312), lch(51% 135.366 301.364));
2218+
}
2219+
"#
2220+
},
2221+
Browsers {
2222+
chrome: Some(95 << 16),
2223+
..Browsers::default()
2224+
},
2225+
);
2226+
2227+
prefix_test(
2228+
r#"
2229+
.foo {
2230+
border-image: var(--fallback);
2231+
border-image: linear-gradient(lch(56.208% 136.76 46.312), lch(51% 135.366 301.364));
2232+
}
2233+
"#,
2234+
indoc! {r#"
2235+
.foo {
2236+
border-image: var(--fallback);
2237+
border-image: linear-gradient(lch(56.208% 136.76 46.312), lch(51% 135.366 301.364));
2238+
}
2239+
"#
2240+
},
2241+
Browsers {
2242+
chrome: Some(95 << 16),
2243+
..Browsers::default()
2244+
},
2245+
);
2246+
2247+
prefix_test(
2248+
r#"
2249+
.foo {
2250+
border-image: url("fallback.png") 10 40 fill / 10px;
2251+
border-image: url("main.png") 10 40 fill / 10px space;
2252+
}
2253+
"#,
2254+
indoc! {r#"
2255+
.foo {
2256+
border-image: url("fallback.png") 10 40 fill / 10px;
2257+
border-image: url("main.png") 10 40 fill / 10px space;
2258+
}
2259+
"#
2260+
},
2261+
Browsers {
2262+
chrome: Some(50 << 16),
2263+
..Browsers::default()
2264+
},
2265+
);
2266+
2267+
prefix_test(
2268+
r#"
2269+
.foo {
2270+
border-image: url("fallback.png") 10 40 fill / 10px;
2271+
border-image: url("main.png") 10 40 fill / 10px space;
2272+
}
2273+
"#,
2274+
indoc! {r#"
2275+
.foo {
2276+
border-image: url("main.png") 10 40 fill / 10px space;
2277+
}
2278+
"#
2279+
},
2280+
Browsers {
2281+
chrome: Some(56 << 16),
2282+
..Browsers::default()
2283+
},
2284+
);
2285+
21682286
minify_test(".foo { border: none green }", ".foo{border:green}");
21692287
}
21702288

src/properties/background.rs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -807,11 +807,6 @@ impl<'i> PropertyHandler<'i> for BackgroundHandler<'i> {
807807
) -> bool {
808808
macro_rules! background_image {
809809
($val: ident) => {
810-
// If this is an image-set() and not all of our targets support it, preserve previous fallback.
811-
if Image::should_preserve_fallbacks(&$val, self.images.as_ref(), self.targets) {
812-
self.flush(dest);
813-
}
814-
815810
flush!(images, $val);
816811

817812
// Store prefixed properties. Clear if we hit an unprefixed property and we have

0 commit comments

Comments
 (0)