mirror of
https://github.com/servo/servo.git
synced 2025-07-22 23:03:42 +01:00
Move "remove a CSS rule" algorithm to style
This commit is contained in:
parent
134ef33842
commit
03bcb7a26a
2 changed files with 28 additions and 26 deletions
|
@ -16,7 +16,6 @@ use dom::window::Window;
|
|||
use parking_lot::RwLock;
|
||||
use std::sync::Arc;
|
||||
use style::stylesheets::{CssRules, KeyframesRule, RulesMutateError};
|
||||
use style::stylesheets::CssRule as StyleCssRule;
|
||||
|
||||
no_jsmanaged_fields!(RulesSource);
|
||||
no_jsmanaged_fields!(CssRules);
|
||||
|
@ -97,37 +96,14 @@ impl CSSRuleList {
|
|||
Ok((idx))
|
||||
}
|
||||
|
||||
// https://drafts.csswg.org/cssom/#remove-a-css-rule
|
||||
// https://drafts.csswg.org/css-animations/#dom-csskeyframesrule-deleterule
|
||||
// In case of a keyframe rule, index must be valid.
|
||||
pub fn remove_rule(&self, index: u32) -> ErrorResult {
|
||||
let index = index as usize;
|
||||
|
||||
match self.rules {
|
||||
RulesSource::Rules(ref css_rules) => {
|
||||
// https://drafts.csswg.org/cssom/#remove-a-css-rule
|
||||
{
|
||||
let rules = css_rules.0.read();
|
||||
|
||||
// Step 1, 2
|
||||
if index >= rules.len() {
|
||||
return Err(Error::IndexSize);
|
||||
}
|
||||
|
||||
// Step 3
|
||||
let ref rule = rules[index];
|
||||
|
||||
// Step 4
|
||||
if let StyleCssRule::Namespace(..) = *rule {
|
||||
if !CssRules::only_ns_or_import(&rules) {
|
||||
return Err(Error::InvalidState);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Step 5, 6
|
||||
css_rules.remove_rule(index)?;
|
||||
let mut dom_rules = self.dom_rules.borrow_mut();
|
||||
css_rules.0.write().remove(index);
|
||||
dom_rules[index].get().map(|r| r.detach());
|
||||
dom_rules.remove(index);
|
||||
Ok(())
|
||||
|
|
|
@ -119,7 +119,7 @@ impl CssRules {
|
|||
}
|
||||
}
|
||||
|
||||
/// https://drafts.csswg.org/cssom/#insert-a-css-rule
|
||||
// https://drafts.csswg.org/cssom/#insert-a-css-rule
|
||||
pub fn insert_rule(&self, rule: &str, base_url: ServoUrl, index: usize, nested: bool)
|
||||
-> Result<CssRule, RulesMutateError> {
|
||||
let mut rules = self.0.write();
|
||||
|
@ -158,6 +158,32 @@ impl CssRules {
|
|||
rules.insert(index, new_rule.clone());
|
||||
Ok(new_rule)
|
||||
}
|
||||
|
||||
// https://drafts.csswg.org/cssom/#remove-a-css-rule
|
||||
pub fn remove_rule(&self, index: usize) -> Result<(), RulesMutateError> {
|
||||
let mut rules = self.0.write();
|
||||
|
||||
// Step 1, 2
|
||||
if index >= rules.len() {
|
||||
return Err(RulesMutateError::IndexSize);
|
||||
}
|
||||
|
||||
{
|
||||
// Step 3
|
||||
let ref rule = rules[index];
|
||||
|
||||
// Step 4
|
||||
if let CssRule::Namespace(..) = *rule {
|
||||
if !CssRules::only_ns_or_import(&rules) {
|
||||
return Err(RulesMutateError::InvalidState);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Step 5, 6
|
||||
rules.remove(index);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue