Only make a elements activatable when they have an href attribute.

I've tested this manually, by clicking on the "baz" in code like

```js
var a = document.body.appendChild(document.createElement("a"));
a.textContent = "bar ";
a.setAttribute("href", "http://www.yahoo.com");
var b = a.appendChild(document.createElement("a"));
b.textContent = "baz";
```

Before this change, the click is trapped by `b` and ignored there; after this
change, the click passes through `b` to `a`, where it is handled.

Unfortunately, I haven't found a way to write an automated test.
This commit is contained in:
Ms2ger 2015-07-03 17:34:08 +02:00
parent 73b52c095a
commit 52e336e5a8

View file

@ -101,7 +101,12 @@ impl<'a> Activatable for &'a HTMLAnchorElement {
}
fn is_instance_activatable(&self) -> bool {
true
// https://html.spec.whatwg.org/multipage/#hyperlink
// "a [...] element[s] with an href attribute [...] must [..] create a
// hyperlink"
// https://html.spec.whatwg.org/multipage/#the-a-element
// "The activation behaviour of a elements *that create hyperlinks*"
ElementCast::from_ref(*self).has_attribute(&atom!("href"))
}
@ -141,14 +146,13 @@ impl<'a> Activatable for &'a HTMLAnchorElement {
//TODO: Step 4. Download the link is `download` attribute is set.
if let Some(ref href) = element.get_attribute(&ns!(""), &atom!("href")) {
let mut value = href.r().Value();
if let Some(suffix) = ismap_suffix {
value.push_str(&suffix);
}
debug!("clicked on link to {}", value);
doc.r().load_anchor_href(value);
let href = element.get_attribute(&ns!(""), &atom!("href")).unwrap();
let mut value = href.r().Value();
if let Some(suffix) = ismap_suffix {
value.push_str(&suffix);
}
debug!("clicked on link to {}", value);
doc.r().load_anchor_href(value);
}
//TODO:https://html.spec.whatwg.org/multipage/#the-a-element