aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script
diff options
context:
space:
mode:
authorMs2ger <ms2ger@gmail.com>2013-10-31 15:22:15 +0100
committerMs2ger <ms2ger@gmail.com>2013-10-31 15:41:30 +0100
commit618447445f8af2be4a4f2aaed5e586d9c02c3137 (patch)
treeabc1723ce061648edf90a93e21de5d134e1a1863 /src/components/script
parentcc76a2188e38034f853aecd5365857adcda8e401 (diff)
downloadservo-618447445f8af2be4a4f2aaed5e586d9c02c3137.tar.gz
servo-618447445f8af2be4a4f2aaed5e586d9c02c3137.zip
Introduce HTML{Audio,Video}Element::new.
Diffstat (limited to 'src/components/script')
-rw-r--r--src/components/script/dom/htmlaudioelement.rs14
-rw-r--r--src/components/script/dom/htmlmediaelement.rs2
-rw-r--r--src/components/script/dom/htmlvideoelement.rs17
-rw-r--r--src/components/script/html/hubbub_html_parser.rs20
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<ScriptView> {
+ 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,14 +2,31 @@
* 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<ScriptView> {
+ 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);