From 618447445f8af2be4a4f2aaed5e586d9c02c3137 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Thu, 31 Oct 2013 15:22:15 +0100 Subject: [PATCH] Introduce HTML{Audio,Video}Element::new. --- src/components/script/dom/htmlaudioelement.rs | 14 +++++++++++++ src/components/script/dom/htmlmediaelement.rs | 2 +- src/components/script/dom/htmlvideoelement.rs | 17 ++++++++++++++++ .../script/html/hubbub_html_parser.rs | 20 +++++++++---------- 4 files changed, 42 insertions(+), 11 deletions(-) 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);