aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2014-10-08 03:18:45 +0530
committerManish Goregaokar <manishsmail@gmail.com>2014-10-08 14:37:22 +0530
commit1484acb7afc7703c1f6b3a9320d1071ad1179157 (patch)
treebb02f019e7d5b209c6930c05d84d96d1e38ec21f /components/script/dom
parent3a1f9bd7fb12b73c9a1c231ba061d74241958135 (diff)
downloadservo-1484acb7afc7703c1f6b3a9320d1071ad1179157.tar.gz
servo-1484acb7afc7703c1f6b3a9320d1071ad1179157.zip
Address review comments
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/element.rs15
-rw-r--r--components/script/dom/htmlbuttonelement.rs4
-rw-r--r--components/script/dom/htmlformelement.rs15
-rw-r--r--components/script/dom/htmlimageelement.rs4
-rw-r--r--components/script/dom/htmloptgroupelement.rs4
-rw-r--r--components/script/dom/htmlselectelement.rs4
-rw-r--r--components/script/dom/htmltextareaelement.rs4
-rw-r--r--components/script/dom/macros.rs15
8 files changed, 38 insertions, 27 deletions
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs
index a3960116ab2..0d678dfc033 100644
--- a/components/script/dom/element.rs
+++ b/components/script/dom/element.rs
@@ -41,6 +41,7 @@ use std::cell::RefCell;
use std::default::Default;
use std::mem;
use string_cache::{Atom, Namespace};
+use url::UrlParser;
#[jstraceable]
#[must_root]
@@ -458,8 +459,18 @@ impl<'a> AttributeHandlers for JSRef<'a, Element> {
fn get_url_attribute(self, name: &str) -> DOMString {
assert!(name == name.to_ascii_lower().as_slice());
- // XXX Resolve URL.
- self.get_string_attribute(name)
+ if !self.has_attribute(name) {
+ return "".to_string();
+ }
+ let url = self.get_string_attribute(name);
+ let doc = document_from_node(self).root();
+ let base = doc.url();
+ // https://html.spec.whatwg.org/multipage/infrastructure.html#reflect
+ // XXXManishearth this doesn't handle `javascript:` urls properly
+ match UrlParser::new().base_url(base).parse(url.as_slice()) {
+ Ok(parsed) => parsed.serialize(),
+ Err(_) => "".to_string()
+ }
}
fn set_url_attribute(self, name: &str, value: DOMString) {
self.set_string_attribute(name, value);
diff --git a/components/script/dom/htmlbuttonelement.rs b/components/script/dom/htmlbuttonelement.rs
index 00df730015d..baf3fba6c93 100644
--- a/components/script/dom/htmlbuttonelement.rs
+++ b/components/script/dom/htmlbuttonelement.rs
@@ -4,12 +4,12 @@
use dom::bindings::codegen::Bindings::HTMLButtonElementBinding;
use dom::bindings::codegen::Bindings::HTMLButtonElementBinding::HTMLButtonElementMethods;
-use dom::bindings::codegen::InheritTypes::{ElementCast, HTMLElementCast, NodeCast};
+use dom::bindings::codegen::InheritTypes::{HTMLElementCast, NodeCast};
use dom::bindings::codegen::InheritTypes::{HTMLButtonElementDerived, HTMLFieldSetElementDerived};
use dom::bindings::js::{JSRef, Temporary};
use dom::bindings::utils::{Reflectable, Reflector};
use dom::document::Document;
-use dom::element::{AttributeHandlers, Element, HTMLButtonElementTypeId};
+use dom::element::{AttributeHandlers, HTMLButtonElementTypeId};
use dom::eventtarget::{EventTarget, NodeTargetTypeId};
use dom::htmlelement::HTMLElement;
use dom::node::{DisabledStateHelpers, Node, NodeHelpers, ElementNodeTypeId, window_from_node};
diff --git a/components/script/dom/htmlformelement.rs b/components/script/dom/htmlformelement.rs
index 964b17e0784..7b2ee466bab 100644
--- a/components/script/dom/htmlformelement.rs
+++ b/components/script/dom/htmlformelement.rs
@@ -11,7 +11,7 @@ use dom::document::Document;
use dom::element::{Element, AttributeHandlers, HTMLFormElementTypeId};
use dom::eventtarget::{EventTarget, NodeTargetTypeId};
use dom::htmlelement::HTMLElement;
-use dom::node::{Node, ElementNodeTypeId};
+use dom::node::{Node, ElementNodeTypeId, window_from_node};
use servo_util::str::DOMString;
use std::ascii::OwnedStrAsciiExt;
@@ -50,7 +50,17 @@ impl<'a> HTMLFormElementMethods for JSRef<'a, HTMLFormElement> {
make_setter!(SetAcceptCharset, "accept-charset")
// https://html.spec.whatwg.org/multipage/forms.html#dom-fs-action
- make_url_getter!(Action)
+ fn Action(self) -> DOMString {
+ let element: JSRef<Element> = ElementCast::from_ref(self);
+ let url = element.get_url_attribute("src");
+ match url.as_slice() {
+ "" => {
+ let window = window_from_node(self).root();
+ window.get_url().serialize()
+ },
+ _ => url
+ }
+ }
// https://html.spec.whatwg.org/multipage/forms.html#dom-fs-action
make_setter!(SetAction, "action")
@@ -126,6 +136,7 @@ impl<'a> HTMLFormElementMethods for JSRef<'a, HTMLFormElement> {
// https://html.spec.whatwg.org/multipage/forms.html#dom-fs-target
make_setter!(SetTarget, "target")
}
+
impl Reflectable for HTMLFormElement {
fn reflector<'a>(&'a self) -> &'a Reflector {
self.htmlelement.reflector()
diff --git a/components/script/dom/htmlimageelement.rs b/components/script/dom/htmlimageelement.rs
index 859a1b16871..68dc1c4fd44 100644
--- a/components/script/dom/htmlimageelement.rs
+++ b/components/script/dom/htmlimageelement.rs
@@ -106,7 +106,7 @@ impl<'a> HTMLImageElementMethods for JSRef<'a, HTMLImageElement> {
make_getter!(UseMap)
- make_bool_setter!(SetUseMap, "usemap")
+ make_setter!(SetUseMap, "usemap")
make_bool_getter!(IsMap)
@@ -151,7 +151,7 @@ impl<'a> HTMLImageElementMethods for JSRef<'a, HTMLImageElement> {
make_uint_getter!(Vspace)
- make_uint_setter!(SetVspace, "Vspace")
+ make_uint_setter!(SetVspace, "vspace")
make_getter!(LongDesc)
diff --git a/components/script/dom/htmloptgroupelement.rs b/components/script/dom/htmloptgroupelement.rs
index 5e7e448ea45..9e0cade682d 100644
--- a/components/script/dom/htmloptgroupelement.rs
+++ b/components/script/dom/htmloptgroupelement.rs
@@ -4,12 +4,12 @@
use dom::bindings::codegen::Bindings::HTMLOptGroupElementBinding;
use dom::bindings::codegen::Bindings::HTMLOptGroupElementBinding::HTMLOptGroupElementMethods;
-use dom::bindings::codegen::InheritTypes::{ElementCast, HTMLElementCast, NodeCast};
+use dom::bindings::codegen::InheritTypes::{HTMLElementCast, NodeCast};
use dom::bindings::codegen::InheritTypes::{HTMLOptGroupElementDerived, HTMLOptionElementDerived};
use dom::bindings::js::{JSRef, Temporary};
use dom::bindings::utils::{Reflectable, Reflector};
use dom::document::Document;
-use dom::element::{AttributeHandlers, Element, HTMLOptGroupElementTypeId};
+use dom::element::{AttributeHandlers, HTMLOptGroupElementTypeId};
use dom::eventtarget::{EventTarget, NodeTargetTypeId};
use dom::htmlelement::HTMLElement;
use dom::node::{DisabledStateHelpers, Node, NodeHelpers, ElementNodeTypeId};
diff --git a/components/script/dom/htmlselectelement.rs b/components/script/dom/htmlselectelement.rs
index bb01a677c9e..53f8ce3efff 100644
--- a/components/script/dom/htmlselectelement.rs
+++ b/components/script/dom/htmlselectelement.rs
@@ -4,14 +4,14 @@
use dom::bindings::codegen::Bindings::HTMLSelectElementBinding;
use dom::bindings::codegen::Bindings::HTMLSelectElementBinding::HTMLSelectElementMethods;
-use dom::bindings::codegen::InheritTypes::{ElementCast, HTMLElementCast, NodeCast};
+use dom::bindings::codegen::InheritTypes::{HTMLElementCast, NodeCast};
use dom::bindings::codegen::InheritTypes::{HTMLSelectElementDerived, HTMLFieldSetElementDerived};
use dom::bindings::codegen::UnionTypes::HTMLElementOrLong::HTMLElementOrLong;
use dom::bindings::codegen::UnionTypes::HTMLOptionElementOrHTMLOptGroupElement::HTMLOptionElementOrHTMLOptGroupElement;
use dom::bindings::js::{JSRef, Temporary};
use dom::bindings::utils::{Reflectable, Reflector};
use dom::document::Document;
-use dom::element::{AttributeHandlers, Element, HTMLSelectElementTypeId};
+use dom::element::{AttributeHandlers, HTMLSelectElementTypeId};
use dom::eventtarget::{EventTarget, NodeTargetTypeId};
use dom::htmlelement::HTMLElement;
use dom::node::{DisabledStateHelpers, Node, NodeHelpers, ElementNodeTypeId, window_from_node};
diff --git a/components/script/dom/htmltextareaelement.rs b/components/script/dom/htmltextareaelement.rs
index 3df71eff10e..5dd688782cf 100644
--- a/components/script/dom/htmltextareaelement.rs
+++ b/components/script/dom/htmltextareaelement.rs
@@ -4,12 +4,12 @@
use dom::bindings::codegen::Bindings::HTMLTextAreaElementBinding;
use dom::bindings::codegen::Bindings::HTMLTextAreaElementBinding::HTMLTextAreaElementMethods;
-use dom::bindings::codegen::InheritTypes::{ElementCast, HTMLElementCast, NodeCast};
+use dom::bindings::codegen::InheritTypes::{HTMLElementCast, NodeCast};
use dom::bindings::codegen::InheritTypes::{HTMLTextAreaElementDerived, HTMLFieldSetElementDerived};
use dom::bindings::js::{JSRef, Temporary};
use dom::bindings::utils::{Reflectable, Reflector};
use dom::document::Document;
-use dom::element::{AttributeHandlers, Element, HTMLTextAreaElementTypeId};
+use dom::element::{AttributeHandlers, HTMLTextAreaElementTypeId};
use dom::eventtarget::{EventTarget, NodeTargetTypeId};
use dom::htmlelement::HTMLElement;
use dom::node::{DisabledStateHelpers, Node, NodeHelpers, ElementNodeTypeId};
diff --git a/components/script/dom/macros.rs b/components/script/dom/macros.rs
index 22b93a7eb07..719d5e93c94 100644
--- a/components/script/dom/macros.rs
+++ b/components/script/dom/macros.rs
@@ -59,21 +59,10 @@ macro_rules! make_url_getter(
fn $attr(self) -> DOMString {
use dom::element::{Element, AttributeHandlers};
use dom::bindings::codegen::InheritTypes::ElementCast;
- use dom::document::DocumentHelpers;
- use dom::node::document_from_node;
- use url::UrlParser;
#[allow(unused_imports)]
use std::ascii::StrAsciiExt;
- let elem: JSRef<Element> = ElementCast::from_ref(self);
- let action = elem.get_string_attribute($htmlname);
- let doc = document_from_node(self).root();
- let base = doc.url();
- // https://html.spec.whatwg.org/multipage/infrastructure.html#reflect
- // XXXManishearth this doesn't handle `javascript:` urls properly
- match UrlParser::new().base_url(base).parse(action.as_slice()) {
- Ok(parsed) => parsed.serialize(),
- Err(_) => base.serialize()
- }
+ let element: JSRef<Element> = ElementCast::from_ref(self);
+ element.get_url_attribute($htmlname)
}
);
($attr:ident) => {