ladybird/Tests/LibWeb/Text/input/ShadowDOM/declarative-basic.html
Andreas Kling f49335f210 LibWeb: Align declarative shadow root parsing
Teach the Rust parser to recognize declarative shadow root templates and
pass the parsed mode, slot assignment, clonable, serializable, and
focus-delegation flags to the C++ DOM host.

Expose shadowRootSlotAssignment reflection with the spec-defined named
missing and invalid value defaults, and extend the ShadowDOM text test
coverage for the reflected property and parser-created shadow roots.
2026-05-17 15:35:56 +02:00

61 lines
2.4 KiB
HTML

<!DOCTYPE html>
<div id="basicOpen">
<template shadowrootmode="open">open</template>
</div>
<div id="basicClosed">
<template shadowrootmode="closed">closed</template>
</div>
<div id="redundant">
<template shadowrootmode="open">open</template>
<template shadowrootmode="open">also open</template>
</div>
<div id="basicOpenClonable">
<template shadowrootmode="open" shadowrootclonable>open</template>
</div>
<div id="basicOpenSerializable">
<template shadowrootmode="open" shadowrootserializable>open</template>
</div>
<div id="manualSlotAssignment">
<template shadowrootmode="OpEn" shadowrootslotassignment="MANUAL" shadowrootserializable><slot name="slot"></slot></template>
<span slot="slot">manual</span>
</div>
<script src="../include.js"></script>
<script>
test(() => {
println(basicOpen.shadowRoot);
println(basicOpen.childElementCount);
println(basicClosed.shadowRoot);
println(basicClosed.childElementCount);
println(redundant.shadowRoot);
println(redundant.childElementCount);
let clonedUnclonable = basicOpen.cloneNode();
println(clonedUnclonable.shadowRoot);
println(clonedUnclonable.childElementCount);
let clonedClonable = basicOpenClonable.cloneNode();
println(clonedClonable.shadowRoot);
println(clonedClonable.childElementCount);
println(basicOpen.getHTML({ serializableShadowRoots: true}));
println(basicOpen.getHTML({ shadowRoots: [ basicOpen.shadowRoot ]}));
println(basicOpenSerializable.getHTML({ serializableShadowRoots: true}));
println(basicOpenSerializable.getHTML({ serializableShadowRoots: false}));
println(basicOpenSerializable.getHTML({ shadowRoots: [ basicOpenSerializable.shadowRoot ]}));
println(manualSlotAssignment.shadowRoot.slotAssignment);
println(manualSlotAssignment.querySelector("span").assignedSlot);
println(manualSlotAssignment.getHTML({ serializableShadowRoots: true}));
let template = document.createElement("template");
println(template.shadowRootSlotAssignment);
template.shadowRootSlotAssignment = "MANUAL";
println(template.shadowRootSlotAssignment);
template.shadowRootSlotAssignment = "invalid";
println(template.shadowRootSlotAssignment);
template.setAttribute("shadowrootslotassignment", "bogus");
println(template.shadowRootSlotAssignment);
});
</script>