aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/htmlelement.rs
diff options
context:
space:
mode:
authorchansuke <chansuke@georepublic.de>2018-09-18 23:24:15 +0900
committerJosh Matthews <josh@joshmatthews.net>2018-09-19 17:40:47 -0400
commitc37a345dc9f4dda6ea29c42f96f6c7201c42cbac (patch)
tree1f05b49bac02318455a59d5b143c186fd872bdb9 /components/script/dom/htmlelement.rs
parent2ca7a134736bb4759ff209c1bc0b6dc3cc1984c9 (diff)
downloadservo-c37a345dc9f4dda6ea29c42f96f6c7201c42cbac.tar.gz
servo-c37a345dc9f4dda6ea29c42f96f6c7201c42cbac.zip
Format script component
Diffstat (limited to 'components/script/dom/htmlelement.rs')
-rw-r--r--components/script/dom/htmlelement.rs259
1 files changed, 157 insertions, 102 deletions
diff --git a/components/script/dom/htmlelement.rs b/components/script/dom/htmlelement.rs
index e28ff1053a2..9279f8fdbe1 100644
--- a/components/script/dom/htmlelement.rs
+++ b/components/script/dom/htmlelement.rs
@@ -49,27 +49,44 @@ pub struct HTMLElement {
}
impl HTMLElement {
- pub fn new_inherited(tag_name: LocalName, prefix: Option<Prefix>,
- document: &Document) -> HTMLElement {
+ pub fn new_inherited(
+ tag_name: LocalName,
+ prefix: Option<Prefix>,
+ document: &Document,
+ ) -> HTMLElement {
HTMLElement::new_inherited_with_state(ElementState::empty(), tag_name, prefix, document)
}
- pub fn new_inherited_with_state(state: ElementState, tag_name: LocalName,
- prefix: Option<Prefix>, document: &Document)
- -> HTMLElement {
+ pub fn new_inherited_with_state(
+ state: ElementState,
+ tag_name: LocalName,
+ prefix: Option<Prefix>,
+ document: &Document,
+ ) -> HTMLElement {
HTMLElement {
- element:
- Element::new_inherited_with_state(state, tag_name, ns!(html), prefix, document),
+ element: Element::new_inherited_with_state(
+ state,
+ tag_name,
+ ns!(html),
+ prefix,
+ document,
+ ),
style_decl: Default::default(),
dataset: Default::default(),
}
}
#[allow(unrooted_must_root)]
- pub fn new(local_name: LocalName, prefix: Option<Prefix>, document: &Document) -> DomRoot<HTMLElement> {
- Node::reflect_node(Box::new(HTMLElement::new_inherited(local_name, prefix, document)),
- document,
- HTMLElementBinding::Wrap)
+ pub fn new(
+ local_name: LocalName,
+ prefix: Option<Prefix>,
+ document: &Document,
+ ) -> DomRoot<HTMLElement> {
+ Node::reflect_node(
+ Box::new(HTMLElement::new_inherited(local_name, prefix, document)),
+ document,
+ HTMLElementBinding::Wrap,
+ )
}
fn is_body_or_frameset(&self) -> bool {
@@ -84,13 +101,24 @@ impl HTMLElement {
node.set_flag(NodeFlags::SEQUENTIALLY_FOCUSABLE, true);
} else {
match node.type_id() {
- NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLButtonElement)) |
- NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLSelectElement)) |
- NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLIFrameElement)) |
- NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLTextAreaElement))
- => node.set_flag(NodeFlags::SEQUENTIALLY_FOCUSABLE, true),
- NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLLinkElement)) |
- NodeTypeId::Element(ElementTypeId::HTMLElement(HTMLElementTypeId::HTMLAnchorElement)) => {
+ NodeTypeId::Element(ElementTypeId::HTMLElement(
+ HTMLElementTypeId::HTMLButtonElement,
+ )) |
+ NodeTypeId::Element(ElementTypeId::HTMLElement(
+ HTMLElementTypeId::HTMLSelectElement,
+ )) |
+ NodeTypeId::Element(ElementTypeId::HTMLElement(
+ HTMLElementTypeId::HTMLIFrameElement,
+ )) |
+ NodeTypeId::Element(ElementTypeId::HTMLElement(
+ HTMLElementTypeId::HTMLTextAreaElement,
+ )) => node.set_flag(NodeFlags::SEQUENTIALLY_FOCUSABLE, true),
+ NodeTypeId::Element(ElementTypeId::HTMLElement(
+ HTMLElementTypeId::HTMLLinkElement,
+ )) |
+ NodeTypeId::Element(ElementTypeId::HTMLElement(
+ HTMLElementTypeId::HTMLAnchorElement,
+ )) => {
if element.has_attribute(&local_name!("href")) {
node.set_flag(NodeFlags::SEQUENTIALLY_FOCUSABLE, true);
}
@@ -119,10 +147,12 @@ impl HTMLElementMethods for HTMLElement {
fn Style(&self) -> DomRoot<CSSStyleDeclaration> {
self.style_decl.or_init(|| {
let global = window_from_node(self);
- CSSStyleDeclaration::new(&global,
- CSSStyleOwner::Element(Dom::from_ref(self.upcast())),
- None,
- CSSModificationAccess::ReadWrite)
+ CSSStyleDeclaration::new(
+ &global,
+ CSSStyleOwner::Element(Dom::from_ref(self.upcast())),
+ None,
+ CSSModificationAccess::ReadWrite,
+ )
})
}
@@ -162,7 +192,8 @@ impl HTMLElementMethods for HTMLElement {
None
}
} else {
- self.upcast::<EventTarget>().get_event_handler_common("load")
+ self.upcast::<EventTarget>()
+ .get_event_handler_common("load")
}
}
@@ -174,7 +205,8 @@ impl HTMLElementMethods for HTMLElement {
document.window().SetOnload(listener)
}
} else {
- self.upcast::<EventTarget>().set_event_handler_common("load", listener)
+ self.upcast::<EventTarget>()
+ .set_event_handler_common("load", listener)
}
}
@@ -188,7 +220,8 @@ impl HTMLElementMethods for HTMLElement {
None
}
} else {
- self.upcast::<EventTarget>().get_event_handler_common("resize")
+ self.upcast::<EventTarget>()
+ .get_event_handler_common("resize")
}
}
@@ -200,7 +233,8 @@ impl HTMLElementMethods for HTMLElement {
document.window().SetOnresize(listener);
}
} else {
- self.upcast::<EventTarget>().set_event_handler_common("resize", listener)
+ self.upcast::<EventTarget>()
+ .set_event_handler_common("resize", listener)
}
}
@@ -214,7 +248,8 @@ impl HTMLElementMethods for HTMLElement {
None
}
} else {
- self.upcast::<EventTarget>().get_event_handler_common("blur")
+ self.upcast::<EventTarget>()
+ .get_event_handler_common("blur")
}
}
@@ -226,7 +261,8 @@ impl HTMLElementMethods for HTMLElement {
document.window().SetOnblur(listener)
}
} else {
- self.upcast::<EventTarget>().set_event_handler_common("blur", listener)
+ self.upcast::<EventTarget>()
+ .set_event_handler_common("blur", listener)
}
}
@@ -240,7 +276,8 @@ impl HTMLElementMethods for HTMLElement {
None
}
} else {
- self.upcast::<EventTarget>().get_event_handler_common("focus")
+ self.upcast::<EventTarget>()
+ .get_event_handler_common("focus")
}
}
@@ -252,7 +289,8 @@ impl HTMLElementMethods for HTMLElement {
document.window().SetOnfocus(listener)
}
} else {
- self.upcast::<EventTarget>().set_event_handler_common("focus", listener)
+ self.upcast::<EventTarget>()
+ .set_event_handler_common("focus", listener)
}
}
@@ -266,7 +304,8 @@ impl HTMLElementMethods for HTMLElement {
None
}
} else {
- self.upcast::<EventTarget>().get_event_handler_common("scroll")
+ self.upcast::<EventTarget>()
+ .get_event_handler_common("scroll")
}
}
@@ -278,13 +317,16 @@ impl HTMLElementMethods for HTMLElement {
document.window().SetOnscroll(listener)
}
} else {
- self.upcast::<EventTarget>().set_event_handler_common("scroll", listener)
+ self.upcast::<EventTarget>()
+ .set_event_handler_common("scroll", listener)
}
}
// https://html.spec.whatwg.org/multipage/#attr-itemtype
fn Itemtypes(&self) -> Option<Vec<DOMString>> {
- let atoms = self.element.get_tokenlist_attribute(&local_name!("itemtype"), );
+ let atoms = self
+ .element
+ .get_tokenlist_attribute(&local_name!("itemtype"));
if atoms.is_empty() {
return None;
@@ -300,7 +342,9 @@ impl HTMLElementMethods for HTMLElement {
// https://html.spec.whatwg.org/multipage/#names:-the-itemprop-attribute
fn PropertyNames(&self) -> Option<Vec<DOMString>> {
- let atoms = self.element.get_tokenlist_attribute(&local_name!("itemprop"), );
+ let atoms = self
+ .element
+ .get_tokenlist_attribute(&local_name!("itemprop"));
if atoms.is_empty() {
return None;
@@ -317,12 +361,14 @@ impl HTMLElementMethods for HTMLElement {
// https://html.spec.whatwg.org/multipage/#dom-click
fn Click(&self) {
if !self.upcast::<Element>().disabled_state() {
- synthetic_click_activation(self.upcast::<Element>(),
- false,
- false,
- false,
- false,
- ActivationSource::FromClick)
+ synthetic_click_activation(
+ self.upcast::<Element>(),
+ false,
+ false,
+ false,
+ false,
+ ActivationSource::FromClick,
+ )
}
}
@@ -418,7 +464,9 @@ impl HTMLElementMethods for HTMLElement {
return node.GetTextContent().unwrap();
}
- window.layout_reflow(QueryMsg::ElementInnerTextQuery(node.to_trusted_node_address()));
+ window.layout_reflow(QueryMsg::ElementInnerTextQuery(
+ node.to_trusted_node_address(),
+ ));
DOMString::from(window.layout().element_inner_text())
}
@@ -458,7 +506,7 @@ impl HTMLElementMethods for HTMLElement {
},
_ => {
text.push(ch);
- }
+ },
}
}
@@ -471,13 +519,12 @@ impl HTMLElementMethods for HTMLElement {
}
}
-fn append_text_node_to_fragment(
- document: &Document,
- fragment: &DocumentFragment,
- text: String
-) {
+fn append_text_node_to_fragment(document: &Document, fragment: &DocumentFragment, text: String) {
let text = Text::new(DOMString::from(text), document);
- fragment.upcast::<Node>().AppendChild(&text.upcast()).unwrap();
+ fragment
+ .upcast::<Node>()
+ .AppendChild(&text.upcast())
+ .unwrap();
}
// https://html.spec.whatwg.org/multipage/#attr-data-*
@@ -507,7 +554,6 @@ fn to_snake_case(name: DOMString) -> DOMString {
DOMString::from(attr_name)
}
-
// https://html.spec.whatwg.org/multipage/#attr-data-*
// if this attribute is in snake case with a data- prefix,
// this function returns a name converted to camel case
@@ -546,44 +592,51 @@ fn to_camel_case(name: &str) -> Option<DOMString> {
impl HTMLElement {
pub fn set_custom_attr(&self, name: DOMString, value: DOMString) -> ErrorResult {
- if name.chars()
- .skip_while(|&ch| ch != '\u{2d}')
- .nth(1).map_or(false, |ch| ch >= 'a' && ch <= 'z') {
+ if name
+ .chars()
+ .skip_while(|&ch| ch != '\u{2d}')
+ .nth(1)
+ .map_or(false, |ch| ch >= 'a' && ch <= 'z')
+ {
return Err(Error::Syntax);
}
- self.upcast::<Element>().set_custom_attribute(to_snake_case(name), value)
+ self.upcast::<Element>()
+ .set_custom_attribute(to_snake_case(name), value)
}
pub fn get_custom_attr(&self, local_name: DOMString) -> Option<DOMString> {
// FIXME(ajeffrey): Convert directly from DOMString to LocalName
let local_name = LocalName::from(to_snake_case(local_name));
- self.upcast::<Element>().get_attribute(&ns!(), &local_name).map(|attr| {
- DOMString::from(&**attr.value()) // FIXME(ajeffrey): Convert directly from AttrValue to DOMString
- })
+ self.upcast::<Element>()
+ .get_attribute(&ns!(), &local_name)
+ .map(|attr| {
+ DOMString::from(&**attr.value()) // FIXME(ajeffrey): Convert directly from AttrValue to DOMString
+ })
}
pub fn delete_custom_attr(&self, local_name: DOMString) {
// FIXME(ajeffrey): Convert directly from DOMString to LocalName
let local_name = LocalName::from(to_snake_case(local_name));
- self.upcast::<Element>().remove_attribute(&ns!(), &local_name);
+ self.upcast::<Element>()
+ .remove_attribute(&ns!(), &local_name);
}
// https://html.spec.whatwg.org/multipage/#category-label
pub fn is_labelable_element(&self) -> bool {
// Note: HTMLKeygenElement is omitted because Servo doesn't currently implement it
match self.upcast::<Node>().type_id() {
- NodeTypeId::Element(ElementTypeId::HTMLElement(type_id)) =>
- match type_id {
- HTMLElementTypeId::HTMLInputElement =>
- self.downcast::<HTMLInputElement>().unwrap().input_type() != InputType::Hidden,
- HTMLElementTypeId::HTMLButtonElement |
- HTMLElementTypeId::HTMLMeterElement |
- HTMLElementTypeId::HTMLOutputElement |
- HTMLElementTypeId::HTMLProgressElement |
- HTMLElementTypeId::HTMLSelectElement |
- HTMLElementTypeId::HTMLTextAreaElement => true,
- _ => false,
+ NodeTypeId::Element(ElementTypeId::HTMLElement(type_id)) => match type_id {
+ HTMLElementTypeId::HTMLInputElement => {
+ self.downcast::<HTMLInputElement>().unwrap().input_type() != InputType::Hidden
},
+ HTMLElementTypeId::HTMLButtonElement |
+ HTMLElementTypeId::HTMLMeterElement |
+ HTMLElementTypeId::HTMLOutputElement |
+ HTMLElementTypeId::HTMLProgressElement |
+ HTMLElementTypeId::HTMLSelectElement |
+ HTMLElementTypeId::HTMLTextAreaElement => true,
+ _ => false,
+ },
_ => false,
}
}
@@ -597,27 +650,29 @@ impl HTMLElement {
}
match self.upcast::<Node>().type_id() {
- NodeTypeId::Element(ElementTypeId::HTMLElement(type_id)) =>
- match type_id {
- HTMLElementTypeId::HTMLButtonElement |
- HTMLElementTypeId::HTMLFieldSetElement |
- HTMLElementTypeId::HTMLInputElement |
- HTMLElementTypeId::HTMLObjectElement |
- HTMLElementTypeId::HTMLOutputElement |
- HTMLElementTypeId::HTMLSelectElement |
- HTMLElementTypeId::HTMLTextAreaElement => true,
- _ => false,
- },
+ NodeTypeId::Element(ElementTypeId::HTMLElement(type_id)) => match type_id {
+ HTMLElementTypeId::HTMLButtonElement |
+ HTMLElementTypeId::HTMLFieldSetElement |
+ HTMLElementTypeId::HTMLInputElement |
+ HTMLElementTypeId::HTMLObjectElement |
+ HTMLElementTypeId::HTMLOutputElement |
+ HTMLElementTypeId::HTMLSelectElement |
+ HTMLElementTypeId::HTMLTextAreaElement => true,
+ _ => false,
+ },
_ => false,
}
}
pub fn supported_prop_names_custom_attr(&self) -> Vec<DOMString> {
let element = self.upcast::<Element>();
- element.attrs().iter().filter_map(|attr| {
- let raw_name = attr.local_name();
- to_camel_case(&raw_name)
- }).collect()
+ element
+ .attrs()
+ .iter()
+ .filter_map(|attr| {
+ let raw_name = attr.local_name();
+ to_camel_case(&raw_name)
+ }).collect()
}
// https://html.spec.whatwg.org/multipage/#dom-lfe-labels
@@ -629,8 +684,7 @@ impl HTMLElement {
// Traverse ancestors for implicitly associated <label> elements
// https://html.spec.whatwg.org/multipage/#the-label-element:attr-label-for-4
- let ancestors =
- self.upcast::<Node>()
+ let ancestors = self.upcast::<Node>()
.ancestors()
.filter_map(DomRoot::downcast::<HTMLElement>)
// If we reach a labelable element, we have a guarantee no ancestors above it
@@ -650,11 +704,12 @@ impl HTMLElement {
// Traverse entire tree for <label> elements with `for` attribute matching `id`
let root_element = element.root_element();
let root_node = root_element.upcast::<Node>();
- let children = root_node.traverse_preorder()
- .filter_map(DomRoot::downcast::<Element>)
- .filter(|elem| elem.is::<HTMLLabelElement>())
- .filter(|elem| elem.get_string_attribute(&local_name!("for")) == id)
- .map(DomRoot::upcast::<Node>);
+ let children = root_node
+ .traverse_preorder()
+ .filter_map(DomRoot::downcast::<Element>)
+ .filter(|elem| elem.is::<HTMLLabelElement>())
+ .filter(|elem| elem.get_string_attribute(&local_name!("for")) == id)
+ .map(DomRoot::upcast::<Node>);
NodeList::new_simple_list(&window, children.chain(ancestors))
}
@@ -671,13 +726,15 @@ impl VirtualMethods for HTMLElement {
(name, AttributeMutation::Set(_)) if name.starts_with("on") => {
let evtarget = self.upcast::<EventTarget>();
let source_line = 1; //TODO(#9604) get current JS execution line
- evtarget.set_event_handler_uncompiled(window_from_node(self).get_url(),
- source_line,
- &name[2..],
- // FIXME(ajeffrey): Convert directly from AttrValue to DOMString
- DOMString::from(&**attr.value()));
+ evtarget.set_event_handler_uncompiled(
+ window_from_node(self).get_url(),
+ source_line,
+ &name[2..],
+ // FIXME(ajeffrey): Convert directly from AttrValue to DOMString
+ DOMString::from(&**attr.value()),
+ );
},
- _ => {}
+ _ => {},
}
}
@@ -692,12 +749,10 @@ impl VirtualMethods for HTMLElement {
match name {
&local_name!("itemprop") => AttrValue::from_serialized_tokenlist(value.into()),
&local_name!("itemtype") => AttrValue::from_serialized_tokenlist(value.into()),
- _ => {
- self.super_type().unwrap().parse_plain_attribute(
- name,
- value,
- )
- },
+ _ => self
+ .super_type()
+ .unwrap()
+ .parse_plain_attribute(name, value),
}
}
}