diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2020-01-25 11:15:32 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-25 11:15:32 -0500 |
commit | 937efba0cd6662b4e0060e7056c52dac2896535c (patch) | |
tree | 0a29e3008fd7effae209944db3bebb8763732d82 /components/script | |
parent | f3e6351e472bdbc3b574a7734437c9f8cd1b60cc (diff) | |
parent | c1a23a85b2a4f0e53d2d58de64adfee4be7fb30b (diff) | |
download | servo-937efba0cd6662b4e0060e7056c52dac2896535c.tar.gz servo-937efba0cd6662b4e0060e7056c52dac2896535c.zip |
Auto merge of #25576 - pshaughn:menuelement, r=jdm
Implement HTMLMenuElement
<!-- Please describe your changes on the following line: -->
Per spec, "The menu element is simply a semantic alternative to ul to express an unordered list of commands (a "toolbar")." We already have the CSS for it in user-agent.css, and this gives us the interface object.
---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `___` with appropriate data: -->
- [X] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [X] These changes fix #24990
<!-- Either: -->
- [X] There are tests for these changes
<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->
<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
Diffstat (limited to 'components/script')
-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 2b242612486..bdbb25835bd 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; @@ -280,6 +281,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 22f151794d9..12a6e744a5e 100644 --- a/components/script/dom/customelementregistry.rs +++ b/components/script/dom/customelementregistry.rs @@ -1145,6 +1145,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; +}; |