diff --git a/source b/source index a92d86863c1..7c5444592cf 100644 --- a/source +++ b/source @@ -1864,6 +1864,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.
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.
The algorithm to HTMLDivElement : HTMLElement {
hreflangtypereferrerpolicyinterestforhref attribute: HTMLAnchorElement : HTMLElement {
// also has obsolete members
};
-HTMLAnchorElement includes HTMLHyperlinkElementUtils;
+HTMLAnchorElement includes HTMLHyperlinkElementUtils;
+HTMLAnchorElement includes InterestForAttribute;
HTMLAnchorElement.pingrelreferrerpolicyinterestforhref attribute: HTMLAreaElement : HTMLElement {
// also has obsolete members
};
-HTMLAreaElement includes HTMLHyperlinkElementUtils;
+HTMLAreaElement includes HTMLHyperlinkElementUtils;
+HTMLAreaElement includes InterestForAttribute;
HTMLAreaElement.namepopovertargetpopovertargetactioninterestfortypevalueHTMLButtonElement.:interest-sourceThe :interest-source pseudo-class
+ must match any HTML element whose active interest
+ target is non-null.
:interest-targetThe :interest-target pseudo-class
+ must match any element whose active interest source is non-null.
:targetIf 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.
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.
Handle interest change for blur event target and + false.
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:
+ +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.
In some cases, e.g., if entry is an area
+ element's shape, a scrollable region, or a viewport, no event is fired.
Handle interest change for focus event target and + true.
For each element source in document's active interest sources + set, in reverse order:
+ +Lose interest in source given source's active + interest target.
If document is not fully active, then return.
+ +This step is necessary because loseinterest event listeners might have caused
+ document to no longer be fully active.
Let closedSomething be the result of processing close watchers on document's relevant global object.
Set element's popover close watcher to null.
If element's active interest source is not null, then + lose interest in element's active interest source + with element.
interestfor attributeThe interestfor attribute allows authors to set up a
+ 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 interest source or target) a loseinterest event is fired. If the target is a popover with a
+ popover visibility state of showing, 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.
interface mixin InterestForAttribute {
+ [CEReactions, Reflect="interestfor"] attribute Element? interestForElement;
+};
+
+ 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>
+ Hover or focus me to show the tooltip
+</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 Document has an active interest sources set, a set of
+ HTML elements, initially the empty set.
The active interest sources set holds all of the HTML + elements in the document that have a non-null active interest target, in the + order that interest was gained.
+ +Every HTML element has a pending gain interest + handle and a pending lose interest handle, which are both a unique internal + value or null, initially null.
+ +These handles are used to abort steps that run after a timeout, effectively + canceling the tasks.
+ +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.
InterestEvent interface[Exposed=Window]
+interface InterestEvent : Event {
+ constructor(DOMString type, InterestEventInit eventInitDict);
+ readonly attribute Element source;
+};
+
+dictionary InterestEventInit : EventInit {
+ required Element source;
+};
+
+ event.sourceSet to the element that triggered interest.
+The source attribute must return the value it was
+ initialized to.
To handle interest change for an element element and a boolean + show:
+ +If show is true:
+ +For each element upstream in element's recursive active + interest sources:
+ +Set upstream's pending lose interest handle to null.
+ +This effectively cancels any pending task to lose interest for + upstream. User interactions such as hovering or focusing an interest target or + its descendants prevent those tasks for running, so that interest isn't lost while the user + is interacting with the target.
+If element is not an a, area, or button
+ element, then return.
Let target be the result of running element's get the interestfor-associated
+ element.
If target is null, then return.
Let global be element's relevant global + object.
Let delayProperty be 'interest-delay-start' if show is + true, otherwise 'interest-delay-end'.
Let delay be the computed value of delayProperty on + element, interpreted as a number of milliseconds.
If delay is negative, infinite, or NaN, then return.
Let uniqueHandle be null.
Let task be null.
If show is true, set task to a task that runs the following + substeps:
+ +Assert: uniqueHandle is a unique internal value, + not null.
If uniqueHandle is not element's pending gain interest + handle, then abort these steps.
Set element's pending gain interest handle to null.
If the interest ready check for element and target + returns false, then abort these steps.
Gain interest in element with target.
Otherwise, set task to a task that runs the following + substeps:
+ +Assert: uniqueHandle is a unique internal value, + not null.
If uniqueHandle is not element's pending lose interest + handle, then abort these steps.
Set element's pending lose interest handle to null.
If the interest ready check for element and target + returns false, then abort these steps.
Lose interest in element with target.
Assert: task is a task.
Let completionStep be an algorithm step which queues a global task on the timer task source given + global to run task.
Set uniqueHandle to the result of running steps after a timeout given global, "interest change", timeout, and
+ completionStep.
If show is true, set element's pending gain interest + handle to uniqueHandle.
Otherwise, set element's pending lose interest handle to + uniqueHandle.
To find the recursive active interest sources given an element element, + perform the following steps. They return a list of zero or more elements.
+ +Let sources be an empty list.
Let pending be an empty queue.
Enqueue element in pending.
While pending is not empty:
+ +Let current be the result of dequeuing from + pending.
While current is not null:
+ +Let source be current's active interest + source.
If source is not null, source is not element, and + sources does not contain + source:
+ +Append source to + sources.
Enqueue source in pending.
Set current to current's parent element.
Return sources.
The recursive active interest sources algorithm finds all elements + whose active interest target contains (inclusively) a given element, as well as any + elements that indirect interest sources through the same condition applied recursively. In effect, + all "upstream" interest sources in a graph of active interest target relations are found. Because + cycles are possible, it is defined iteratively to avoid infinite loops.
+ +The interest ready check for an HTML element + source and an element target returns true if all of the following are true, + and false otherwise:
+ +source is connected.
source's node document is fully active.
The result of running source's get the interestfor-associated element is
+ target.
To gain interest in an HTML element + source given an element target:
+ +Assert: source is an a, area, or button
+ element.
Assert: the result of running source's get the interestfor-associated element is
+ target.
If source's active interest target is not null:
+ +If source's active interest target is target, then set + source's pending lose interest 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.
+If the result of losing interest in source + given source's active interest target is false, then return.
+ +This fires the loseinterest event.
If the interest ready check for source and target + returns false, then return.
Assert: source's active interest target is null.
If target's active interest source is not null:
+ +If the result of losing interest in target's + active interest source given target is false, then return.
+ +This fires the loseinterest event.
If the interest ready check for source and target + returns false, then return.
Assert: target's active interest source is null.
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 source.
If continue is false, then return.
If the interest ready check for source and target + returns false, then return.
Set source's active interest target to target.
Append source to source's + node document's active interest sources set.
Set target's active interest source to source.
If target's popover visibility state is + hidden, then run show popover given + target, false, and source.
To lose interest in an HTML element + source given an element target:
+ +Assert: source is an a, area, or button
+ element.
Assert: the result of running source's get the interestfor-associated element is
+ target.
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
+ source.
If continue is false, then return false.
Reset interest state for source.
If target's popover visibility state is showing, then hide + popover given source, false, true, and false.
Return true.
To reset interest state for an HTML element + source:
+ +Let target be source's active interest + target.
Set source's active interest target to null.
Remove source from source's + node document's active interest sources set.
Set target's active interest source to null.
Set source's pending gain interest handle to null.
Set source's pending lose interest handle to null.
The following attribute change
+ steps, given element, localName, oldValue,
+ value, and namespace, are used for a, area, and
+ button elements:
If namespace is not null, then return.
If localName is not interestfor, then
+ return.
If value is oldValue, then return.
If element's active interest target is not null, then reset + interest state for element.
The following attribute change + steps, given element, localName, oldValue, + value, and namespace, are used for all elements:
+ +If namespace is not null, then return.
If localName is not id, then return.
If value is oldValue, then return.
If element's active interest source is not null, then reset + interest state for element's active interest source.
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 above must be queued after
+ any tasks that fire events such as mouseover and mouseout, or that affect the :hover pseudo-class.
Canceling events such as mouseover and mouseout does not prevent the above tasks from running.
When the user long presses an element element on a touch device, the user agent must + queue a task on the user interaction task source to run the following + steps:
+ +Fire any relevant events, per UI Events or other relevant specifications. + UIEVENTS
Let event be the Event object for any contextmenu event fired, or null if no such event was
+ fired.
Let showContextMenu be true if event is not null and its + canceled flag is not set.
If element is not an a, area, or button
+ element, then abort these steps.
Let target be the result of running element's get the interestfor-associated
+ element.
If target is null, then abort these steps.
Let gainInterestIfReady be the following step:
+ +If the interest ready check for element and target + returns true, then gain interest in element with + target.
If showContextMenu is true, then provide an option in the context menu that, + when selected, queues a task on the user interaction + task source to run gainInterestIfReady.
Otherwise, run gainInterestIfReady.
+ +There is no delay before gaining interest as the long press gesture already has + an inherent delay.
+Keyboard interactions are handled in the focus update steps.
+ +For input modalities other than pointing devices, touch, and keyboards, the user agent should + provide the ability for the user to indicate interest.
+script
interestfor
+ a;
+ area;
+ button
+ is
contenteditable element's content, or the form control's value. See also the change event for form controls.
+ interest
+ InterestEvent
+ interestfor attribute when the user shows interest in the element with the interestfor attribute, e.g., by hovering or focusing.
+
invalid
Event
@@ -154782,6 +155388,12 @@ INSERT INTERFACES HERE
Window, elements
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
+ interestfor attribute when the user loses interest, e.g., by hovering or focusing something else.
+
message
MessageEvent