#[derive(Default, Debug, Clone)]
pub struct DocumentAtRuleCssRulesAutoprefixer
{
removeUnprefixedAtRule: bool,
vendorPrefixes: BTreeSet<VendorPrefix>,
}
impl CssRulesAutoprefixer for DocumentAtRuleCssRulesAutoprefixer
{
fn autoprefix<C: HasCssRules>(&self, css_rules: &mut C, parent_vendor_prefix: Option<&VendorPrefix>)
{
let css_rules = css_rules.css_rules_mut();
css_rules.vendor_prefix_at_rules
(
self.removeUnprefixedAtRule,
|cssRule|
{
match cssRule
{
&CssRule::Document(ref atRule) => Some(atRule),
_ => None,
}
},
|_index, atRule|
{
let mut vendorPrefixedCssRules = Vec::with_capacity(self.vendorPrefixes.len());
for vendorPrefix in self.vendorPrefixes.iter().rev()
{
let include = if let Some(parent_vendor_prefix) = parent_vendor_prefix
{
parent_vendor_prefix == vendorPrefix
}
else
{
true
};
if include
{
vendorPrefixedCssRules.push(CssRule::Document(DocumentAtRule
{
vendor_prefix: Some(vendorPrefix.clone()),
condition: atRule.condition.clone(),
rules: atRule.rules.clone(),
}));
}
}
vendorPrefixedCssRules
}
)
}
}
impl DocumentAtRuleCssRulesAutoprefixer
{
#[inline(always)]
fn new(_can_i_use: &CanIUse, _agents: &AgentNameAndVersionSet) -> Self
{
Self
{
removeUnprefixedAtRule: true,
vendorPrefixes: btreeset!
{
moz,
},
}
}
}