diff options
author | Ms2ger <ms2ger@gmail.com> | 2013-10-26 13:24:56 +0200 |
---|---|---|
committer | Ms2ger <ms2ger@gmail.com> | 2013-10-26 13:24:56 +0200 |
commit | 49b8c7c9b78ac51a6280b914bcdaef8c34d46570 (patch) | |
tree | f34162976d317893feb1b8cf7fd2a0b640a0bd38 /src/components/script | |
parent | 4eb1e88e8f997fbf9f40ed030c6c096da115354c (diff) | |
download | servo-49b8c7c9b78ac51a6280b914bcdaef8c34d46570.tar.gz servo-49b8c7c9b78ac51a6280b914bcdaef8c34d46570.zip |
Implement HTMLUnknownElement::new.
Diffstat (limited to 'src/components/script')
-rw-r--r-- | src/components/script/dom/htmlunknownelement.rs | 17 | ||||
-rw-r--r-- | src/components/script/dom/node.rs | 16 | ||||
-rw-r--r-- | src/components/script/html/hubbub_html_parser.rs | 5 |
3 files changed, 33 insertions, 5 deletions
diff --git a/src/components/script/dom/htmlunknownelement.rs b/src/components/script/dom/htmlunknownelement.rs index 567f25dd71b..b8b1795908c 100644 --- a/src/components/script/dom/htmlunknownelement.rs +++ b/src/components/script/dom/htmlunknownelement.rs @@ -2,8 +2,25 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +use dom::bindings::codegen::HTMLUnknownElementBinding; +use dom::document::AbstractDocument; +use dom::element::HTMLUnknownElementTypeId; use dom::htmlelement::HTMLElement; +use dom::node::{AbstractNode, Node, ScriptView}; pub struct HTMLUnknownElement { htmlelement: HTMLElement } + +impl HTMLUnknownElement { + pub fn new_inherited(localName: ~str, document: AbstractDocument) -> HTMLUnknownElement { + HTMLUnknownElement { + htmlelement: HTMLElement::new(HTMLUnknownElementTypeId, localName, document) + } + } + + pub fn new(localName: ~str, document: AbstractDocument) -> AbstractNode<ScriptView> { + let element = HTMLUnknownElement::new_inherited(localName, document); + Node::reflect_node(@mut element, document, HTMLUnknownElementBinding::Wrap) + } +} diff --git a/src/components/script/dom/node.rs b/src/components/script/dom/node.rs index 9b8f7ea1b07..9fd13a8d84b 100644 --- a/src/components/script/dom/node.rs +++ b/src/components/script/dom/node.rs @@ -5,7 +5,7 @@ //! The core DOM types. Defines the basic DOM hierarchy as well as all the HTML elements. use dom::bindings::node; -use dom::bindings::utils::{Reflectable, Reflector}; +use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object}; use dom::bindings::utils::{DOMString, null_str_as_empty}; use dom::bindings::utils::{ErrorResult, Fallible, NotFound, HierarchyRequest}; use dom::characterdata::CharacterData; @@ -481,6 +481,20 @@ impl Node<ScriptView> { node } + pub fn reflect_node<N: Reflectable> + (node: @mut N, + document: AbstractDocument, + wrap_fn: extern "Rust" fn(*JSContext, *JSObject, @mut N) -> *JSObject) + -> AbstractNode<ScriptView> { + assert!(node.reflector().get_jsobject().is_null()); + let node = reflect_dom_object(node, document.document().window, wrap_fn); + assert!(node.reflector().get_jsobject().is_not_null()); + // This surrenders memory management of the node! + AbstractNode { + obj: unsafe { transmute(node) }, + } + } + pub fn add_to_doc(&mut self, abstract_self: AbstractNode<ScriptView>, doc: AbstractDocument) { let old_doc = self.owner_doc(); self.set_owner_doc(doc); diff --git a/src/components/script/html/hubbub_html_parser.rs b/src/components/script/html/hubbub_html_parser.rs index c6dca22ee21..22d1d9069c0 100644 --- a/src/components/script/html/hubbub_html_parser.rs +++ b/src/components/script/html/hubbub_html_parser.rs @@ -304,10 +304,7 @@ pub fn build_element_from_tag(cx: *JSContext, tag: &str, document: AbstractDocum handle_htmltablecellelement!(cx, document, tag, "td", HTMLTableDataCellElementTypeId, HTMLTableDataCellElement); handle_htmltablecellelement!(cx, document, tag, "th", HTMLTableHeaderCellElementTypeId, HTMLTableHeaderCellElement); - let element = @HTMLUnknownElement { - htmlelement: HTMLElement::new(HTMLUnknownElementTypeId, tag.to_str(), document) - }; - return unsafe { Node::as_abstract_node(cx, element) }; + return HTMLUnknownElement::new(tag.to_str(), document); } pub fn parse_html(cx: *JSContext, |