aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/components/script/dom/bindings/codegen/Bindings.conf1
-rw-r--r--src/components/script/dom/bindings/codegen/CodegenRust.py3
-rw-r--r--src/components/script/dom/bindings/codegen/HTMLAnchorElement.webidl54
-rw-r--r--src/components/script/dom/bindings/node.rs4
-rw-r--r--src/components/script/dom/bindings/utils.rs2
-rw-r--r--src/components/script/dom/element.rs9
-rw-r--r--src/components/script/dom/htmlanchorelement.rs99
-rw-r--r--src/components/script/html/hubbub_html_parser.rs3
-rw-r--r--src/components/script/script.rc2
-rw-r--r--src/test/html/test_bindings.js2
10 files changed, 172 insertions, 7 deletions
diff --git a/src/components/script/dom/bindings/codegen/Bindings.conf b/src/components/script/dom/bindings/codegen/Bindings.conf
index b4a0da9ffac..fe63f585a55 100644
--- a/src/components/script/dom/bindings/codegen/Bindings.conf
+++ b/src/components/script/dom/bindings/codegen/Bindings.conf
@@ -544,6 +544,7 @@ def addHTMLElement(element):
'pointerType': ''
}
+addHTMLElement('HTMLAnchorElement')
addHTMLElement('HTMLElement')
addHTMLElement('HTMLHeadElement')
addHTMLElement('HTMLHtmlElement')
diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py
index adfcf231448..490f7f06ecf 100644
--- a/src/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/src/components/script/dom/bindings/codegen/CodegenRust.py
@@ -4237,7 +4237,7 @@ class CGNamespacedEnum(CGThing):
entries.append(entry)
# Append a Count.
- entries.append('_' + enumName + '_Count')
+ entries.append('_' + enumName + '_Count = ' + str(len(entries)))
# Indent.
entries = [' ' + e for e in entries]
@@ -4606,6 +4606,7 @@ class CGBindingRoot(CGThing):
'dom::node::{AbstractNode, Node, Text}', #XXXjdm
'dom::document::{Document, AbstractDocument}', #XXXjdm
'dom::element::{Element, HTMLHeadElement, HTMLHtmlElement}', #XXXjdm
+ 'dom::htmlanchorelement::HTMLAnchorElement', #XXXjdm
'dom::htmlelement::HTMLElement', #XXXjdm
'dom::htmldocument::HTMLDocument', #XXXjdm
'dom::bindings::utils::*',
diff --git a/src/components/script/dom/bindings/codegen/HTMLAnchorElement.webidl b/src/components/script/dom/bindings/codegen/HTMLAnchorElement.webidl
new file mode 100644
index 00000000000..a4e1866fbf9
--- /dev/null
+++ b/src/components/script/dom/bindings/codegen/HTMLAnchorElement.webidl
@@ -0,0 +1,54 @@
+/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * 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/.
+ *
+ * The origin of this IDL file is
+ * http://www.whatwg.org/specs/web-apps/current-work/#the-a-element
+ * http://www.whatwg.org/specs/web-apps/current-work/#other-elements,-attributes-and-apis
+ * © Copyright 2004-2011 Apple Computer, Inc., Mozilla Foundation, and
+ * Opera Software ASA. You are granted a license to use, reproduce
+ * and create derivative works of this document.
+ */
+
+// http://www.whatwg.org/specs/web-apps/current-work/#the-a-element
+interface HTMLAnchorElement : HTMLElement {
+ // No support for stringifier attributes yet
+ //[SetterThrows]
+ //stringifier attribute DOMString href;
+ //stringifier;
+ [SetterThrows]
+ attribute DOMString href;
+ [SetterThrows]
+ attribute DOMString target;
+ [SetterThrows]
+ attribute DOMString download;
+ [SetterThrows]
+ attribute DOMString ping;
+ [SetterThrows]
+ attribute DOMString rel;
+ // relList not supported yet
+ //readonly attribute DOMTokenList relList;
+ [SetterThrows]
+ attribute DOMString hreflang;
+ [SetterThrows]
+ attribute DOMString type;
+
+ [SetterThrows]
+ attribute DOMString text;
+};
+//HTMLAnchorElement implements URLUtils;
+
+// http://www.whatwg.org/specs/web-apps/current-work/#other-elements,-attributes-and-apis
+partial interface HTMLAnchorElement {
+ [SetterThrows]
+ attribute DOMString coords;
+ [SetterThrows]
+ attribute DOMString charset;
+ [SetterThrows]
+ attribute DOMString name;
+ [SetterThrows]
+ attribute DOMString rev;
+ [SetterThrows]
+ attribute DOMString shape;
+};
diff --git a/src/components/script/dom/bindings/node.rs b/src/components/script/dom/bindings/node.rs
index a8e5b78e7e8..ccbb676b2b4 100644
--- a/src/components/script/dom/bindings/node.rs
+++ b/src/components/script/dom/bindings/node.rs
@@ -6,8 +6,9 @@ use dom::bindings::element;
use dom::bindings::text;
use dom::bindings::utils;
use dom::bindings::utils::{CacheableWrapper, WrapperCache, DerivedWrapper};
-use dom::element::{HTMLHeadElementTypeId, HTMLHtmlElementTypeId};
+use dom::element::{HTMLHeadElementTypeId, HTMLHtmlElementTypeId, HTMLAnchorElementTypeId};
use dom::element::{HTMLHeadElement, HTMLHtmlElement};
+use dom::htmlanchorelement::HTMLAnchorElement;
use dom::node::{AbstractNode, Node, ElementNodeTypeId, TextNodeTypeId, CommentNodeTypeId};
use dom::node::{DoctypeNodeTypeId, ScriptView, Text};
@@ -73,6 +74,7 @@ macro_rules! generate_element(
#[allow(non_implicitly_copyable_typarams)]
pub fn create(cx: *JSContext, node: &mut AbstractNode<ScriptView>) -> *JSObject {
match node.type_id() {
+ ElementNodeTypeId(HTMLAnchorElementTypeId) => generate_element!(HTMLAnchorElement),
ElementNodeTypeId(HTMLHeadElementTypeId) => generate_element!(HTMLHeadElement),
ElementNodeTypeId(HTMLHtmlElementTypeId) => generate_element!(HTMLHtmlElement),
ElementNodeTypeId(_) => element::create(cx, node).ptr,
diff --git a/src/components/script/dom/bindings/utils.rs b/src/components/script/dom/bindings/utils.rs
index 3834fdf08c4..cc1b09eb081 100644
--- a/src/components/script/dom/bindings/utils.rs
+++ b/src/components/script/dom/bindings/utils.rs
@@ -617,7 +617,7 @@ pub extern fn ThrowingConstructor(_cx: *JSContext, _argc: uint, _vp: *JSVal) ->
}
pub fn initialize_global(global: *JSObject) {
- let protoArray = @mut ([0 as *JSObject, ..30]); //XXXjdm PrototyepList::id::_ID_Count
+ let protoArray = @mut ([0 as *JSObject, ..33]); //XXXjdm PrototyepList::id::_ID_Count
unsafe {
//XXXjdm we should be storing the box pointer instead of the inner
let box = squirrel_away(protoArray);
diff --git a/src/components/script/dom/element.rs b/src/components/script/dom/element.rs
index 4919aa64f63..8ff300fe1b7 100644
--- a/src/components/script/dom/element.rs
+++ b/src/components/script/dom/element.rs
@@ -5,10 +5,12 @@
//! Element nodes.
use dom::bindings::codegen::{HTMLHeadElementBinding, HTMLHtmlElementBinding};
+use dom::bindings::codegen::{HTMLAnchorElementBinding};
use dom::bindings::utils::{DOMString, null_string, ErrorResult};
use dom::bindings::utils::{CacheableWrapper, BindingObject, WrapperCache};
use dom::clientrect::ClientRect;
use dom::clientrectlist::ClientRectList;
+use dom::htmlanchorelement::HTMLAnchorElement;
use dom::htmlcollection::HTMLCollection;
use dom::htmlelement::HTMLElement;
use dom::node::{ElementNodeTypeId, Node, ScriptView, AbstractNode};
@@ -91,7 +93,6 @@ pub enum ElementTypeId {
// Regular old elements
//
-pub struct HTMLAnchorElement { parent: HTMLElement }
pub struct HTMLAsideElement { parent: HTMLElement }
pub struct HTMLBRElement { parent: HTMLElement }
pub struct HTMLBodyElement { parent: HTMLElement }
@@ -133,7 +134,7 @@ impl HTMLHtmlElement {
}
}
-macro_rules! generate_cacheable_wrapper(
+pub macro_rules! generate_cacheable_wrapper(
($name: ident, $wrap: path) => (
impl CacheableWrapper for $name {
fn get_wrappercache(&mut self) -> &mut WrapperCache {
@@ -148,7 +149,7 @@ macro_rules! generate_cacheable_wrapper(
)
)
-macro_rules! generate_binding_object(
+pub macro_rules! generate_binding_object(
($name: ident) => (
impl BindingObject for $name {
fn GetParentObject(&self, cx: *JSContext) -> Option<@mut CacheableWrapper> {
@@ -162,6 +163,8 @@ generate_cacheable_wrapper!(HTMLHeadElement, HTMLHeadElementBinding::Wrap)
generate_binding_object!(HTMLHeadElement)
generate_cacheable_wrapper!(HTMLHtmlElement, HTMLHtmlElementBinding::Wrap)
generate_binding_object!(HTMLHtmlElement)
+generate_cacheable_wrapper!(HTMLAnchorElement, HTMLAnchorElementBinding::Wrap)
+generate_binding_object!(HTMLAnchorElement)
//
// Fancier elements
diff --git a/src/components/script/dom/htmlanchorelement.rs b/src/components/script/dom/htmlanchorelement.rs
new file mode 100644
index 00000000000..765b7253b2f
--- /dev/null
+++ b/src/components/script/dom/htmlanchorelement.rs
@@ -0,0 +1,99 @@
+use dom::htmlelement::HTMLElement;
+use dom::bindings::utils::{DOMString, null_string, ErrorResult};
+
+pub struct HTMLAnchorElement {
+ parent: HTMLElement
+}
+
+impl HTMLAnchorElement {
+ pub fn Href(&self) -> DOMString {
+ null_string
+ }
+
+ pub fn SetHref(&mut self, _href: &DOMString, _rv: &mut ErrorResult) {
+ }
+
+ pub fn Target(&self) -> DOMString {
+ null_string
+ }
+
+ pub fn SetTarget(&self, _target: &DOMString, _rv: &mut ErrorResult) {
+ }
+
+ pub fn Download(&self) -> DOMString {
+ null_string
+ }
+
+ pub fn SetDownload(&self, _download: &DOMString, _rv: &mut ErrorResult) {
+ }
+
+ pub fn Ping(&self) -> DOMString {
+ null_string
+ }
+
+ pub fn SetPing(&self, _ping: &DOMString, _rv: &mut ErrorResult) {
+ }
+
+ pub fn Rel(&self) -> DOMString {
+ null_string
+ }
+
+ pub fn SetRel(&self, _rel: &DOMString, _rv: &mut ErrorResult) {
+ }
+
+ pub fn Hreflang(&self) -> DOMString {
+ null_string
+ }
+
+ pub fn SetHreflang(&self, _href_lang: &DOMString, _rv: &mut ErrorResult) {
+ }
+
+ pub fn Type(&self) -> DOMString {
+ null_string
+ }
+
+ pub fn SetType(&mut self, _type: &DOMString, _rv: &mut ErrorResult) {
+ }
+
+ pub fn Text(&self) -> DOMString {
+ null_string
+ }
+
+ pub fn SetText(&mut self, _text: &DOMString, _rv: &mut ErrorResult) {
+ }
+
+ pub fn Coords(&self) -> DOMString {
+ null_string
+ }
+
+ pub fn SetCoords(&mut self, _coords: &DOMString, _rv: &mut ErrorResult) {
+ }
+
+ pub fn Charset(&self) -> DOMString {
+ null_string
+ }
+
+ pub fn SetCharset(&mut self, _charset: &DOMString, _rv: &mut ErrorResult) {
+ }
+
+ pub fn Name(&self) -> DOMString {
+ null_string
+ }
+
+ pub fn SetName(&mut self, _name: &DOMString, _rv: &mut ErrorResult) {
+ }
+
+ pub fn Rev(&self) -> DOMString {
+ null_string
+ }
+
+ pub fn SetRev(&mut self, _rev: &DOMString, _rv: &mut ErrorResult) {
+ }
+
+ pub fn Shape(&self) -> DOMString {
+ null_string
+ }
+
+ pub fn SetShape(&mut self, _shape: &DOMString, _rv: &mut ErrorResult) {
+ }
+}
diff --git a/src/components/script/html/hubbub_html_parser.rs b/src/components/script/html/hubbub_html_parser.rs
index b58050e943b..b774852b3c6 100644
--- a/src/components/script/html/hubbub_html_parser.rs
+++ b/src/components/script/html/hubbub_html_parser.rs
@@ -15,7 +15,7 @@ use dom::element::{HTMLAnchorElementTypeId, HTMLAsideElementTypeId, HTMLBRElemen
HTMLTableCellElementTypeId, HTMLTableElementTypeId,
HTMLTableRowElementTypeId, HTMLTitleElementTypeId, HTMLUListElementTypeId,
UnknownElementTypeId};
-use dom::element::{HTMLAnchorElement, HTMLAsideElement, HTMLBRElement, HTMLBodyElement,
+use dom::element::{HTMLAsideElement, HTMLBRElement, HTMLBodyElement,
HTMLBoldElement, HTMLDivElement, HTMLFontElement, HTMLFormElement,
HTMLHRElement, HTMLHeadElement, HTMLHeadingElement, HTMLHtmlElement,
HTMLInputElement, HTMLImageElement, HTMLIframeElement,
@@ -27,6 +27,7 @@ use dom::element::{HTMLAnchorElement, HTMLAsideElement, HTMLBRElement, HTMLBodyE
HTMLTitleElement, HTMLUListElement};
use dom::element::{HTMLHeadingElementTypeId, Heading1, Heading2, Heading3, Heading4, Heading5,
Heading6};
+use dom::htmlanchorelement::HTMLAnchorElement;
use dom::element::{Element, Attr};
use dom::htmlelement::HTMLElement;
use dom::node::{AbstractNode, Comment, Doctype, ElementNodeTypeId, Node, ScriptView};
diff --git a/src/components/script/script.rc b/src/components/script/script.rc
index 684f378cf9b..b8f8a8697f4 100644
--- a/src/components/script/script.rc
+++ b/src/components/script/script.rc
@@ -42,6 +42,7 @@ pub mod dom {
pub mod EventBinding;
pub mod EventTargetBinding;
pub mod FormDataBinding;
+ pub mod HTMLAnchorElementBinding;
pub mod HTMLCollectionBinding;
pub mod HTMLDocumentBinding;
pub mod HTMLElementBinding;
@@ -67,6 +68,7 @@ pub mod dom {
pub mod event;
pub mod eventtarget;
pub mod formdata;
+ pub mod htmlanchorelement;
pub mod htmlcollection;
pub mod htmldocument;
pub mod htmlelement;
diff --git a/src/test/html/test_bindings.js b/src/test/html/test_bindings.js
index b0338dc0751..0d62dba7ec4 100644
--- a/src/test/html/test_bindings.js
+++ b/src/test/html/test_bindings.js
@@ -124,6 +124,8 @@ window.alert(document.title);
document.title = "foo";
window.alert(document.title);
+window.alert(document.links[0]);
+
//TODO: Doesn't work until we throw proper exceptions instead of returning 0 on
// unwrap failure.
/*try {