v0.32.6
This commit is contained in:
1 parent
e3de084149
commit
e1ac899ec0
14 files changed
+480
-77
No files matched your search
@@ -52,7 +52,9 @@ pub fn minify(body: &[u8]) -> Result<Vec<u8>> {
|
||||
last_char = Some(' ');
|
||||
}
|
||||
pending_space = false;
|
||||
if matches!(ch, '{' | '}' | ':' | ';' | ',' | '>') && last_char == Some(' ') {
|
||||
// A space before ':' may be a descendant combinator before a pseudo-class.
|
||||
// E.g. `.card :is(.child)` must not become `.card:is(.child)`.
|
||||
if matches!(ch, '{' | '}' | ';' | ',' | '>') && last_char == Some(' ') {
|
||||
out.pop();
|
||||
}
|
||||
out.push(ch);
|
||||
@@ -71,5 +73,6 @@ fn needs_space(previous: Option<char>, next: Option<char>) -> bool {
|
||||
return false;
|
||||
};
|
||||
!matches!(previous, '{' | '}' | ':' | ';' | ',' | '>')
|
||||
&& !matches!(next, '{' | '}' | ':' | ';' | ',' | '>')
|
||||
// A ':' can introduce a pseudo-class after a descendant combinator.
|
||||
&& !matches!(next, '{' | '}' | ';' | ',' | '>')
|
||||
}
|
||||
@@ -405,4 +405,29 @@ mod tests {
|
||||
let received = response.into_body().collect().await.unwrap().to_bytes();
|
||||
assert_eq!(&received[..], encoded.as_slice());
|
||||
}
|
||||
#[test]
|
||||
fn css_minifier_preserves_descendant_pseudoclasses() {
|
||||
let source = r#"html:is([data-corner-style="square"], [data-corner-style="rounded"]) :is(.stat, .card) { border-radius: var(--rp-radius-surface) !important; }
|
||||
.menu :hover { color: red; }
|
||||
.menu :not(.hidden) { display: block; }
|
||||
.menu:hover { color: blue; }
|
||||
body { color: red; }"#;
|
||||
let result = css::minify(source.as_bytes()).expect("minify CSS");
|
||||
let output = std::str::from_utf8(&result).expect("UTF-8 CSS");
|
||||
assert!(output.contains("html:is([data-corner-style=\"square\"],[data-corner-style=\"rounded\"]) :is(.stat,.card)"), "{output}");
|
||||
assert!(output.contains(".menu :hover{"), "{output}");
|
||||
assert!(output.contains(".menu :not(.hidden){"), "{output}");
|
||||
assert!(output.contains(".menu:hover{"), "{output}");
|
||||
assert!(output.contains("body{color:red;}"), "{output}");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn css_minifier_preserves_dashboard_corner_selector() {
|
||||
let input = include_str!("../admin/web/style.css");
|
||||
let result = css::minify(input.as_bytes()).expect("minify panel stylesheet");
|
||||
let output = std::str::from_utf8(&result).expect("UTF-8 CSS");
|
||||
assert!(output.contains("html:is([data-corner-style=\"square\"],[data-corner-style=\"subtle\"],[data-corner-style=\"rounded\"],[data-corner-style=\"extra\"]) :is("), "lost descendant pseudo-class combinator");
|
||||
assert!(output.contains(".card,.stat,dialog,.login-card,"), "lost card selector list");
|
||||
assert!(output.contains("border-radius:var(--rp-radius-surface)!important"), "lost radius declaration");
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user