diff options
author | Simon Wülker <simon.wuelker@arcor.de> | 2025-01-19 15:05:05 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-01-19 14:05:05 +0000 |
commit | dabe162d44a2b8a47b7a9dc8566e7f51ae678d05 (patch) | |
tree | 0b915202184ab6924ecb38cc961bbd4dd8ed830e /components/script/dom/webidls | |
parent | 8bb50fa3c9d82e2575b02cefb6558467a8187439 (diff) | |
download | servo-dabe162d44a2b8a47b7a9dc8566e7f51ae678d05.tar.gz servo-dabe162d44a2b8a47b7a9dc8566e7f51ae678d05.zip |
Implement shadow dom slots (#35013)
* Implement slot-related algorithms
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* Hook up slot elements to DOM creation logic
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* Set a slot assignment mode for servo-internal shadow roots
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* Assign slots when a slottable's slot attribute changes
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* Properly compute slot name
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* ./mach test-tidy
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* Update <slot> name when name attribute changes
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* Implement fast path for Node::assign_slottables_for_a_tree
assign_slottables_for_a_tree traverses all descendants of the node
and is potentially very expensive. If the node is not a shadow root
then assigning slottables to it won't have any effect, so we
take a fast path out.
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* Move slottable data into ElementRareData
This shrinks all element descendants back to their
original size.
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* Address review comments
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
* Update WPT expectations
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
---------
Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
Diffstat (limited to 'components/script/dom/webidls')
-rw-r--r-- | components/script/dom/webidls/Element.webidl | 2 | ||||
-rw-r--r-- | components/script/dom/webidls/HTMLSlotElement.webidl | 25 | ||||
-rw-r--r-- | components/script/dom/webidls/ShadowRoot.webidl | 4 |
3 files changed, 28 insertions, 3 deletions
diff --git a/components/script/dom/webidls/Element.webidl b/components/script/dom/webidls/Element.webidl index c7884925541..60a6db4e4e1 100644 --- a/components/script/dom/webidls/Element.webidl +++ b/components/script/dom/webidls/Element.webidl @@ -90,7 +90,7 @@ interface Element : Node { dictionary ShadowRootInit { required ShadowRootMode mode; // boolean delegatesFocus = false; - // SlotAssignmentMode slotAssignment = "named"; + SlotAssignmentMode slotAssignment = "named"; boolean clonable = false; // boolean serializable = false; }; diff --git a/components/script/dom/webidls/HTMLSlotElement.webidl b/components/script/dom/webidls/HTMLSlotElement.webidl new file mode 100644 index 00000000000..bec872ab1fc --- /dev/null +++ b/components/script/dom/webidls/HTMLSlotElement.webidl @@ -0,0 +1,25 @@ +/* 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/#the-slot-element +[Exposed=Window] +interface HTMLSlotElement : HTMLElement { + [HTMLConstructor] constructor(); + + [CEReactions] attribute DOMString name; + sequence<Node> assignedNodes(optional AssignedNodesOptions options = {}); + sequence<Element> assignedElements(optional AssignedNodesOptions options = {}); + undefined assign((Element or Text)... nodes); +}; + +dictionary AssignedNodesOptions { + boolean flatten = false; +}; + +// https://dom.spec.whatwg.org/#mixin-slotable +interface mixin Slottable { + readonly attribute HTMLSlotElement? assignedSlot; +}; +Element includes Slottable; +Text includes Slottable; diff --git a/components/script/dom/webidls/ShadowRoot.webidl b/components/script/dom/webidls/ShadowRoot.webidl index 40301f48517..444dd53d22c 100644 --- a/components/script/dom/webidls/ShadowRoot.webidl +++ b/components/script/dom/webidls/ShadowRoot.webidl @@ -10,7 +10,7 @@ interface ShadowRoot : DocumentFragment { readonly attribute ShadowRootMode mode; // readonly attribute boolean delegatesFocus; - // readonly attribute SlotAssignmentMode slotAssignment; + readonly attribute SlotAssignmentMode slotAssignment; readonly attribute boolean clonable; // readonly attribute boolean serializable; readonly attribute Element host; @@ -19,7 +19,7 @@ interface ShadowRoot : DocumentFragment { enum ShadowRootMode { "open", "closed"}; -// enum SlotAssignmentMode { "manual", "named" }; +enum SlotAssignmentMode { "manual", "named" }; ShadowRoot includes DocumentOrShadowRoot; |