Skip to content

Commit 9e40cb6

Browse files
committed
Add the interesttarget attribute
1 parent 29271b5 commit 9e40cb6

File tree

1 file changed

+188
-3
lines changed

1 file changed

+188
-3
lines changed

source

Lines changed: 188 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21795,6 +21795,7 @@ interface <dfn interface>HTMLDivElement</dfn> : <span>HTMLElement</span> {
2179521795
<dd><code data-x="attr-hyperlink-hreflang">hreflang</code></dd>
2179621796
<dd><code data-x="attr-hyperlink-type">type</code></dd>
2179721797
<dd><code data-x="attr-hyperlink-referrerpolicy">referrerpolicy</code></dd>
21798+
<dd><code data-x="attr-interesttarget">interesttarget</code></dd>
2179821799
<dt><span
2179921800
data-x="concept-element-accessibility-considerations">Accessibility considerations</span>:</dt>
2180021801
<dd>If the element has an <code data-x="attr-hyperlink-href">href</code> attribute: <a
@@ -21823,7 +21824,8 @@ interface <dfn interface>HTMLAnchorElement</dfn> : <span>HTMLElement</span> {
2182321824

2182421825
// <a href="#HTMLAnchorElement-partial">also has obsolete members</a>
2182521826
};
21826-
<span>HTMLAnchorElement</span> includes <span>HTMLHyperlinkElementUtils</span>;</code></pre>
21827+
<span>HTMLAnchorElement</span> includes <span>HTMLHyperlinkElementUtils</span>;
21828+
<span>HTMLAnchorElement</span> includes <span>InterestInvokerElement</span>;</code></pre>
2182721829
</dd>
2182821830
<dd w-dev>Uses <code>HTMLAnchorElement</code>.</dd>
2182921831
</dl>
@@ -42070,6 +42072,7 @@ interface <dfn interface>HTMLMapElement</dfn> : <span>HTMLElement</span> {
4207042072
<dd><code data-x="attr-hyperlink-ping">ping</code></dd>
4207142073
<dd><code data-x="attr-hyperlink-rel">rel</code></dd>
4207242074
<dd><code data-x="attr-hyperlink-referrerpolicy">referrerpolicy</code></dd>
42075+
<dd><code data-x="attr-interesttarget">interesttarget</code></dd>
4207342076
<dt><span
4207442077
data-x="concept-element-accessibility-considerations">Accessibility considerations</span>:</dt>
4207542078
<dd>If the element has an <code data-x="attr-hyperlink-href">href</code> attribute: <a
@@ -42096,7 +42099,8 @@ interface <dfn interface>HTMLAreaElement</dfn> : <span>HTMLElement</span> {
4209642099

4209742100
// <a href="#HTMLAreaElement-partial">also has obsolete members</a>
4209842101
};
42099-
<span>HTMLAreaElement</span> includes <span>HTMLHyperlinkElementUtils</span>;</code></pre>
42102+
<span>HTMLAreaElement</span> includes <span>HTMLHyperlinkElementUtils</span>;
42103+
<span>HTMLAreaElement</span> includes <span>InterestInvokerElement</span>;</code></pre>
4210042104
</dd>
4210142105
<dd w-dev>Uses <code>HTMLAreaElement</code>.</dd>
4210242106
</dl>
@@ -53518,6 +53522,7 @@ You cannot submit this form when the field is incorrect.</samp></pre>
5351853522
<dd><code data-x="attr-fe-name">name</code></dd>
5351953523
<dd><code data-x="attr-popovertarget">popovertarget</code></dd>
5352053524
<dd><code data-x="attr-popovertargetaction">popovertargetaction</code></dd>
53525+
<dd><code data-x="attr-interesttarget">interesttarget</code></dd>
5352153526
<dd><code data-x="attr-button-type">type</code></dd>
5352253527
<dd><code data-x="attr-button-value">value</code></dd>
5352353528
<dt><span
@@ -53552,7 +53557,8 @@ interface <dfn interface>HTMLButtonElement</dfn> : <span>HTMLElement</span> {
5355253557

5355353558
readonly attribute <span>NodeList</span> <span data-x="dom-lfe-labels">labels</span>;
5355453559
};
53555-
<span>HTMLButtonElement</span> includes <span>PopoverInvokerElement</span>;</code></pre>
53560+
<span>HTMLButtonElement</span> includes <span>PopoverInvokerElement</span>;
53561+
<span>HTMLButtonElement</span> includes <span>InterestInvokerElement</span>;</code></pre>
5355653562
</dd>
5355753563
<dd w-dev>Uses <code>HTMLButtonElement</code>.</dd>
5355853564
</dl>
@@ -75852,6 +75858,13 @@ contradict people?
7585275858
data-x="concept-selector-active">being activated</i>.)</p>
7585375859
</dd>
7585475860

75861+
<dt><dfn selector noexport><code data-x="selector-has-interest">:has-interest</code></dfn></dt>
75862+
<dd>
75863+
<p>The <code data-x="selector-has-interest">:has-interest</code> <span>pseudo-class</span> is
75864+
defined to match any <span data-x="html elements">HTML element</span> whose <span>has
75865+
interest</span> is true.</p>
75866+
</dd>
75867+
7585575868
<dt><dfn selector noexport><code data-x="selector-hover">:hover</code></dfn></dt>
7585675869
<dd>
7585775870
<p>The <code data-x="selector-hover">:hover</code> <span>pseudo-class</span> is defined to
@@ -88115,6 +88128,159 @@ dictionary <dfn dictionary>DragEventInit</dfn> : <span>MouseEventInit</span> {
8811588128
</ol>
8811688129

8811788130

88131+
<h3 split-filename="interesttarget">Interest invokers</h3>
88132+
88133+
<h4>The <code data-x="attr-interesttarget">interesttarget</code> attribute</h4>
88134+
88135+
<p>The <dfn element-attr for="html-global"><code data-x="attr-interesttarget">interesttarget</code></dfn> attribute on <code>a</code>, <code>area</code>, and <code>button</code> elements TODO.</p>
88136+
88137+
<p>If specified, the <code data-x="attr-interesttarget">interesttarget</code> attribute value
88138+
must be the <span data-x="concept-ID">ID</span> of an element in the same <span>tree</span> as the
88139+
element with the <code data-x="attr-interesttarget">interesttarget</code> attribute.</p>
88140+
88141+
<span data-x="concept-element-dom">DOM interface</span>:
88142+
<pre><code class="idl">interface mixin <dfn interface>InterestInvokerElement</dfn> {
88143+
[<span>CEReactions</span>] attribute Element? <span data-x="dom-interestTargetElement">interestTargetElement</span>;
88144+
};</code></pre>
88145+
88146+
<p>The <dfn attribute for="HTMLElement"><code
88147+
data-x="dom-interestTargetElement">interestTargetElement</code></dfn> IDL attribute must
88148+
<span>reflect</span> the <code data-x="attr-interesttarget">interesttarget</code> attribute.</p>
88149+
88150+
<div class="example">
88151+
<p>The following demonstrates how one might show a tooltip for a button using the
88152+
<code data-x="attr-interesttarget">interesttarget</code> attribute to associate the button with
88153+
a <code>div</code> <code data-x="attr-popover">popover</code> representing the tooltip.</p>
88154+
88155+
<pre><code class="html">&lt;button interesttarget=tooltip>
88156+
Click me
88157+
&lt;/button>
88158+
88159+
&lt;div popover=hint id=tooltip>
88160+
I will appear
88161+
&lt;/div></code></pre>
88162+
</div>
88163+
88164+
<p>Every <span data-x="HTML elements">HTML element</span> has a <dfn>has interest</dfn>, which is a
88165+
boolean, initially set to false.</p>
88166+
<!-- TODO: or have an Element slot on Document for this since there can only be one at a time? -->
88167+
88168+
<h4>The <code>InterestEvent</code> interface</h4>
88169+
88170+
<pre><code class="idl">[Exposed=Window]
88171+
interface <dfn interface>InterestEvent</dfn> : <span>Event</span> {
88172+
constructor(DOMString type, optional <span>InterestEventInit</span> eventInitDict = {});
88173+
readonly attribute Element? source; // TODO: nullable, or require in ctor?
88174+
};
88175+
88176+
dictionary <dfn dictionary>InterestEventInit</dfn> : <span>EventInit</span> {
88177+
Element? source = null;
88178+
};</code></pre>
88179+
88180+
<dl class="domintro">
88181+
<dt><code data-x=""><var>event</var>.<span subdfn
88182+
data-x="dom-InterestEvent-source">source</span></code></dt>
88183+
88184+
<dd>
88185+
<p>Set to an interesting element TODO.</p>
88186+
</dd>
88187+
</dl>
88188+
88189+
<p>The <dfn attribute for="InterestEvent"><code
88190+
data-x="dom-InterestEvent-source">source</code></dfn> attribute must return the value it was
88191+
initialized to.</p>
88192+
88193+
<h4 id="interest-target-processing-model">Processing model</h4>
88194+
88195+
<p>To <dfn export data-x="capture-interest">capture interest</dfn>, given an <span
88196+
data-x="HTML elements">HTML element</span> <var>invoker</var>:</p>
88197+
88198+
<ol>
88199+
<li><p>Assert: <var>invoker</var> is an <code>a</code>, <code>area</code>, or <code>button</code>
88200+
element.</p></li>
88201+
88202+
<li><p>Assert: <var>invoker</var> has the <code data-x="attr-interesttarget">interesttarget</code>
88203+
attribute specified.</p></li>
88204+
88205+
<li><p>Let <var>target</var> be the result of running <var>node</var>'s <span data-x="get
88206+
the attr-associated element">get the <code data-x="">interesttarget</code>-associated
88207+
element</span>.</p></li>
88208+
88209+
<li><p>If <var>target</var> is null, then return.</p></li>
88210+
88211+
<li><p>Let <var>continue</var> be the result of <span data-x="concept-event-fire">firing an
88212+
event</span> named <code data-x="event-interest">interest</code> at <var>target</var>, using
88213+
<code>InterestEvent</code>, with the <code data-x="dom-Event-cancelable">cancelable</code> and
88214+
<code data-x="dom-Event-composed">composed</code> attributes initialized to true, and the
88215+
<code data-x="dom-InterestEvent-source">source</code> attribute initialized to
88216+
<var>invoker</var>.</p></li>
88217+
<!-- TODO: the explainer calls for composed without bubbling, does that make sense? -->
88218+
88219+
<li><p>If <var>continue</var> is false, then return.</p></li>
88220+
88221+
<li><p>Set <var>invoker</var>'s <span>has interest</span> to true.</p></li>
88222+
88223+
<!-- TODO: test that :has-interest doesn't match when the interest event is fired, but does
88224+
match when the popover toggle event fired. -->
88225+
88226+
<li><p>If <var>target</var>'s <code data-x="attr-popover">popover</code> attribute is not in the
88227+
<span data-x="attr-popover-none-state">no popover state</span>, then run <span>show popover</span>
88228+
given <var>target</var>, false, and <var>invoker</var>.</p></li>
88229+
<!-- TODO: should invoker be passed? It's used for popovertarget, might not do the right thing
88230+
if passed in here... -->
88231+
88232+
<!-- TODO: nothing to do if not a popover? how can devs show/hide it? needs another pseudo-class? -->
88233+
</ol>
88234+
88235+
<p>To <dfn export data-x="lose-interest">lose interest</dfn>, given an <span
88236+
data-x="HTML elements">HTML element</span> <var>invoker</var>:</p>
88237+
88238+
<ol>
88239+
<li><p>Assert: <var>invoker</var> is an <code>a</code>, <code>area</code>, or <code>button</code>
88240+
element.</p></li>
88241+
88242+
<li><p>Note: <var>invoker</var> may no longer have the <code
88243+
data-x="attr-interesttarget">interesttarget</code> attribute specified.</p></li>
88244+
88245+
<li><p>Let <var>target</var> be the result of running <var>node</var>'s <span data-x="get
88246+
the attr-associated element">get the <code data-x="">interesttarget</code>-associated
88247+
element</span>.</p></li>
88248+
88249+
<li><p>If <var>target</var> is null, then return.</p></li>
88250+
88251+
<!-- TODO: what state is possibly left dangling if the target wasn't found? -->
88252+
88253+
<li><p>Let <var>continue</var> be the result of <span data-x="concept-event-fire">firing an
88254+
event</span> named <code data-x="event-interest">loseinterest</code> at <var>target</var>, using
88255+
<code>InterestEvent</code>, with the <code data-x="dom-Event-cancelable">cancelable</code> and
88256+
<code data-x="dom-Event-composed">composed</code> attributes initialized to true, and the
88257+
<code data-x="dom-InterestEvent-source">source</code> attribute initialized to
88258+
<var>invoker</var>.</p></li>
88259+
<!-- TODO: the explainer calls for composed without bubbling, does that make sense? -->
88260+
88261+
<li><p>If <var>continue</var> is false, then return.</p></li>
88262+
<!-- TODO: what's the point of being able to cancel this event? -->
88263+
88264+
<li><p>If <var>target</var>'s <code data-x="attr-popover">popover</code> attribute is not in the
88265+
<span data-x="attr-popover-none-state">no popover state</span>, then <span
88266+
data-x="hide popover algorithm">hide popover</span> given <var>invoker</var>, false, true, and
88267+
false.</p></li>
88268+
88269+
<li><p>Set <var>invoker</var>'s <span>has interest</span> to false.</p></li>
88270+
<!-- TODO: is this the right time to change the state? too late? -->
88271+
</ol>
88272+
88273+
<p>TODO / questions:</p>
88274+
88275+
<ul>
88276+
<li><p>Actually invoke the capture/lose algorithms.</p></li>
88277+
<li><p>Which algorithm reads the computed style for interest-target-delay?</p></li>
88278+
<li><p>Handle removal of the interesttarget attribute, or the element that has it.</p></li>
88279+
<li><p>Handle changes of the interesttarget attribute while an element has interest.</p></li>
88280+
<li><p>Handle changes to the ID attribute referenced by an interesttarget attribute.</p></li>
88281+
</ul>
88282+
88283+
8811888284
<h2 split-filename="browsers" id="browsers">Loading web pages</h2>
8811988285

8812088286
<div w-nodev>
@@ -144434,6 +144600,13 @@ interface <dfn interface>External</dfn> {
144434144600
<code data-x="attr-script-integrity">script</code>
144435144601
<td> Integrity metadata used in <cite>Subresource Integrity</cite> checks <ref>SRI</ref>
144436144602
<td> <a href="#attribute-text">Text</a>
144603+
<tr>
144604+
<th> <code data-x="">interesttarget</code>
144605+
<td> <code data-x="attr-interesttarget">a</code>;
144606+
<code data-x="attr-interesttarget">area</code>;
144607+
<code data-x="attr-interesttarget">button</code>
144608+
<td> Targets an interesting TODO
144609+
<td> <span data-x="concept-id">ID</span>* <!-- TODO: is the asterisk needed, is it really complicated? -->
144437144610
<tr>
144438144611
<th> <code data-x="">is</code>
144439144612
<td> <span data-x="attr-is">HTML elements</span>
@@ -146236,6 +146409,12 @@ INSERT INTERFACES HERE
146236146409
<td> Elements
146237146410
<td> Fired when the user changes the <code data-x="attr-contenteditable">contenteditable</code> element's content, or the form control's value. See also the <code data-x="event-change">change</code> event for form controls.
146238146411

146412+
<tr> <!-- interest -->
146413+
<td> <dfn event for="HTMLElement"><code data-x="event-interest">interest</code></dfn>
146414+
<td> <code>InterestEvent</code>
146415+
<td> Elements
146416+
<td> Fired on interesting elements because of code <code data-x="attr-interesttarget">interesttarget</code> TODO.
146417+
146239146418
<tr> <!-- invalid -->
146240146419
<td> <dfn event for="HTMLElement"><code data-x="event-invalid">invalid</code></dfn>
146241146420
<td> <code>Event</code>
@@ -146254,6 +146433,12 @@ INSERT INTERFACES HERE
146254146433
<td> <code>Window</code>, elements
146255146434
<td> Fired at the <code>Window</code> when the document has finished loading; fired at an element containing a resource (e.g. <code>img</code>, <code>embed</code>) when its resource has finished loading
146256146435

146436+
<tr> <!-- loseinterest -->
146437+
<td> <dfn event for="HTMLElement"><code data-x="event-loseinterest">loseinterest</code></dfn>
146438+
<td> <code>InterestEvent</code>
146439+
<td> Elements
146440+
<td> Fired on boring elements because of code <code data-x="attr-interesttarget">interesttarget</code> TODO.
146441+
146257146442
<tr> <!-- message -->
146258146443
<td> <dfn event for="Window,EventSource,MessagePort,BroadcastChannel,DedicatedWorkerGlobalScope,Worker,ServiceWorkerContainer"><code data-x="event-message">message</code></dfn>
146259146444
<td> <code>MessageEvent</code>

0 commit comments

Comments
 (0)