aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/webidls
diff options
context:
space:
mode:
authorSimon Wülker <simon.wuelker@arcor.de>2025-01-19 15:05:05 +0100
committerGitHub <noreply@github.com>2025-01-19 14:05:05 +0000
commitdabe162d44a2b8a47b7a9dc8566e7f51ae678d05 (patch)
tree0b915202184ab6924ecb38cc961bbd4dd8ed830e /components/script/dom/webidls
parent8bb50fa3c9d82e2575b02cefb6558467a8187439 (diff)
downloadservo-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.webidl2
-rw-r--r--components/script/dom/webidls/HTMLSlotElement.webidl25
-rw-r--r--components/script/dom/webidls/ShadowRoot.webidl4
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;