LibWeb/HTML: Add the command attribute to the button element

This commit adds the getter and setter for the command attribute to the
button element. Executing commands is not implemented yet.
This commit is contained in:
Glenn Skrzypczak 2025-04-04 01:16:44 +02:00 committed by Tim Ledbetter
commit b2db07f002
Notes: github-actions[bot] 2025-04-18 11:11:19 +00:00
6 changed files with 140 additions and 0 deletions

View file

@ -0,0 +1,21 @@
Harness status: OK
Found 16 tests
16 Pass
Pass invoker should reflect properly
Pass invoker should reflect show-modal properly
Pass invoker should reflect toggle-popover properly
Pass invoker should reflect hide-popover properly
Pass invoker should reflect show-popover properly
Pass invoker should reflect close properly
Pass invoker should reflect --custom properly
Pass invoker should reflect odd cased sHoW-MoDaL properly - as show-modal
Pass invoker should reflect odd cased tOgGlE-pOpOvEr properly - as toggle-popover
Pass invoker should reflect odd cased hIdE-pOpOvEr properly - as hide-popover
Pass invoker should reflect odd cased sHoW-pOpOvEr properly - as show-popover
Pass invoker should reflect odd cased ClOsE properly - as close
Pass invoker should reflect odd cased --cUsToM properly - as --cUsToM
Pass invoker should reflect the invalid value "invalid" as the empty string
Pass invoker should reflect the invalid value "show-invalid" as the empty string
Pass invoker should reflect the invalid value "foo-bar" as the empty string

View file

@ -0,0 +1,42 @@
<!doctype html>
<meta charset="utf-8" />
<meta name="author" title="Keith Cirkel" href="mailto:wpt@keithcirkel.co.uk" />
<meta name="timeout" content="long" />
<link rel="help" href="https://open-ui.org/components/invokers.explainer/" />
<script src="../../../../resources/testharness.js"></script>
<script src="../../../../resources/testharnessreport.js"></script>
<script src="../../../../resources/testdriver.js"></script>
<script src="../../../../resources/testdriver-actions.js"></script>
<script src="../../../../resources/testdriver-vendor.js"></script>
<script src="resources/invoker-utils.js"></script>
<div id="invokee"></div>
<button id="invokerbutton" commandfor="invokee"></button>
<script>
['', 'show-modal', 'toggle-popover', 'hide-popover', 'show-popover', 'close', '--custom'].forEach(command => {
test(function (t) {
invokerbutton.command = command
assert_equals(invokerbutton.command, command, `invoker should reflect ${command} properly`);
}, `invoker should reflect ${command} properly`);
});
[
['sHoW-MoDaL', 'show-modal'],
['tOgGlE-pOpOvEr', 'toggle-popover'],
['hIdE-pOpOvEr', 'hide-popover'],
['sHoW-pOpOvEr', 'show-popover'],
['ClOsE', 'close'],
['--cUsToM', '--cUsToM'
]].forEach(([cased, command]) => {
test(function (t) {
invokerbutton.command = cased
assert_equals(invokerbutton.command, command, `invoker should reflect odd cased ${cased} properly - as ${command}`);
}, `invoker should reflect odd cased ${cased} properly - as ${command}`);
});
['invalid', 'show-invalid', 'foo-bar'].forEach(command => {
test(function (t) {
invokerbutton.command = command
assert_equals(invokerbutton.command, '', `invoker should reflect the invalid value "${command}" as the empty string`);
}, `invoker should reflect the invalid value "${command}" as the empty string`);
});
</script>

View file

@ -0,0 +1,27 @@
function waitForRender() {
return new Promise(resolve => requestAnimationFrame(() => requestAnimationFrame(resolve)));
}
async function clickOn(element) {
await waitForRender();
let rect = element.getBoundingClientRect();
let actions = new test_driver.Actions();
// FIXME: Switch to pointerMove(0, 0, {origin: element}) once
// https://github.com/web-platform-tests/wpt/issues/41257 is fixed.
await actions
.pointerMove(Math.round(rect.x + rect.width / 2), Math.round(rect.y + rect.height / 2), {})
.pointerDown({button: actions.ButtonType.LEFT})
.pointerUp({button: actions.ButtonType.LEFT})
.send();
await waitForRender();
}
async function hoverOver(element) {
await waitForRender();
let rect = element.getBoundingClientRect();
let actions = new test_driver.Actions();
// FIXME: Switch to pointerMove(0, 0, {origin: element}) once
// https://github.com/web-platform-tests/wpt/issues/41257 is fixed.
await actions
.pointerMove(Math.round(rect.x + rect.width / 2), Math.round(rect.y + rect.height / 2), {})
.send();
await waitForRender();
}