Skip to content

Commit

Permalink
Merge @Keyframes with same name and prefixes
Browse files Browse the repository at this point in the history
  • Loading branch information
devongovett committed Feb 15, 2024
1 parent 949eb13 commit 96ea996
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 2 deletions.
33 changes: 33 additions & 0 deletions src/lib.rs
Expand Up @@ -7257,6 +7257,39 @@ mod tests {
..Browsers::default()
},
);

minify_test(
r#"
@keyframes test {
100% {
background: blue
}
}

@keyframes test {
100% {
background: red
}
}
"#,
"@keyframes test{to{background:red}}",
);
minify_test(
r#"
@keyframes test {
100% {
background: blue
}
}

@-webkit-keyframes test {
100% {
background: red
}
}
"#,
"@keyframes test{to{background:#00f}}@-webkit-keyframes test{to{background:red}}",
);
}

#[test]
Expand Down
9 changes: 7 additions & 2 deletions src/rules/mod.rs
Expand Up @@ -519,10 +519,15 @@ impl<'i, T: Clone> CssRuleList<'i, T> {
};
}

// If there is an existing rule with the same name and identical keyframes,
// merge the vendor prefixes from this rule into it.
// Merge @keyframes rules with the same name.
if let Some(existing_idx) = keyframe_rules.get(&keyframes.name) {
if let Some(CssRule::Keyframes(existing)) = &mut rules.get_mut(*existing_idx) {
// If the existing rule has the same vendor prefixes, replace it with this rule.
if existing.vendor_prefix == keyframes.vendor_prefix {
*existing = keyframes.clone();
continue;
}
// Otherwise, if the keyframes are identical, merge the prefixes.
if existing.keyframes == keyframes.keyframes {
existing.vendor_prefix |= keyframes.vendor_prefix;
set_prefix!(existing);
Expand Down

0 comments on commit 96ea996

Please sign in to comment.