diff --git a/source b/source index e0db066a971..03bbd0e6103 100644 --- a/source +++ b/source @@ -1845,6 +1845,14 @@ a.setAttribute('href', 'https://example.com/'); // change the content attribute
  • If removedNode's popover attribute is not in the No Popover state, then run the hide popover algorithm given removedNode, false, false, false, and null.

  • + +
  • If removedNode is an HTML element with a + non-null active interest target, then reset interest state for + removedNode.

  • + +
  • If removedNode is an element with a non-null active interest + source, then reset interest state for removedNode's active + interest source.

  • The moving steps for the HTML Standard, given @@ -1861,6 +1869,16 @@ a.setAttribute('href', 'https://example.com/'); // change the content attribute form owner and movedNode and its form owner are no longer in the same tree, then reset the form owner of movedNode.

    + +
  • If movedNode is an HTML element with a + non-null active interest target and movedNode and its active + interest target are no longer in the same tree, then reset interest + state for movedNode.

  • + +
  • If movedNode is an element with a non-null active interest source + and movedNode and its active interest source are no longer in the same + tree, then reset interest state for movedNode's active + interest source.

  • A HTMLDivElement : HTMLElement {

    hreflang
    type
    referrerpolicy
    +
    interestfor
    Accessibility considerations:
    If the element has an href attribute: HTMLAnchorElement : HTMLElement { // also has obsolete members }; -HTMLAnchorElement includes HTMLHyperlinkElementUtils; +HTMLAnchorElement includes HTMLHyperlinkElementUtils; +HTMLAnchorElement includes InterestInvokerElement;
    Uses HTMLAnchorElement.
    @@ -42055,6 +42075,7 @@ interface HTMLMapElement : HTMLElement {
    ping
    rel
    referrerpolicy
    +
    interestfor
    Accessibility considerations:
    If the element has an href attribute: HTMLAreaElement : HTMLElement { // also has obsolete members }; -HTMLAreaElement includes HTMLHyperlinkElementUtils; +HTMLAreaElement includes HTMLHyperlinkElementUtils; +HTMLAreaElement includes InterestInvokerElement;
    Uses HTMLAreaElement.
    @@ -53507,6 +53529,7 @@ You cannot submit this form when the field is incorrect.
    name
    popovertarget
    popovertargetaction
    +
    interestfor
    type
    value
    HTMLButtonElement : HTMLElement { readonly attribute NodeList labels; }; -HTMLButtonElement includes PopoverInvokerElement; +HTMLButtonElement includes PopoverInvokerElement; +HTMLButtonElement includes InterestInvokerElement;
    Uses HTMLButtonElement.
    @@ -81624,13 +81648,21 @@ dictionary CommandEventInit : EventInit { target be null.

  • -

    If blur event target is not null, fire a focus event - named blur at blur event target, with - related blur target as the related target.

    +

    If blur event target is not null:

    -

    In some cases, e.g., if entry is - an area element's shape, a scrollable region, or a viewport, no - event is fired.

    +
      +
    1. +

      Fire a focus event named blur at blur + event target, with related blur target as the related target.

      + +

      In some cases, e.g., if entry + is an area element's shape, a scrollable region, or a viewport, no + event is fired.

      +
    2. + +
    3. Handle interest change for blur event target and + false.

    4. +
  • @@ -81674,12 +81706,21 @@ dictionary CommandEventInit : EventInit { focus target be null.

  • -

    If focus event target is not null, fire a focus event - named focus at focus event target, with - related focus target as the related target.

    +

    If focus event target is not null:

    + +
      +
    1. +

      Fire a focus event named focus at + focus event target, with related focus target as the related + target.

      + +

      In some cases, e.g., if entry is an area + element's shape, a scrollable region, or a viewport, no event is fired.

      +
    2. -

      In some cases, e.g. if entry is an area - element's shape, a scrollable region, or a viewport, no event is fired.

      +
    3. Handle interest change for focus event target and + true.

    4. +
  • @@ -87979,6 +88020,340 @@ dictionary DragEventInit : MouseEventInit { +

    Interest invokers

    + +

    An interest invoker is an a, area, or button + element with the interestfor attribute set.

    + +

    The interestfor attribute

    + +

    The interestfor + attribute allows authors to set up an invoker relationship between the triggering element and a + separate target element such as a popover. With this arrangement, when the user shows interest in + the triggering element (e.g., by hovering or focusing it), the target element will have an interest event fired on it. If the target is a popover with a + popover visibility state of hidden, this + will show the popover. When the user loses interest (e.g., by no longer hovering or focusing the + invoker or target) a loseinterest event is fired. If the + target is a popover it will be hidden.

    + +

    If specified, the interestfor attribute value must be + the ID of an element in the same tree as the + element with the interestfor attribute.

    + + DOM interface: +
    interface mixin InterestInvokerElement {
    +  [CEReactions] attribute Element? interestForElement;
    +};
    + +

    The interestForElement IDL attribute must + reflect the interestfor attribute.

    + +
    +

    The following demonstrates how one might show a tooltip for a button using the + interestfor attribute to associate the button with + a popover representing the tooltip.

    + +
    <button interestfor=tooltip>
    + Click me
    +</button>
    +
    +<div popover=hint id=tooltip>
    + I will appear when the user shows interest in the button
    +</div>
    +
    + +

    Every HTML element has an element-or-null active + interest target, initially null.

    + +

    Every HTML element has a pending interest change + handle, which is a unique internal value or null, initially null.

    + +

    The pending interest change handle is used to abort steps that run + after a timeout.

    + +

    Every element has an element-or-null active interest source, initially null.

    + +

    When non-null, an element's active interest target is a cached result + of getting the interestfor-associated element and the target's active interest + source points back to the source. This is a convenience that makes it easier to handle + tree modifications that break the association between source and target.

    + +

    The InterestEvent interface

    + +
    [Exposed=Window]
    +interface InterestEvent : Event {
    +  constructor(DOMString type, InterestEventInit eventInitDict);
    +  readonly attribute Element source;
    +};
    +
    +dictionary InterestEventInit : EventInit {
    +  required Element source;
    +};
    + +
    +
    event.source
    + +
    +

    Set to the interest invoker that triggered interest.

    +
    +
    + +

    The source attribute must return the value it was + initialized to.

    + +

    Processing model

    + +

    To handle interest change for an element element and a boolean + show:

    + +
      +
    1. +

      If element's active interest source is not null, handle + interest change for element's active interest source and + show.

      + +

      User interactions such as hovering or focusing an interest target have the same + effect as interactions with the invoker. This prevents interest from being lost while the user + is interacting with the target. Since an element can simultaneously be both an invoker and a + target, the following steps are still run.

      +
    2. + +
    3. If element is not an interest invoker, then return.

    4. + +
    5. Let global be element's relevant global object.

    6. + +
    7. Let target be the result of running element's get the interestfor-associated + element.

    8. + +
    9. If target is null, then return.

    10. + +
    11. Let delayProperty be 'interest-show-delay' if show is true, + otherwise 'interest-hide-delay'.

    12. + +
    13. Let delay be the computed value of delayProperty on + element, interpreted as a number of milliseconds.

    14. + +
    15. If delay is negative, infinite, or NaN, then return.

    16. + +
    17. Let uniqueHandle be null.

    18. + +
    19. +

      Let task be a task that runs the following substeps:

      + +
        +
      1. Assert: uniqueHandle is a unique internal value, + not null.

      2. + +
      3. If uniqueHandle is not in element's pending interest + change handle, then abort these steps.

      4. + +
      5. Set element's pending interest change handle to null.

      6. + +
      7. If element is not connected, then abort these steps.

      8. + +
      9. If element's node document is not fully active, + then abort these steps.

      10. + +
      11. If the result of running element's get the interestfor-associated element is not + target, then abort these steps.

      12. + +
      13. If show is true, then gain interest in element with + target.

      14. + +
      15. Otherwise, lose interest in element with + target.

      16. +
      + +
    20. Let completionStep be an algorithm step which queues a global task on the timer task source given + global to run task.

    21. + +
    22. Set uniqueHandle to the result of running steps after a timeout given global, "interest change", timeout, and + completionStep.

    23. + +
    24. Set element's pending interest change handle to + uniqueHandle.

    25. +
    + +

    To gain interest in an HTML element + invoker given an element target:

    + +
      +
    1. Assert: invoker is an a, area, or button + element.

    2. + +
    3. Assert: the result of running invoker's get the interestfor-associated + element is target.

    4. + +
    5. +

      If invoker's active interest target is not null:

      + +
        +
      1. +

        If invoker's active interest target is target, then set + invoker's pending interest change handle to null and return.

        + +

        Interest has already been gained for the correct target and there is nothing + to do except to cancel pending tasks.

        +
      2. + +
      3. +

        If the result of losing interest in invoker + given invoker's active interest target is false, then return.

        + +

        This fires the loseinterest event, which + could be canceled.

        +
      +
    6. + +
    7. Assert: invoker's active interest target is null.

    8. + +
    9. +

      If target's active interest source is not null:

      + +
        +
      1. +

        If the result of losing interest in target's + active interest source given target is false, then return.

        + +

        This fires the loseinterest event, which + could be canceled.

        +
      2. +
      +
    10. + +
    11. Assert: target's active interest source is null.

    12. + +
    13. Let continue be the result of firing an + event named interest at target, using + InterestEvent, with the cancelable + attribute initialized to true, and the source + attribute initialized to invoker.

    14. + +
    15. If continue is false, then return.

    16. + +
    17. Set invoker's active interest target to + target.

    18. + +
    19. Set target's active interest source to + invoker.

    20. + +
    21. If target's popover visibility state is + hidden, then run show popover given + target, false, and invoker.

    22. +
    + +

    To lose interest in an HTML element + invoker given an element target:

    + +
      +
    1. Assert: invoker is an a, area, or button + element.

    2. + +
    3. Assert: the result of running invoker's get the interestfor-associated + element is target.

    4. + +
    5. Let continue be the result of firing an + event named loseinterest at target, using + InterestEvent, with the cancelable and + composed attributes initialized to true, and the + source attribute initialized to + invoker.

    6. + +
    7. If continue is false, then return false.

    8. + +
    9. Reset interest state for invoker.

    10. + +
    11. If target's popover visibility state is showing, then hide + popover given invoker, false, true, and false.

    12. + +
    13. Return true.

    14. +
    + +

    To reset interest state for an HTML element + invoker:

    + +
      +
    1. Let target be invoker's active interest + target.

    2. + +
    3. Set invoker's active interest target to null.

    4. + +
    5. Set target's active interest source to null.

    6. + +
    7. Set invoker's pending interest change handle to null.

    8. +
    + +

    The following attribute change + steps, given element, localName, oldValue, + value, and namespace, are used for a, area, and + button elements:

    + +
      +
    1. If namespace is not null, then return.

    2. + +
    3. If localName is not interestfor, then + return.

    4. + +
    5. If value is oldValue, then return.

    6. + +
    7. If element's active interest target is not null, then reset + interest state for element.

    8. +
    + +

    The following attribute change + steps, given element, localName, oldValue, + value, and namespace, are used for all elements:

    + +
      +
    1. If namespace is not null, then return.

    2. + +
    3. If localName is not id, then return.

    4. + +
    5. If value is oldValue, then return.

    6. + +
    7. If element's active interest source is not null, then reset + interest state for element's active interest source.

    8. +
    + +

    User interaction

    + +

    When the user designates an element + element with a pointing device, the user agent must queue a task on the + user interaction task source to handle interest change for + element and true.

    + +

    When the user no longer designates an element + element with a pointing device, the user agent must queue a task on the + user interaction task source to handle interest change for + element and false.

    + +

    The tasks queued on the user interaction task source in this section must be + queued after any tasks that fire events such as mouseover + and mouseout or that affect the :hover pseudo-class.

    + +

    This means that when the interest and loseinterest events fire, any event handlers see the state after + the change.

    + +

    Keyboard interactions are handled in the focus update steps.

    + +

    For input modalities other than pointing devices and keyboards, the user agent should provide + the ability for the user to indicate interest.

    +

    Loading web pages

    @@ -144718,6 +145093,13 @@ interface External { script Integrity metadata used in Subresource Integrity checks SRI Text + + interestfor + a; + area; + button + Targets another element to be invoked when the user shows interest + ID* is HTML elements @@ -146520,6 +146902,12 @@ INSERT INTERFACES HERE Elements Fired when the user changes the contenteditable element's content, or the form control's value. See also the change event for form controls. + + interest + InterestEvent + Elements + Fired at the target of an interest invoker when the user shows interest in the invoker. + invalid Event @@ -146538,6 +146926,12 @@ INSERT INTERFACES HERE Window, elements Fired at the Window when the document has finished loading; fired at an element containing a resource (e.g. img, embed) when its resource has finished loading + + loseinterest + InterestEvent + Elements + Fired at the target of an interest invoker when the user loses interest in the invoker. + message MessageEvent