add_task(async function testMozFieldsetAttributes() {
render( html`
<moz-fieldsetlabel="Test label" description="Test description">
<label><input type="checkbox" /> First setting</label>
<label><input type="checkbox" /> Second setting</label>
<label><input type="checkbox" /> Third setting</label>
</moz-fieldset>
`,
renderTarget
);
// Check initial rendered attributes.
let fieldset = renderTarget.querySelector("moz-fieldset");
await fieldset.updateComplete;
let fieldsetEl = fieldset.shadowRoot.querySelector("fieldset");
let legend = fieldset.shadowRoot.querySelector("fieldset > legend");
let description = fieldset.shadowRoot.querySelector("#description");
is( legend.childElementCount, 0, "There are no child elements in the legend"
);
is(legend.innerText, "Test label", "legend is set");
is(description.innerText, "Test description", "description is set");
is( fieldset.shadowRoot.getElementById(
fieldsetEl.getAttribute("aria-describedby")
),
description, "description describes fieldset"
);
// Changing the attributes should update the DOM. fieldset.label = "New label"; fieldset.description = "New description";
await fieldset.updateComplete;
is(legend.innerText, "New label", "legend is set");
is(description.innerText, "New description", "description is set");
// Removing the description should remove the describedby association. fieldset.description = null;
await fieldset.updateComplete;
ok(
!fieldsetEl.hasAttribute("aria-describedby"), "aria-describedby removed when no description"
);
// Validate that adding iconSrc displays an image
let icon = fieldset.shadowRoot.querySelector(".icon");
ok(!icon, "Icon is not rendered when iconSrc is not present.");
icon = fieldset.shadowRoot.querySelector(".icon");
ok(icon, "Icon is rendered after iconSrc is supplied.");
is(
icon.src, "chrome://global/skin/icons/info.svg", "Icon src is set to the expected value."
);
});
add_task(async function testMozFieldsetSupportLink() {
render( html`
<moz-fieldset label="Test label"
description="Test description"
support-page="test"
>
<label><input type="checkbox" /> First setting</label>
<label><input type="checkbox" /> Second setting</label>
<label><input type="checkbox" /> Third setting</label>
</moz-fieldset>
`,
renderTarget
);
let fieldset = renderTarget.querySelector("moz-fieldset");
await fieldset.updateComplete;
let legendEl = fieldset.shadowRoot.querySelector("legend");
let fieldsetEl = fieldset.shadowRoot.querySelector("fieldset");
let supportLinkEl = fieldsetEl.querySelector( "a[is='moz-support-link']"
);
ok(supportLinkEl, "support-link element should be rendered");
is(
supportLinkEl.getAttribute("support-page"), "test", "'support-page' attribute is set"
);
is(
supportLinkEl.getAttribute("part"), "support-link", "'part' attribute is set"
);
// Update the support-page attribute fieldset.supportPage = "foo";
await fieldset.updateComplete;
is(
supportLinkEl.getAttribute("support-page"), "foo", "'support-page' attribute should update"
);
// Remove the support-page attribute fieldset.supportPage = null;
await fieldset.updateComplete;
ok(
!fieldsetEl.querySelector("a[is='moz-support-link']"), "support link element should be removed"
);
// Verify placement of support link fieldset.supportPage = "foo"; fieldset.description = "";
await fieldset.updateComplete;
// The support link is re-rendered, so we need an updated reference
supportLinkEl = fieldsetEl.querySelector("a[is='moz-support-link']");
ok(
supportLinkEl.previousElementSibling == legendEl, "support link element should be inline after the legend element if there's no description"
);
fieldset.description = "a test description";
await fieldset.updateComplete;
let descriptionEl = fieldset.shadowRoot.querySelector("#description");
// The support link is re-rendered, so we need an updated reference
supportLinkEl = fieldsetEl.querySelector("a[is='moz-support-link']");
ok(
supportLinkEl.previousElementSibling == descriptionEl, "support link element should be placed after the description if there's one"
);
// Verify that slotted support link's placement renders as expected fieldset.removeAttribute("support-page");
let slottedSupportLink = document.createElement("div");
slottedSupportLink.slot = "support-link";
slottedSupportLink.innerText = "slotted element"; fieldset.appendChild(slottedSupportLink);
await fieldset.updateComplete;
ok(
!fieldset.getAttribute("support-page"), "There should not be a support-page attribute"
);
let slottedEl = fieldset.shadowRoot.querySelector( "slot[name='support-link']"
);
ok(slottedEl, "Slotted support link should exist");
ok(
slottedEl.previousElementSibling == descriptionEl, "Slotted support link element should be placed after the description if there's one"
);
fieldset.description = "";
await fieldset.updateComplete; fieldset.appendChild(slottedSupportLink);
await fieldset.updateComplete;
slottedEl = fieldset.shadowRoot.querySelector( "slot[name='support-link']"
);
ok(slottedEl, "Slotted support link should exist");
ok(
slottedEl.previousElementSibling == legendEl, "Slotted support link element should be placed inline with the legend when there is no description"
);
});
add_task(async function testMozFieldsetHeadingLevel() {
render( html`
<moz-fieldsetlabel="Test label" headinglevel="3">
<label><input type="checkbox" /> First setting</label>
<label><input type="checkbox" /> Second setting</label>
<label><input type="checkbox" /> Third setting</label>
</moz-fieldset>
`,
renderTarget
);
let fieldset = renderTarget.querySelector("moz-fieldset");
await fieldset.updateComplete;
let legendEl = fieldset.shadowRoot.querySelector("fieldset > legend");
is(legendEl.childElementCount, 1, "The legend has a child");
is(legendEl.innerText, "Test label", "The legend text is correct");
let headingEl = legendEl.firstElementChild;
is(headingEl.localName, "h3", "The legend has an h3");
is(headingEl.innerText, "Test label", "The heading has the text");
ok(
!fieldset.hasAttribute("hasheading"), "hasheading attribute isn't set when headingLevel is invalid"
);
is(legendEl.childElementCount, 0, "The legend has no child elements");
is(legendEl.innerText, "Test label", "The legend text is correct");
is(legendEl.childElementCount, 0, "The legend has no child elements");
is(legendEl.innerText, "Test label", "The legend text is correct");
// Check 1-6
for (let i = 1; i <= 6; i++) { fieldset.headingLevel = i;
await fieldset.updateComplete;
ok( fieldset.hasAttribute("hasheading"), "hasheading attribute is set when headingLevel is valid"
);
is(legendEl.childElementCount, 1, "The legend has a child");
is(legendEl.innerText, "Test label", "The legend text is correct");
headingEl = legendEl.firstElementChild;
is(headingEl.localName, `h${i}`, `The legend has an h${i}`);
is(headingEl.innerText, "Test label", "The heading has the text");
}
});
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.