From 143bb8816cfbcfeb1d590eedac702e8a63c8c872 Mon Sep 17 00:00:00 2001 From: Michael Howell Date: Fri, 13 Oct 2023 13:41:00 -0700 Subject: [PATCH] Add support for container queries --- src/css/tests.rs | 7 +++++++ src/css/token.rs | 6 ++++++ 2 files changed, 13 insertions(+) diff --git a/src/css/tests.rs b/src/css/tests.rs index dd696af..2a3459e 100644 --- a/src/css/tests.rs +++ b/src/css/tests.rs @@ -199,6 +199,13 @@ fn check_calc() { assert_eq!(minify(s).expect("minify failed").to_string(), expected); } +#[test] +fn check_container() { + let s = "@container rustdoc (min-width: 1250px) { .foo { width: 100px; } }"; + let expected = "@container rustdoc (min-width:1250px){.foo{width:100px;}}"; + assert_eq!(minify(s).expect("minify failed").to_string(), expected); +} + #[test] fn check_spaces() { let s = ".line-numbers .line-highlighted { color: #0a042f !important; }"; diff --git a/src/css/token.rs b/src/css/token.rs index 58e416f..eadff0f 100644 --- a/src/css/token.rs +++ b/src/css/token.rs @@ -579,6 +579,7 @@ fn clean_tokens(mut v: Vec>) -> Vec> { // Index of the previous retained token, if there is one. let mut ip: Option = None; let mut is_in_calc = false; + let mut is_in_container = false; let mut paren = 0; // A vector of bools indicating which elements are to be retained. let mut b = Vec::with_capacity(v.len()); @@ -594,6 +595,9 @@ fn clean_tokens(mut v: Vec>) -> Vec> { paren += 1; } } + if v[i] == Token::SelectorElement(SelectorElement::Media("container")) { + is_in_container = true; + } let mut retain = true; if v[i].is_useless() { @@ -609,6 +613,8 @@ fn clean_tokens(mut v: Vec>) -> Vec> { // retain the space after "and", "or" or "not" } else if is_in_calc && v[ip.unwrap()].is_useless() { retain = false; + } else if is_in_container && matches!(v[ip.unwrap()], Token::Other(_)) { + // retain spaces between keywords in container queryes } else if !is_in_calc && ((ip.is_some() && { let prev = &v[ip.unwrap()];