-
Notifications
You must be signed in to change notification settings - Fork 2.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Proposal] Invoker Buttons - allowing popover/dialog and more to be invoked without JS #9625
Comments
Nice proposal and explainer! I'm generally supportive of the direction this is going, and I like that you've really expanded the capabilities to include things other than A few small comments related to parts of the proposal:
I think you'd want
Here, I think you likely can add back
I don't think this allows cross-root invokers, except in some cases. Note the complex conditions here.
Thanks for considering what happens with both attributes present. I think it should likely go the other way though - if you have both, respect the new
It should be made clear that this applies to the pair of the invoker element and the target element. For example, a button that opens a popover - to lose interest while using a mouse, you'd have to de-hover both the button and the popover. Overall, awesome proposal! I think it'd be a good idea to chat about this at an OpenUI meeting soon. I don't think I can Agenda+ it with any meaningful label, but would you mind if I get it on the next meeting's agenda? |
Also side note: see w3c/csswg-drafts#9236 for a very related CSS proposal to control the delays associated with gaining and losing "interest". |
would this cover a button that might need to have an associated tooltip, but also opens a popover, popover dialog, or modal dialog? |
How could the platform support having other elements (e.g. Custom Elements) to be invokers as well? |
I'd like us to consider that
I have no idea how
Thanks, added.
Yes that's a much better idea! Added.
Great point! Added
Please, this would be great to discuss further.
Yes I believe so: <button interesttarget="my-tooltip" invokertarget="my-dialog">Tooltip on hover/focus, click to open dialog</button>
It's a good question, and one that seems to largely revolve around this big open question of "how can a custom element be a button". We could add something to This is all to say I don't have a good answer for this, and it might need addressing at a larger scope than this proposal. |
@keithamus so that helps clarify a bit, but i'm still not sure what type of dialog is going to be invoked from that. a non-modal, a non-modal popover (in the top layer) or a modal dialog. I've looked at the InvokeEvent table from the explainer, and i'm seeing an expectation that something is a popover, or a modal dialog, but not a non-modal dialog (popover or not). is the intent for interest largely for tooltips? or is there the possibility that other types of content could be shown/hidden if associated in that way? not for or against whatever answer is given, just want to understand the potential UX ramifications of a dialog or large block of content showing up on someone simply trying to tab through an interface. Understanding this would also result in any accessibility properties that would need to be exposed for the Two other bits:
|
I've ignored the concept of non-modal-non-popover dialogs, and so an
Largely for tooltips. I can't think of a compelling use case that would not be disruptive to folks for anything else, but I'm hoping if there are some, someone will come forward with them.
I think so! It seems like spiritually these issues align. I want this proposal to effectively capture/replicate/explain any built-in interactive element, including
Absolutely please do! It's safe to assume that the whys behind my choices come from a place of ignorance and doing what I think is right without any hard research. |
thanks for all that, @keithamus your response about the non-modal dialog makes sense now with that context - as it didn't initially click to me before that
that was my read as well, which is great. I'll definitely come back and kick the tires on this some more, especially re: the next bit about updating some of the accessibility bits. Which truly thanks for even considering that stuff. It's mostly nits / suggestions to either match reality, or use this as an opportunity to force support / update the spec for a certain attribute. i'll put this on my todo to do another review / make a PR. Thanks! |
One such use case is a nested menu. (Try Google Docs for this exact behavior.) Click to open a menu (e.g. File), then hover over one of the items with a sub-menu. The sub-menu shows up after a slight delay. Note that their keyboard behavior is different - focusing on the item does nothing, and you have to hit the right-arrow to open the sub-menu. |
I suppose if we go with |
thanks @mfreed7 - yes that's a good example, and a good reason why |
So as mentioned above, we discussed this today at OpenUI, and the general tone was that this new proposal is generally a good direction to try to go. It has the flexibility needed to support many different element types, and it's expressive enough to work for many common use cases. One point was made that the What do folks think about this direction? @annevk @ntim @emilio |
General idea seems like the right way to go, though there's probably some bikeshedding to be done around naming and smaller details. |
Great! Do you think it's close enough that someone (@keithamus ??) should start drafting a spec PR? We're happy to prototype for Chromium. I do think we should just tackle My points of bikeshedding:
|
Happy to work on specs and implementations. I think your bike shedding points make sense and I agree with them; I was just being conservative in the explainer 😜 |
I'm not sure if these have already been discussed or not, but these feature requests for |
https://bugs.webkit.org/show_bug.cgi?id=276616 Reviewed by NOBODY (OOPS!). This renames the attributes invoketarget->commandfor and invokeaction->command, as well as renaming the InvokeEvent to CommandEvent, and it's action property to command. It also drops the `auto` action, requiring explicit `command` attribute for each action. Lastly, this also adds the logic preventing invokers from being triggered within a form without an explicit type=button attribute. These changes are based on a set of discussions around the proposals naming and semantics, which starts here: whatwg/html#9625 (comment) and concludes here; whatwg/html#9625 (comment) * LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/idlharness.tentative-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/invokeelement-interface.tentative-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/invokeevent-dispatch-shadow.tentative-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/invokeevent-interface.tentative-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/invoketarget-button-event-dispatch.tentative-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/invoketarget-on-dialog-behavior.tentative-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/invoketarget-on-popover-behavior.tentative-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/invoketarget-on-popover-invalid-behavior.tentative-expected.txt: * Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml: * Source/WebCore/CMakeLists.txt: * Source/WebCore/DerivedSources-input.xcfilelist: * Source/WebCore/DerivedSources-output.xcfilelist: * Source/WebCore/DerivedSources.make: * Source/WebCore/Headers.cmake: * Source/WebCore/SmartPointerExpectations/UncountedLocalVarsCheckerExpectations: * Source/WebCore/Sources.txt: * Source/WebCore/WebCore.xcodeproj/project.pbxproj: * Source/WebCore/bindings/js/WebCoreBuiltinNames.h: * Source/WebCore/dom/CommandEvent.cpp: Renamed from Source/WebCore/dom/InvokeEvent.cpp. (WebCore::CommandEvent::CommandEvent): (WebCore::CommandEvent::create): (WebCore::CommandEvent::createForBindings): (WebCore::CommandEvent::isCommandEvent const): (WebCore::CommandEvent::invoker const): * Source/WebCore/dom/CommandEvent.h: Renamed from Source/WebCore/dom/InvokeEvent.h. * Source/WebCore/dom/CommandEvent.idl: Renamed from Source/WebCore/dom/InvokeEvent.idl. * Source/WebCore/dom/Document.cpp: (WebCore::Document::handlePopoverLightDismiss): * Source/WebCore/dom/Element.cpp: (WebCore::Element::isElementReflectionAttribute): * Source/WebCore/dom/Element.h: (WebCore::Element::isValidCommandType): (WebCore::Element::handleCommandInternal): (WebCore::Element::isValidInvokeAction): Deleted. (WebCore::Element::handleInvokeInternal): Deleted. * Source/WebCore/dom/Event.h: (WebCore::Event::isCommandEvent const): (WebCore::Event::isInputEvent const): (WebCore::Event::isInvokeEvent const): Deleted. * Source/WebCore/dom/EventInterfaces.in: * Source/WebCore/dom/EventNames.json: * Source/WebCore/html/HTMLAttributeNames.in: * Source/WebCore/html/HTMLButtonElement.cpp: (WebCore::HTMLButtonElement::defaultEventHandler): * Source/WebCore/html/HTMLDialogElement.cpp: (WebCore::HTMLDialogElement::isValidCommandType): (WebCore::HTMLDialogElement::handleCommandInternal): (WebCore::HTMLDialogElement::isValidInvokeAction): Deleted. (WebCore::HTMLDialogElement::handleInvokeInternal): Deleted. * Source/WebCore/html/HTMLDialogElement.h: * Source/WebCore/html/HTMLElement.cpp: (WebCore::HTMLElement::isValidCommandType): (WebCore::HTMLElement::handleCommandInternal): (WebCore::HTMLElement::isValidInvokeAction): Deleted. (WebCore::HTMLElement::handleInvokeInternal): Deleted. * Source/WebCore/html/HTMLElement.h: * Source/WebCore/html/HTMLFormControlElement.cpp: (WebCore::HTMLFormControlElement::commandForElement const): (WebCore::HTMLFormControlElement::commandType const): (WebCore::HTMLFormControlElement::handleCommand): (WebCore::HTMLFormControlElement::invokeTargetElement const): Deleted. (WebCore::HTMLFormControlElement::invokeAction const): Deleted. (WebCore::HTMLFormControlElement::handleInvokeAction): Deleted. * Source/WebCore/html/HTMLFormControlElement.h: * Source/WebCore/html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::defaultEventHandler): * Source/WebCore/html/InvokerElement.idl: * Source/WebCore/page/FragmentDirective.h:
…et->commandfor, a=testonly Automatic update from web-platform-tests Rename invokeaction->command, invoketarget->commandfor This also drops the "auto" value, and updates all tests to accommodate these changes, as well as adding more tests for extra robustness. This is the result of a discussion around renaming the attribute which starts around whatwg/html#9625 (comment) and concludes in whatwg/html#9625 (comment). Bug: 349994204 Change-Id: Ic4a5572506e855036c8c1f75aa0de894de026948 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5666705 Reviewed-by: Joey Arhar <[email protected]> Commit-Queue: Keith Cirkel <[email protected]> Cr-Commit-Position: refs/heads/main@{#1325205} -- wpt-commits: 290314c241de3c980fc4eeeb3d19d3fada080b0e wpt-pr: 47064
I would also like to discuss the |
We should discuss this openui/open-ui#1072 too. It's come up before but Tag never said anything during review. |
Most enumerated attribute values (which are not in that table) indeed seem to use hyphens, e.g., |
I think the discussion is what should the requirement for a custom command name be? Currently we use "contains hyphen" which wouldn't work here. |
CSS uses |
I wasn't able to find in the explainer why custom commands are supported at all. I thought the point of this feature was to help with no-JavaScript cases. But those cases require JavaScript to work. They're just adding some extra steps before the JavaScript, which in the end don't save much effort. Would it be possible to omit them, at least from v1? |
…et->commandfor, a=testonly Automatic update from web-platform-tests Rename invokeaction->command, invoketarget->commandfor This also drops the "auto" value, and updates all tests to accommodate these changes, as well as adding more tests for extra robustness. This is the result of a discussion around renaming the attribute which starts around whatwg/html#9625 (comment) and concludes in whatwg/html#9625 (comment). Bug: 349994204 Change-Id: Ic4a5572506e855036c8c1f75aa0de894de026948 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5666705 Reviewed-by: Joey Arhar <[email protected]> Commit-Queue: Keith Cirkel <[email protected]> Cr-Commit-Position: refs/heads/main@{#1325205} -- wpt-commits: 290314c241de3c980fc4eeeb3d19d3fada080b0e wpt-pr: 47064
@domenic from an author’s point of view, allowing custom events helps remove a significant volume of boilerplate JavaScript where click events need to be added/removed to trigger events on other elements. I’ve seen this ‘send this custom command to this element targeted by ID’ HTML pattern in pretty much every HTML-led JS library (Bootstrap, HTMX etc) since the 2000s, and I’ve little doubt much of the underpinnings of the larger libraries/frameworks (React, Vue, Angular etc) could either be replaced behind the scenes or removed altogether thanks to this native API. Secondly, depending on what’s permitted, it could/should provide a route to polyfilling additional native commands (e.g. Thirdly, just like the native events, moving away from Finally, having custom events standardised in the platform means third party web components can adhere to this and listen on some custom events and developers using those components need nothing more than dropping a few HTML attributes in their |
This also drops the "auto" value, and updates all tests to accommodate these changes, as well as adding more tests for extra robustness. This is the result of a discussion around renaming the attribute which starts around whatwg/html#9625 (comment) and concludes in whatwg/html#9625 (comment). Bug: 349994204 Change-Id: Ic4a5572506e855036c8c1f75aa0de894de026948 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5666705 Reviewed-by: Joey Arhar <[email protected]> Commit-Queue: Keith Cirkel <[email protected]> Cr-Commit-Position: refs/heads/main@{#1325205}
https://bugs.webkit.org/show_bug.cgi?id=276616 Reviewed by NOBODY (OOPS!). This renames the attributes invoketarget->commandfor and invokeaction->command, as well as renaming the InvokeEvent to CommandEvent, and it's action property to command. It also drops the `auto` action, requiring explicit `command` attribute for each action. Lastly, this also adds the logic preventing invokers from being triggered within a form without an explicit type=button attribute. These changes are based on a set of discussions around the proposals naming and semantics, which starts here: whatwg/html#9625 (comment) and concludes here; whatwg/html#9625 (comment) * LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/idlharness.tentative-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/invokeelement-interface.tentative-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/invokeevent-dispatch-shadow.tentative-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/invokeevent-interface.tentative-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/invoketarget-button-event-dispatch.tentative-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/invoketarget-on-dialog-behavior.tentative-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/invoketarget-on-popover-behavior.tentative-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/invoketarget-on-popover-invalid-behavior.tentative-expected.txt: * Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml: * Source/WebCore/CMakeLists.txt: * Source/WebCore/DerivedSources-input.xcfilelist: * Source/WebCore/DerivedSources-output.xcfilelist: * Source/WebCore/DerivedSources.make: * Source/WebCore/Headers.cmake: * Source/WebCore/SmartPointerExpectations/UncountedLocalVarsCheckerExpectations: * Source/WebCore/Sources.txt: * Source/WebCore/WebCore.xcodeproj/project.pbxproj: * Source/WebCore/bindings/js/WebCoreBuiltinNames.h: * Source/WebCore/dom/CommandEvent.cpp: Renamed from Source/WebCore/dom/InvokeEvent.cpp. (WebCore::CommandEvent::CommandEvent): (WebCore::CommandEvent::create): (WebCore::CommandEvent::createForBindings): (WebCore::CommandEvent::isCommandEvent const): (WebCore::CommandEvent::invoker const): * Source/WebCore/dom/CommandEvent.h: Renamed from Source/WebCore/dom/InvokeEvent.h. * Source/WebCore/dom/CommandEvent.idl: Renamed from Source/WebCore/dom/InvokeEvent.idl. * Source/WebCore/dom/DeviceOrientationAndMotionAccessController.h: * Source/WebCore/dom/Document.cpp: (WebCore::Document::handlePopoverLightDismiss): * Source/WebCore/dom/Element.cpp: (WebCore::Element::isElementReflectionAttribute): * Source/WebCore/dom/Element.h: (WebCore::Element::isValidCommandType): (WebCore::Element::handleCommandInternal): (WebCore::Element::isValidInvokeAction): Deleted. (WebCore::Element::handleInvokeInternal): Deleted. * Source/WebCore/dom/Event.h: (WebCore::Event::isCommandEvent const): (WebCore::Event::isInputEvent const): (WebCore::Event::isInvokeEvent const): Deleted. * Source/WebCore/dom/EventInterfaces.in: * Source/WebCore/dom/EventNames.json: * Source/WebCore/html/HTMLAttributeNames.in: * Source/WebCore/html/HTMLButtonElement.cpp: (WebCore::HTMLButtonElement::defaultEventHandler): * Source/WebCore/html/HTMLDialogElement.cpp: (WebCore::HTMLDialogElement::isValidCommandType): (WebCore::HTMLDialogElement::handleCommandInternal): (WebCore::HTMLDialogElement::isValidInvokeAction): Deleted. (WebCore::HTMLDialogElement::handleInvokeInternal): Deleted. * Source/WebCore/html/HTMLDialogElement.h: * Source/WebCore/html/HTMLElement.cpp: (WebCore::HTMLElement::isValidCommandType): (WebCore::HTMLElement::handleCommandInternal): (WebCore::HTMLElement::isValidInvokeAction): Deleted. (WebCore::HTMLElement::handleInvokeInternal): Deleted. * Source/WebCore/html/HTMLElement.h: * Source/WebCore/html/HTMLFormControlElement.cpp: (WebCore::HTMLFormControlElement::commandForElement const): (WebCore::HTMLFormControlElement::commandType const): (WebCore::HTMLFormControlElement::handleCommand): (WebCore::HTMLFormControlElement::invokeTargetElement const): Deleted. (WebCore::HTMLFormControlElement::invokeAction const): Deleted. (WebCore::HTMLFormControlElement::handleInvokeAction): Deleted. * Source/WebCore/html/HTMLFormControlElement.h: * Source/WebCore/html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::defaultEventHandler): * Source/WebCore/html/InvokerElement.idl: * Source/WebCore/page/FragmentDirective.h:
https://bugs.webkit.org/show_bug.cgi?id=276616 Reviewed by NOBODY (OOPS!). This renames the attributes invoketarget->commandfor and invokeaction->command, as well as renaming the InvokeEvent to CommandEvent, and it's action property to command. It also drops the `auto` action, requiring explicit `command` attribute for each action. Lastly, this also adds the logic preventing invokers from being triggered within a form without an explicit type=button attribute. These changes are based on a set of discussions around the proposals naming and semantics, which starts here: whatwg/html#9625 (comment) and concludes here; whatwg/html#9625 (comment) * LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/idlharness.tentative-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/invokeelement-interface.tentative-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/invokeevent-dispatch-shadow.tentative-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/invokeevent-interface.tentative-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/invoketarget-button-event-dispatch.tentative-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/invoketarget-on-dialog-behavior.tentative-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/invoketarget-on-popover-behavior.tentative-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/invoketarget-on-popover-invalid-behavior.tentative-expected.txt: * LayoutTests/platform/ios/imported/w3c/web-platform-tests/html/semantics/invokers/invoketarget-on-dialog-behavior.tentative-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/invoketarget-on-dialog-behavior.tentative-expected.txt. * Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml: * Source/WebCore/CMakeLists.txt: * Source/WebCore/DerivedSources-input.xcfilelist: * Source/WebCore/DerivedSources-output.xcfilelist: * Source/WebCore/DerivedSources.make: * Source/WebCore/Headers.cmake: * Source/WebCore/SmartPointerExpectations/UncountedLocalVarsCheckerExpectations: * Source/WebCore/Sources.txt: * Source/WebCore/WebCore.xcodeproj/project.pbxproj: * Source/WebCore/bindings/js/WebCoreBuiltinNames.h: * Source/WebCore/dom/CommandEvent.cpp: Renamed from Source/WebCore/dom/InvokeEvent.cpp. (WebCore::CommandEvent::CommandEvent): (WebCore::CommandEvent::create): (WebCore::CommandEvent::createForBindings): (WebCore::CommandEvent::isCommandEvent const): (WebCore::CommandEvent::invoker const): * Source/WebCore/dom/CommandEvent.h: Renamed from Source/WebCore/dom/InvokeEvent.h. * Source/WebCore/dom/CommandEvent.idl: Renamed from Source/WebCore/dom/InvokeEvent.idl. * Source/WebCore/dom/DeviceOrientationAndMotionAccessController.h: * Source/WebCore/dom/Document.cpp: (WebCore::Document::handlePopoverLightDismiss): * Source/WebCore/dom/Element.cpp: (WebCore::Element::isElementReflectionAttribute): * Source/WebCore/dom/Element.h: (WebCore::Element::isValidCommandType): (WebCore::Element::handleCommandInternal): (WebCore::Element::isValidInvokeAction): Deleted. (WebCore::Element::handleInvokeInternal): Deleted. * Source/WebCore/dom/Event.h: (WebCore::Event::isCommandEvent const): (WebCore::Event::isInputEvent const): (WebCore::Event::isInvokeEvent const): Deleted. * Source/WebCore/dom/EventInterfaces.in: * Source/WebCore/dom/EventNames.json: * Source/WebCore/html/HTMLAttributeNames.in: * Source/WebCore/html/HTMLButtonElement.cpp: (WebCore::HTMLButtonElement::defaultEventHandler): * Source/WebCore/html/HTMLDialogElement.cpp: (WebCore::HTMLDialogElement::isValidCommandType): (WebCore::HTMLDialogElement::handleCommandInternal): (WebCore::HTMLDialogElement::isValidInvokeAction): Deleted. (WebCore::HTMLDialogElement::handleInvokeInternal): Deleted. * Source/WebCore/html/HTMLDialogElement.h: * Source/WebCore/html/HTMLElement.cpp: (WebCore::HTMLElement::isValidCommandType): (WebCore::HTMLElement::handleCommandInternal): (WebCore::HTMLElement::isValidInvokeAction): Deleted. (WebCore::HTMLElement::handleInvokeInternal): Deleted. * Source/WebCore/html/HTMLElement.h: * Source/WebCore/html/HTMLFormControlElement.cpp: (WebCore::HTMLFormControlElement::commandForElement const): (WebCore::HTMLFormControlElement::commandType const): (WebCore::HTMLFormControlElement::handleCommand): (WebCore::HTMLFormControlElement::invokeTargetElement const): Deleted. (WebCore::HTMLFormControlElement::invokeAction const): Deleted. (WebCore::HTMLFormControlElement::handleInvokeAction): Deleted. * Source/WebCore/html/HTMLFormControlElement.h: * Source/WebCore/html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::defaultEventHandler): * Source/WebCore/html/InvokerElement.idl: * Source/WebCore/page/FragmentDirective.h:
https://bugs.webkit.org/show_bug.cgi?id=276616 Reviewed by Anne van Kesteren. This renames the attributes invoketarget->commandfor and invokeaction->command, as well as renaming the InvokeEvent to CommandEvent, and it's action property to command. It also drops the `auto` action, requiring explicit `command` attribute for each action. Lastly, this also adds the logic preventing invokers from being triggered within a form without an explicit type=button attribute. These changes are based on a set of discussions around the proposals naming and semantics, which starts here: whatwg/html#9625 (comment) and concludes here; whatwg/html#9625 (comment) * LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/idlharness.tentative-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/invokeelement-interface.tentative-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/invokeevent-dispatch-shadow.tentative-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/invokeevent-interface.tentative-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/invoketarget-button-event-dispatch.tentative-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/invoketarget-on-dialog-behavior.tentative-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/invoketarget-on-popover-behavior.tentative-expected.txt: * LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/invoketarget-on-popover-invalid-behavior.tentative-expected.txt: * LayoutTests/platform/ios/imported/w3c/web-platform-tests/html/semantics/invokers/invoketarget-on-dialog-behavior.tentative-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/html/semantics/invokers/invoketarget-on-dialog-behavior.tentative-expected.txt. * Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml: * Source/WebCore/CMakeLists.txt: * Source/WebCore/DerivedSources-input.xcfilelist: * Source/WebCore/DerivedSources-output.xcfilelist: * Source/WebCore/DerivedSources.make: * Source/WebCore/Headers.cmake: * Source/WebCore/SmartPointerExpectations/UncountedLocalVarsCheckerExpectations: * Source/WebCore/Sources.txt: * Source/WebCore/WebCore.xcodeproj/project.pbxproj: * Source/WebCore/bindings/js/WebCoreBuiltinNames.h: * Source/WebCore/dom/CommandEvent.cpp: Renamed from Source/WebCore/dom/InvokeEvent.cpp. (WebCore::CommandEvent::CommandEvent): (WebCore::CommandEvent::create): (WebCore::CommandEvent::createForBindings): (WebCore::CommandEvent::isCommandEvent const): (WebCore::CommandEvent::invoker const): * Source/WebCore/dom/CommandEvent.h: Renamed from Source/WebCore/dom/InvokeEvent.h. * Source/WebCore/dom/CommandEvent.idl: Renamed from Source/WebCore/dom/InvokeEvent.idl. * Source/WebCore/dom/DeviceOrientationAndMotionAccessController.h: * Source/WebCore/dom/Document.cpp: (WebCore::Document::handlePopoverLightDismiss): * Source/WebCore/dom/Element.cpp: (WebCore::Element::isElementReflectionAttribute): * Source/WebCore/dom/Element.h: (WebCore::Element::isValidCommandType): (WebCore::Element::handleCommandInternal): (WebCore::Element::isValidInvokeAction): Deleted. (WebCore::Element::handleInvokeInternal): Deleted. * Source/WebCore/dom/Event.h: (WebCore::Event::isCommandEvent const): (WebCore::Event::isInputEvent const): (WebCore::Event::isInvokeEvent const): Deleted. * Source/WebCore/dom/EventInterfaces.in: * Source/WebCore/dom/EventNames.json: * Source/WebCore/html/HTMLAttributeNames.in: * Source/WebCore/html/HTMLButtonElement.cpp: (WebCore::HTMLButtonElement::defaultEventHandler): * Source/WebCore/html/HTMLDialogElement.cpp: (WebCore::HTMLDialogElement::isValidCommandType): (WebCore::HTMLDialogElement::handleCommandInternal): (WebCore::HTMLDialogElement::isValidInvokeAction): Deleted. (WebCore::HTMLDialogElement::handleInvokeInternal): Deleted. * Source/WebCore/html/HTMLDialogElement.h: * Source/WebCore/html/HTMLElement.cpp: (WebCore::HTMLElement::isValidCommandType): (WebCore::HTMLElement::handleCommandInternal): (WebCore::HTMLElement::isValidInvokeAction): Deleted. (WebCore::HTMLElement::handleInvokeInternal): Deleted. * Source/WebCore/html/HTMLElement.h: * Source/WebCore/html/HTMLFormControlElement.cpp: (WebCore::HTMLFormControlElement::commandForElement const): (WebCore::HTMLFormControlElement::commandType const): (WebCore::HTMLFormControlElement::handleCommand): (WebCore::HTMLFormControlElement::invokeTargetElement const): Deleted. (WebCore::HTMLFormControlElement::invokeAction const): Deleted. (WebCore::HTMLFormControlElement::handleInvokeAction): Deleted. * Source/WebCore/html/HTMLFormControlElement.h: * Source/WebCore/html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::defaultEventHandler): * Source/WebCore/html/InvokerElement.idl: * Source/WebCore/page/FragmentDirective.h: Canonical link: https://commits.webkit.org/281345@main
This issue/PR was just discussed at the OpenUI/WHATWG/CSSWG form controls task force meeting, in the context of a more general discussion of the "tooltip" use case. The notes are located here: |
@keithamus you mentioned that the PR is up-to-date, but I don't think the PR incorporates restricting the feature to the
I did not check if other decisions are incorporated, but it would be good to double check all of that. |
@keithamus well in the index the attributes are listed as applying to both |
This doesn't make sense to me. It introduces a behavior difference between a browser implementing
|
@zcorpan we want to eventually change the default of the |
This adds the commandfor & command attributes and a "command" event using the CommandEvent interface. Button activation checks if the button has a "commandfor" target and if so performs invoker command behaviour depending on command and the target element. This introduces 1 new IDLs: - CommandEvent: A new event that has `action` and `source`. And extends the HTMLButtonElement IDL to introduce `command` and `commandfor` Things NOT covered in this commit that are included in the proposal (whatwg#9625): - Default per element behaviours for anything beyond popover & dialog, this will be dealt with in subsequent individual commits. - `interestaction` and `interesttarget`.
This adds the commandfor & command attributes and a "command" event using the CommandEvent interface. Button activation checks if the button has a "commandfor" target and if so performs invoker command behaviour depending on command and the target element. This introduces 1 new IDLs: - CommandEvent: A new event that has `action` and `source`. And extends the HTMLButtonElement IDL to introduce `command` and `commandfor` Things NOT covered in this commit that are included in the proposal (whatwg#9625): - Default per element behaviours for anything beyond popover & dialog, this will be dealt with in subsequent individual commits. - `interestaction` and `interesttarget`.
To elaborate on the above comment, changing the default was discussed in #10441. This means that when the When the |
Following on from #3567 and #9456 where we tried to specify a way to open dialogs without JavaScript, @nt1m and @smaug---- raised concerns that the attribute was not extensible.
I've taken the feedback, and instead I'm proposing a new set of attributes that allow for opening dialogs and popovers, and also allow for extensibility for other interactions. I'll quote the summary:
I'm soliciting feedback on this, and if we think this is more tenable than #9456 I'm happy to go forward with specs/implementations.
The text was updated successfully, but these errors were encountered: