aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/htmlstyleelement.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/htmlstyleelement.rs')
-rw-r--r--components/script/dom/htmlstyleelement.rs24
1 files changed, 19 insertions, 5 deletions
diff --git a/components/script/dom/htmlstyleelement.rs b/components/script/dom/htmlstyleelement.rs
index d1ac6dcc37b..e225ec33981 100644
--- a/components/script/dom/htmlstyleelement.rs
+++ b/components/script/dom/htmlstyleelement.rs
@@ -3,6 +3,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use cssparser::Parser as CssParser;
+use dom::bindings::cell::DOMRefCell;
use dom::bindings::codegen::Bindings::HTMLStyleElementBinding;
use dom::bindings::codegen::Bindings::NodeBinding::NodeMethods;
use dom::bindings::inheritance::Castable;
@@ -10,9 +11,10 @@ use dom::bindings::js::Root;
use dom::document::Document;
use dom::element::Element;
use dom::htmlelement::HTMLElement;
-use dom::node::{ChildrenMutation, Node, window_from_node};
+use dom::node::{ChildrenMutation, Node, document_from_node, window_from_node};
use dom::virtualmethods::VirtualMethods;
use layout_interface::{LayoutChan, Msg};
+use std::sync::Arc;
use style::media_queries::parse_media_query_list;
use style::stylesheets::{Origin, Stylesheet};
use util::str::DOMString;
@@ -20,6 +22,7 @@ use util::str::DOMString;
#[dom_struct]
pub struct HTMLStyleElement {
htmlelement: HTMLElement,
+ stylesheet: DOMRefCell<Option<Arc<Stylesheet>>>,
}
impl HTMLStyleElement {
@@ -27,7 +30,8 @@ impl HTMLStyleElement {
prefix: Option<DOMString>,
document: &Document) -> HTMLStyleElement {
HTMLStyleElement {
- htmlelement: HTMLElement::new_inherited(localName, prefix, document)
+ htmlelement: HTMLElement::new_inherited(localName, prefix, document),
+ stylesheet: DOMRefCell::new(None),
}
}
@@ -52,13 +56,23 @@ impl HTMLStyleElement {
Some(a) => String::from(&**a.value()),
None => String::new(),
};
+
+ let data = node.GetTextContent().expect("Element.textContent must be a string");
+ let mut sheet = Stylesheet::from_str(&data, url, Origin::Author);
let mut css_parser = CssParser::new(&mq_str);
let media = parse_media_query_list(&mut css_parser);
+ sheet.set_media(Some(media));
+ let sheet = Arc::new(sheet);
- let data = node.GetTextContent().expect("Element.textContent must be a string");
- let sheet = Stylesheet::from_str(&data, url, Origin::Author);
let LayoutChan(ref layout_chan) = win.layout_chan();
- layout_chan.send(Msg::AddStylesheet(sheet, media)).unwrap();
+ layout_chan.send(Msg::AddStylesheet(sheet.clone())).unwrap();
+ *self.stylesheet.borrow_mut() = Some(sheet);
+ let doc = document_from_node(self);
+ doc.r().invalidate_stylesheets();
+ }
+
+ pub fn get_stylesheet(&self) -> Option<Arc<Stylesheet>> {
+ self.stylesheet.borrow().clone()
}
}