mirror of
https://github.com/servo/servo.git
synced 2025-07-24 15:50:21 +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 parking_lot::RwLock;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use style::stylesheets::{CssRules, KeyframesRule, RulesMutateError};
|
use style::stylesheets::{CssRules, KeyframesRule, RulesMutateError};
|
||||||
use style::stylesheets::CssRule as StyleCssRule;
|
|
||||||
|
|
||||||
no_jsmanaged_fields!(RulesSource);
|
no_jsmanaged_fields!(RulesSource);
|
||||||
no_jsmanaged_fields!(CssRules);
|
no_jsmanaged_fields!(CssRules);
|
||||||
|
@ -97,37 +96,14 @@ impl CSSRuleList {
|
||||||
Ok((idx))
|
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.
|
// In case of a keyframe rule, index must be valid.
|
||||||
pub fn remove_rule(&self, index: u32) -> ErrorResult {
|
pub fn remove_rule(&self, index: u32) -> ErrorResult {
|
||||||
let index = index as usize;
|
let index = index as usize;
|
||||||
|
|
||||||
match self.rules {
|
match self.rules {
|
||||||
RulesSource::Rules(ref css_rules) => {
|
RulesSource::Rules(ref css_rules) => {
|
||||||
// https://drafts.csswg.org/cssom/#remove-a-css-rule
|
css_rules.remove_rule(index)?;
|
||||||
{
|
|
||||||
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
|
|
||||||
let mut dom_rules = self.dom_rules.borrow_mut();
|
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[index].get().map(|r| r.detach());
|
||||||
dom_rules.remove(index);
|
dom_rules.remove(index);
|
||||||
Ok(())
|
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)
|
pub fn insert_rule(&self, rule: &str, base_url: ServoUrl, index: usize, nested: bool)
|
||||||
-> Result<CssRule, RulesMutateError> {
|
-> Result<CssRule, RulesMutateError> {
|
||||||
let mut rules = self.0.write();
|
let mut rules = self.0.write();
|
||||||
|
@ -158,6 +158,32 @@ impl CssRules {
|
||||||
rules.insert(index, new_rule.clone());
|
rules.insert(index, new_rule.clone());
|
||||||
Ok(new_rule)
|
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)]
|
#[derive(Debug)]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue