diff --git a/src/components/script/dom/htmlaudioelement.rs b/src/components/script/dom/htmlaudioelement.rs
index dbb33a42331..6ece4235c7c 100644
--- a/src/components/script/dom/htmlaudioelement.rs
+++ b/src/components/script/dom/htmlaudioelement.rs
@@ -2,11 +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::HTMLAudioElementBinding;
+use dom::document::AbstractDocument;
+use dom::element::HTMLAudioElementTypeId;
use dom::htmlmediaelement::HTMLMediaElement;
+use dom::node::{AbstractNode, Node, ScriptView};
pub struct HTMLAudioElement {
htmlmediaelement: HTMLMediaElement
}
impl HTMLAudioElement {
+ pub fn new_inherited(localName: ~str, document: AbstractDocument) -> HTMLAudioElement {
+ HTMLAudioElement {
+ htmlmediaelement: HTMLMediaElement::new_inherited(HTMLAudioElementTypeId, localName, document)
+ }
+ }
+
+ pub fn new(localName: ~str, document: AbstractDocument) -> AbstractNode {
+ let element = HTMLAudioElement::new_inherited(localName, document);
+ Node::reflect_node(@mut element, document, HTMLAudioElementBinding::Wrap)
+ }
}
diff --git a/src/components/script/dom/htmlmediaelement.rs b/src/components/script/dom/htmlmediaelement.rs
index 39c45a3585d..683ae7bf2e1 100644
--- a/src/components/script/dom/htmlmediaelement.rs
+++ b/src/components/script/dom/htmlmediaelement.rs
@@ -12,7 +12,7 @@ pub struct HTMLMediaElement {
}
impl HTMLMediaElement {
- pub fn new(type_id: ElementTypeId, tag_name: ~str, document: AbstractDocument) -> HTMLMediaElement {
+ pub fn new_inherited(type_id: ElementTypeId, tag_name: ~str, document: AbstractDocument) -> HTMLMediaElement {
HTMLMediaElement {
htmlelement: HTMLElement::new(type_id, tag_name, document)
}
diff --git a/src/components/script/dom/htmlvideoelement.rs b/src/components/script/dom/htmlvideoelement.rs
index a485480ad04..b78e13947e8 100644
--- a/src/components/script/dom/htmlvideoelement.rs
+++ b/src/components/script/dom/htmlvideoelement.rs
@@ -2,13 +2,30 @@
* 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::HTMLVideoElementBinding;
use dom::bindings::utils::{DOMString, ErrorResult};
+use dom::document::AbstractDocument;
+use dom::element::HTMLVideoElementTypeId;
use dom::htmlmediaelement::HTMLMediaElement;
+use dom::node::{AbstractNode, Node, ScriptView};
pub struct HTMLVideoElement {
htmlmediaelement: HTMLMediaElement
}
+impl HTMLVideoElement {
+ pub fn new_inherited(localName: ~str, document: AbstractDocument) -> HTMLVideoElement {
+ HTMLVideoElement {
+ htmlmediaelement: HTMLMediaElement::new_inherited(HTMLVideoElementTypeId, localName, document)
+ }
+ }
+
+ pub fn new(localName: ~str, document: AbstractDocument) -> AbstractNode {
+ let element = HTMLVideoElement::new_inherited(localName, document);
+ Node::reflect_node(@mut element, document, HTMLVideoElementBinding::Wrap)
+ }
+}
+
impl HTMLVideoElement {
pub fn Width(&self) -> u32 {
0
diff --git a/src/components/script/html/hubbub_html_parser.rs b/src/components/script/html/hubbub_html_parser.rs
index d6883cb8acc..a8587de354e 100644
--- a/src/components/script/html/hubbub_html_parser.rs
+++ b/src/components/script/html/hubbub_html_parser.rs
@@ -56,15 +56,15 @@ macro_rules! handle_htmlelement(
$cx, $document, $tag, $string, $type_id, $ctor, []);
)
)
-macro_rules! handle_htmlmediaelement(
- ($cx: expr,
- $document: expr,
- $tag: expr,
+macro_rules! handle_newable_element(
+ ($document: expr,
+ $localName: expr,
$string: expr,
- $type_id: expr,
- $ctor: ident) => (
- handle_element_base!(htmlmediaelement, HTMLMediaElement,
- $cx, $document, $tag, $string, $type_id, $ctor, []);
+ $ctor: ident
+ $(, $arg:expr )*) => (
+ if eq_slice($localName, $string) {
+ return $ctor::new(($localName).to_str(), $document $(, $arg)*);
+ }
)
)
macro_rules! handle_htmltablecellelement(
@@ -298,8 +298,8 @@ pub fn build_element_from_tag(cx: *JSContext, tag: &str, document: AbstractDocum
handle_htmlelement!(cx, document, tag, "section", HTMLElementTypeId, HTMLElement);
handle_htmlelement!(cx, document, tag, "small", HTMLElementTypeId, HTMLElement);
- handle_htmlmediaelement!(cx, document, tag, "audio", HTMLAudioElementTypeId, HTMLAudioElement);
- handle_htmlmediaelement!(cx, document, tag, "video", HTMLVideoElementTypeId, HTMLVideoElement);
+ handle_newable_element!(document, tag, "audio", HTMLAudioElement);
+ handle_newable_element!(document, tag, "video", HTMLVideoElement);
handle_htmltablecellelement!(cx, document, tag, "td", HTMLTableDataCellElementTypeId, HTMLTableDataCellElement);
handle_htmltablecellelement!(cx, document, tag, "th", HTMLTableHeaderCellElementTypeId, HTMLTableHeaderCellElement);