implement deduplicating classes before generating them
This commit is contained in:
parent
8828250885
commit
092898fa7f
18
src/lib.rs
18
src/lib.rs
|
@ -48,10 +48,26 @@ impl Zephyr {
|
||||||
pub fn generate_classes<'a>(&self, classes: impl IntoIterator<Item = &'a str>) -> String {
|
pub fn generate_classes<'a>(&self, classes: impl IntoIterator<Item = &'a str>) -> String {
|
||||||
// TODO when we have media queries, we can do something to group them by the query, and then emit those together
|
// TODO when we have media queries, we can do something to group them by the query, and then emit those together
|
||||||
|
|
||||||
|
// TODO we could return (css, seen_classes)
|
||||||
|
let mut seen_classes = vec![];
|
||||||
|
|
||||||
classes
|
classes
|
||||||
.into_iter()
|
.into_iter()
|
||||||
|
// get a list with one class per element
|
||||||
.flat_map(|s| s.split_ascii_whitespace())
|
.flat_map(|s| s.split_ascii_whitespace())
|
||||||
// TODO skip duplicates, use hashset or smth
|
.map(|s| s.trim())
|
||||||
|
// remove duplicates
|
||||||
|
// we use this instead of a HashSet because we want it to not change the order
|
||||||
|
// if it's a performance concern, we could use HashSet on normal builds and the filter for test
|
||||||
|
// but i don't really like that
|
||||||
|
.filter(|s| {
|
||||||
|
if seen_classes.contains(s) {
|
||||||
|
false
|
||||||
|
} else {
|
||||||
|
seen_classes.push(s);
|
||||||
|
true
|
||||||
|
}
|
||||||
|
})
|
||||||
// we ignore errors
|
// we ignore errors
|
||||||
.flat_map(|c| self.generate_class(c).ok().flatten())
|
.flat_map(|c| self.generate_class(c).ok().flatten())
|
||||||
.collect::<Vec<_>>()
|
.collect::<Vec<_>>()
|
||||||
|
|
Loading…
Reference in New Issue