diff options
author | chansuke <chansuke@georepublic.de> | 2018-09-18 23:24:15 +0900 |
---|---|---|
committer | Josh Matthews <josh@joshmatthews.net> | 2018-09-19 17:40:47 -0400 |
commit | c37a345dc9f4dda6ea29c42f96f6c7201c42cbac (patch) | |
tree | 1f05b49bac02318455a59d5b143c186fd872bdb9 /components/script/dom/htmlelement.rs | |
parent | 2ca7a134736bb4759ff209c1bc0b6dc3cc1984c9 (diff) | |
download | servo-c37a345dc9f4dda6ea29c42f96f6c7201c42cbac.tar.gz servo-c37a345dc9f4dda6ea29c42f96f6c7201c42cbac.zip |
Format script component
Diffstat (limited to 'components/script/dom/htmlelement.rs')
-rw-r--r-- | components/script/dom/htmlelement.rs | 259 |
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), } } } |