aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/node.rs
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2016-11-10 16:16:56 -0800
committerManish Goregaokar <manishsmail@gmail.com>2016-11-15 06:56:18 -0800
commit177d6fa4eefd347645de18bc58120340e16e23f7 (patch)
treebaecfa9af78df9b3d1947159b9e872dfdf0f5d62 /components/script/dom/node.rs
parent2220fcdc0bbb46b907a3a5ed974508c67ddb2890 (diff)
downloadservo-177d6fa4eefd347645de18bc58120340e16e23f7.tar.gz
servo-177d6fa4eefd347645de18bc58120340e16e23f7.zip
Support basic immutable CSSOM
Diffstat (limited to 'components/script/dom/node.rs')
-rw-r--r--components/script/dom/node.rs30
1 files changed, 30 insertions, 0 deletions
diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs
index 0f510719640..37e0548fa13 100644
--- a/components/script/dom/node.rs
+++ b/components/script/dom/node.rs
@@ -30,6 +30,7 @@ use dom::bindings::reflector::{Reflectable, reflect_dom_object};
use dom::bindings::str::{DOMString, USVString};
use dom::bindings::xmlname::namespace_from_domstring;
use dom::characterdata::{CharacterData, LayoutCharacterDataHelpers};
+use dom::cssstylesheet::CSSStyleSheet;
use dom::document::{Document, DocumentSource, IsHTMLDocument};
use dom::documentfragment::DocumentFragment;
use dom::documenttype::DocumentType;
@@ -43,6 +44,9 @@ use dom::htmlelement::HTMLElement;
use dom::htmliframeelement::{HTMLIFrameElement, HTMLIFrameElementLayoutMethods};
use dom::htmlimageelement::{HTMLImageElement, LayoutHTMLImageElementHelpers};
use dom::htmlinputelement::{HTMLInputElement, LayoutHTMLInputElementHelpers};
+use dom::htmllinkelement::HTMLLinkElement;
+use dom::htmlmetaelement::HTMLMetaElement;
+use dom::htmlstyleelement::HTMLStyleElement;
use dom::htmltextareaelement::{HTMLTextAreaElement, LayoutHTMLTextAreaElementHelpers};
use dom::nodelist::NodeList;
use dom::processinginstruction::ProcessingInstruction;
@@ -76,8 +80,10 @@ use std::default::Default;
use std::iter;
use std::mem;
use std::ops::Range;
+use std::sync::Arc;
use style::dom::OpaqueNode;
use style::selector_impl::ServoSelectorImpl;
+use style::stylesheets::Stylesheet;
use style::thread_state;
use url::Url;
use uuid::Uuid;
@@ -901,6 +907,30 @@ impl Node {
element.upcast::<Node>().remove_self();
Ok(())
}
+
+ pub fn get_stylesheet(&self) -> Option<Arc<Stylesheet>> {
+ if let Some(node) = self.downcast::<HTMLStyleElement>() {
+ node.get_stylesheet()
+ } else if let Some(node) = self.downcast::<HTMLLinkElement>() {
+ node.get_stylesheet()
+ } else if let Some(node) = self.downcast::<HTMLMetaElement>() {
+ node.get_stylesheet()
+ } else {
+ None
+ }
+ }
+
+ pub fn get_cssom_stylesheet(&self) -> Option<Root<CSSStyleSheet>> {
+ if let Some(node) = self.downcast::<HTMLStyleElement>() {
+ node.get_cssom_stylesheet()
+ } else if let Some(node) = self.downcast::<HTMLLinkElement>() {
+ node.get_cssom_stylesheet()
+ } else if let Some(node) = self.downcast::<HTMLMetaElement>() {
+ node.get_cssom_stylesheet()
+ } else {
+ None
+ }
+ }
}