diff options
author | Patrick Shaughnessy <pshaughn@comcast.net> | 2020-01-22 20:15:42 -0500 |
---|---|---|
committer | Patrick Shaughnessy <pshaughn@comcast.net> | 2020-01-23 18:04:48 -0500 |
commit | c1a23a85b2a4f0e53d2d58de64adfee4be7fb30b (patch) | |
tree | 90c027c89619e72cca717f1808c10a32e5cf9b27 /components | |
parent | 2b77a992dba0547180b9bfd89a015556f8a51ba5 (diff) | |
download | servo-c1a23a85b2a4f0e53d2d58de64adfee4be7fb30b.tar.gz servo-c1a23a85b2a4f0e53d2d58de64adfee4be7fb30b.zip |
Implement HTMLMenuElement
Diffstat (limited to 'components')
-rw-r--r-- | components/script/dom/bindings/htmlconstructor.rs | 2 | ||||
-rw-r--r-- | components/script/dom/create.rs | 2 | ||||
-rw-r--r-- | components/script/dom/customelementregistry.rs | 1 | ||||
-rw-r--r-- | components/script/dom/htmlmenuelement.rs | 54 | ||||
-rw-r--r-- | components/script/dom/mod.rs | 1 | ||||
-rw-r--r-- | components/script/dom/webidls/HTMLMenuElement.webidl | 17 |
6 files changed, 77 insertions, 0 deletions
diff --git a/components/script/dom/bindings/htmlconstructor.rs b/components/script/dom/bindings/htmlconstructor.rs index 1937f400fda..f94105717c4 100644 --- a/components/script/dom/bindings/htmlconstructor.rs +++ b/components/script/dom/bindings/htmlconstructor.rs @@ -36,6 +36,7 @@ use crate::dom::bindings::codegen::Bindings::HTMLLabelElementBinding; use crate::dom::bindings::codegen::Bindings::HTMLLegendElementBinding; use crate::dom::bindings::codegen::Bindings::HTMLLinkElementBinding; use crate::dom::bindings::codegen::Bindings::HTMLMapElementBinding; +use crate::dom::bindings::codegen::Bindings::HTMLMenuElementBinding; use crate::dom::bindings::codegen::Bindings::HTMLMetaElementBinding; use crate::dom::bindings::codegen::Bindings::HTMLMeterElementBinding; use crate::dom::bindings::codegen::Bindings::HTMLModElementBinding; @@ -279,6 +280,7 @@ pub fn get_constructor_object_from_local_name( local_name!("map") => get_constructor!(HTMLMapElementBinding), local_name!("mark") => get_constructor!(HTMLElementBinding), local_name!("marquee") => get_constructor!(HTMLElementBinding), + local_name!("menu") => get_constructor!(HTMLMenuElementBinding), local_name!("meta") => get_constructor!(HTMLMetaElementBinding), local_name!("meter") => get_constructor!(HTMLMeterElementBinding), local_name!("nav") => get_constructor!(HTMLElementBinding), diff --git a/components/script/dom/create.rs b/components/script/dom/create.rs index c45e4286992..d67550ee47f 100644 --- a/components/script/dom/create.rs +++ b/components/script/dom/create.rs @@ -46,6 +46,7 @@ use crate::dom::htmllegendelement::HTMLLegendElement; use crate::dom::htmllielement::HTMLLIElement; use crate::dom::htmllinkelement::HTMLLinkElement; use crate::dom::htmlmapelement::HTMLMapElement; +use crate::dom::htmlmenuelement::HTMLMenuElement; use crate::dom::htmlmetaelement::HTMLMetaElement; use crate::dom::htmlmeterelement::HTMLMeterElement; use crate::dom::htmlmodelement::HTMLModElement; @@ -309,6 +310,7 @@ pub fn create_native_html_element( local_name!("map") => make!(HTMLMapElement), local_name!("mark") => make!(HTMLElement), local_name!("marquee") => make!(HTMLElement), + local_name!("menu") => make!(HTMLMenuElement), local_name!("meta") => make!(HTMLMetaElement), local_name!("meter") => make!(HTMLMeterElement), // https://html.spec.whatwg.org/multipage/#other-elements,-attributes-and-apis:multicol diff --git a/components/script/dom/customelementregistry.rs b/components/script/dom/customelementregistry.rs index 392cf49cce5..2ce74064fc0 100644 --- a/components/script/dom/customelementregistry.rs +++ b/components/script/dom/customelementregistry.rs @@ -1127,6 +1127,7 @@ fn is_extendable_element_interface(element: &str) -> bool { element == "map" || element == "mark" || element == "marquee" || + element == "menu" || element == "meta" || element == "meter" || element == "nav" || diff --git a/components/script/dom/htmlmenuelement.rs b/components/script/dom/htmlmenuelement.rs new file mode 100644 index 00000000000..b1b9955130c --- /dev/null +++ b/components/script/dom/htmlmenuelement.rs @@ -0,0 +1,54 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +use crate::dom::bindings::codegen::Bindings::HTMLMenuElementBinding; +use crate::dom::bindings::codegen::Bindings::HTMLMenuElementBinding::HTMLMenuElementMethods; +use crate::dom::bindings::root::DomRoot; +use crate::dom::document::Document; +use crate::dom::htmlelement::HTMLElement; +use crate::dom::node::Node; +use dom_struct::dom_struct; +use html5ever::{LocalName, Prefix}; + +#[dom_struct] +pub struct HTMLMenuElement { + htmlelement: HTMLElement, +} + +impl HTMLMenuElement { + fn new_inherited( + local_name: LocalName, + prefix: Option<Prefix>, + document: &Document, + ) -> HTMLMenuElement { + HTMLMenuElement { + htmlelement: HTMLElement::new_inherited(local_name, prefix, document), + } + } + + #[allow(unrooted_must_root)] + pub fn new( + local_name: LocalName, + prefix: Option<Prefix>, + document: &Document, + ) -> DomRoot<HTMLMenuElement> { + Node::reflect_node( + Box::new(HTMLMenuElement::new_inherited(local_name, prefix, document)), + document, + HTMLMenuElementBinding::Wrap, + ) + } +} + +impl HTMLMenuElementMethods for HTMLMenuElement { + // spec just mandates that compact reflects the content attribute, + // with no other semantics. Layout could use it to + // change line spacing, but nothing requires it to do so. + + // https://html.spec.whatwg.org/multipage/#dom-menu-compact + make_bool_setter!(SetCompact, "compact"); + + // https://html.spec.whatwg.org/multipage/#dom-menu-compact + make_bool_getter!(Compact, "compact"); +} diff --git a/components/script/dom/mod.rs b/components/script/dom/mod.rs index a39143c845b..2550eeda007 100644 --- a/components/script/dom/mod.rs +++ b/components/script/dom/mod.rs @@ -364,6 +364,7 @@ pub mod htmllielement; pub mod htmllinkelement; pub mod htmlmapelement; pub mod htmlmediaelement; +pub mod htmlmenuelement; pub mod htmlmetaelement; pub mod htmlmeterelement; pub mod htmlmodelement; diff --git a/components/script/dom/webidls/HTMLMenuElement.webidl b/components/script/dom/webidls/HTMLMenuElement.webidl new file mode 100644 index 00000000000..be638bd4d88 --- /dev/null +++ b/components/script/dom/webidls/HTMLMenuElement.webidl @@ -0,0 +1,17 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +// https://html.spec.whatwg.org/multipage/#htmlmenuelement +[Exposed=Window] +interface HTMLMenuElement : HTMLElement { + [HTMLConstructor] constructor(); + + // also has obsolete members +}; + +// https://html.spec.whatwg.org/multipage/#HTMLMenuElement-partial +partial interface HTMLMenuElement { + [CEReactions] + attribute boolean compact; +}; |