aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/element.rs
diff options
context:
space:
mode:
authorJosh Matthews <josh@joshmatthews.net>2014-10-06 11:51:44 -0400
committerJosh Matthews <josh@joshmatthews.net>2014-11-13 12:53:54 -0500
commit80764f65e3e4895d3a012d6bc1d3bb8183ae15da (patch)
tree63438517484e439fbc62693a5e53a1029f5206ba /components/script/dom/element.rs
parent84bc17e7ad99d11ff416f2126acb2031b680dc19 (diff)
downloadservo-80764f65e3e4895d3a012d6bc1d3bb8183ae15da.tar.gz
servo-80764f65e3e4895d3a012d6bc1d3bb8183ae15da.zip
Add single-line text input with no visible cursor.
Diffstat (limited to 'components/script/dom/element.rs')
-rw-r--r--components/script/dom/element.rs26
1 files changed, 19 insertions, 7 deletions
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs
index 9c2031c79cf..87d3f889544 100644
--- a/components/script/dom/element.rs
+++ b/components/script/dom/element.rs
@@ -26,7 +26,7 @@ use dom::document::{Document, DocumentHelpers, LayoutDocumentHelpers};
use dom::domtokenlist::DOMTokenList;
use dom::eventtarget::{EventTarget, NodeTargetTypeId};
use dom::htmlcollection::HTMLCollection;
-use dom::htmlinputelement::{HTMLInputElement, LayoutHTMLInputElementHelpers};
+use dom::htmlinputelement::{HTMLInputElement, RawLayoutHTMLInputElementHelpers};
use dom::htmlserializer::serialize;
use dom::htmltablecellelement::{HTMLTableCellElement, HTMLTableCellElementHelpers};
use dom::node::{ElementNodeTypeId, Node, NodeHelpers, NodeIterator, document_from_node};
@@ -231,17 +231,24 @@ pub trait RawLayoutElementHelpers {
-> Option<i32>;
}
+#[inline]
+#[allow(unrooted_must_root)]
+unsafe fn get_attr_for_layout<'a>(elem: &'a Element, namespace: &Namespace, name: &Atom) -> Option<&'a JS<Attr>> {
+ // cast to point to T in RefCell<T> directly
+ let attrs: *const Vec<JS<Attr>> = mem::transmute(&elem.attrs);
+ (*attrs).iter().find(|attr: & &JS<Attr>| {
+ let attr = attr.unsafe_get();
+ *name == (*attr).local_name_atom_forever() &&
+ (*attr).namespace() == namespace
+ })
+}
+
impl RawLayoutElementHelpers for Element {
#[inline]
#[allow(unrooted_must_root)]
unsafe fn get_attr_val_for_layout<'a>(&'a self, namespace: &Namespace, name: &Atom)
-> Option<&'a str> {
- let attrs = self.attrs.borrow_for_layout();
- (*attrs).iter().find(|attr: & &JS<Attr>| {
- let attr = attr.unsafe_get();
- *name == (*attr).local_name_atom_forever() &&
- (*attr).namespace() == namespace
- }).map(|attr| {
+ get_attr_for_layout(self, namespace, name).map(|attr| {
let attr = attr.unsafe_get();
(*attr).value_ref_forever()
})
@@ -337,6 +344,7 @@ impl RawLayoutElementHelpers for Element {
pub trait LayoutElementHelpers {
unsafe fn html_element_in_html_document_for_layout(&self) -> bool;
+ unsafe fn has_attr_for_layout(&self, namespace: &Namespace, name: &Atom) -> bool;
}
impl LayoutElementHelpers for JS<Element> {
@@ -349,6 +357,10 @@ impl LayoutElementHelpers for JS<Element> {
let node: JS<Node> = self.transmute_copy();
node.owner_doc_for_layout().is_html_document_for_layout()
}
+
+ unsafe fn has_attr_for_layout(&self, namespace: &Namespace, name: &Atom) -> bool {
+ get_attr_for_layout(&*self.unsafe_get(), namespace, name).is_some()
+ }
}
pub trait ElementHelpers<'a> {