retargeting steps

retargeting steps

[10] DOMイベント木構造に対して定義されていますが、 実際にとして使われるのは節点木 (DocumentElement) だけで、 それ以外のほとんどは単一のオブジェクトです。

仕様書

親の取得

[16] EventTarget は、 イベントイベント引数とする親の取得 (get the parent) アルゴリズムを持ちます >>19イベント対象親の取得は、イベント対象により、次のようにします。

文書
>>24
  1. [26] イベントload か、 イベント対象閲覧文脈null なら、
    1. [27] null を返します。
  2. [28] それ以外なら、
    1. [29] イベント対象Windowを返します。
影根
>>39
  1. [40] イベント合成フラグなら、
    1. [41] null を返します。
  2. [42] それ以外なら、
    1. [43] イベント対象ホストを返します。
要素テキスト
>>22
  1. [34] イベント対象割り当て済みなら、
    1. [35] イベント対象割り当て済みスロットを返します。
  2. [36] それ以外なら、
    1. [37] イベント対象を返します。
文書型注釈処理指令
イベント対象を返します >>22
それ以外
null を返します >>19

[30] 親の取得は、dispatch で参照されます。

木をまたぐイベントの伝播

[4] 構造を超えたイベントの伝播には次のものがあります。

イベント経路

[23] イベントオブジェクトは、経路 (path) を持ちます >>22

[44] 仕様書の規定は若干わかりにくい形になっています。次の説明は、少し違う (が等価な) 形です。

[25] 経路の初期値は、空です >>22

[45] 経路dispatch で設定されます。 dispatch 自体の他、 composedPath でも参照されます。 仕様書上は影根親の取得でも参照されます。

[47] 経路は、 dispatch の最初でイベント対象遺物対象上書きフラグを使って次のように構築されます >>46

  1. [77] イベント経路を、空リストに設定します。
  2. [52] オブジェクトを、対象に設定します。
  3. [58] 遺物対象上書きフラグが設定されていれば、
    1. [60] 相対対象を、対象文書に設定します。
  4. [59] それ以外なら、
    1. [50] 相対対象を、対象に設定します。
  5. [75] イベントオブジェクトにおける関連対象オブジェクトで、 イベント関連対象オブジェクトでないなら、
    1. [76] (イベント経路, null) を返し、ここで停止します。
  6. [111] 活性化イベントであるを、イベントMouseEvent かつイベントclick である、に設定します。
  7. [112] 活性化対象を、活性化イベントであるかつオブジェクト活性化動作null でないならオブジェクト、それ以外なら null に設定します。
  8. [73] 繰り返し、
    1. [53] イベント経路に、新しい項目を追加します。
      現在対象
      オブジェクト
      対象
      相対対象
      関連対象
      イベントオブジェクトにおける関連対象
    2. [54] を、オブジェクト親の取得イベントについて実行した結果に設定します。
    3. [49] null でなら、
      1. [74] (イベント経路, 活性化対象) を返し、ここで停止します。
    4. [56] オブジェクトが違うに属するなら、
      1. [57] 相対対象を、に設定します。
      2. [79] イベントにおける関連対象が等しいなら、
        1. [80] (イベント経路, 活性化対象) を返し、ここで停止します。
      3. [81] 活性化対象null で、活性化イベントであるかつ活性化動作null でないなら、
        1. [82] 活性化対象を、に設定します。
    5. [83] それ以外の場合、
      1. [84] 活性化対象null で、活性化イベントであるかつ活性化動作null でなく、 イベントbubblesなら、
        1. [85] 活性化対象を、に設定します。
    6. [55] オブジェクトを、に設定します。

[51] ここで、イベントオブジェクトにおける関連対象とは、

イベント関連対象null
null
それ以外
イベント関連対象オブジェクトについて再対象付けした結果
... をいいます。

[48] イベント経路は、 dispatch の最後で空に戻されます >>46

[64] 節点基準点について再対象付け (retarget) した結果とは、 節点基準点が同じに属するか、 基準点影木に属する (など影を含む子孫である) ならば節点、 そうでないなら節点影ホスト基準点について再対象付けしたものです >>46

[86] これは pointerLockElement から参照されています。

[66] retargeting steps >>46

歴史

[17] dispatch において WindowDocumentとして (ほとんどの場合に) 動作するよう昔から実装されていましたが、 HTML5 まで明文化されていませんでした。

[18] DOM Standard によってイベントの仕様が再整備されたことで、 HTML Standard もそれに基づく規定に切り替えられました。

[3] >>1 により HTML StandardDOM Standard より event parentcross-boundary event parent を引用していますが、現時点で DOM Standard に両者の定義はありません。

[9] 閲覧文脈中にある Document に属する節点においてイベントディスパッチされる時、 イベント型load である時を除き、 WindowDocumentであるように振舞わなければなりません >>8

[13] seamless は実装されなかったため2016年2月に削除されました。

[20] 2016年2月にはイベント親親の取得という形に再編されて、 DOM Standard に規定が集約されました。

[31] [Fix #429] Integrate "get the parent" model for an event path · w3c/webcomponents@0457494 ( 版) https://github.com/w3c/webcomponents/commit/0457494032c6668291319df843a7a62faca214c5

[32] Fix #486: Fix 'get the parent' for relatedTarget ( (hayatoito著, )) https://github.com/w3c/webcomponents/commit/b1433e5f3a013ca825f02fb8f7b0e9d6217c0125

[33] [] (0) Make the Window object support events ( (Hixie著, )) https://github.com/whatwg/html/commit/16d81185f31b98ef752e036fce228199a1e8502c

[61] Shadow: define event retargeting for shadow trees (annevk著, ) https://github.com/whatwg/dom/commit/ed94c9f2f1850b2e6a9b357c6870186859da4c2d

[62] Shadow: define Event's composedPath() (annevk著, ) https://github.com/whatwg/dom/commit/58b19e4aa89ab0c6ef998daa455dcbb189423cf8

[63] Shadow: define event's relatedTarget handling (hayatoito著, ) https://github.com/whatwg/dom/commit/ef69a247681532e6102ced9a78aabf7f7a536108

[65] Shadow: add "retargeting steps" to the dispatch algorithm (hayatoito著, ) https://github.com/whatwg/dom/commit/fbc0c312c3ead6940718e3d2d7511f2b014011e1

[67] Use the definition of "retargeting" from the DOM spec. (#8) (TakayoshiKochi著, ) https://github.com/w3c/pointerlock/commit/03f09d37d45c33ac766c3cbe99fc8e199c64347e

[68] Editorial: drop "invoking" from "invoking retargeting" (TakayoshiKochi著, ) https://github.com/whatwg/dom/commit/de60f841360f5995be0b49eebe7cda1c32275be8

[69] Add TouchEvent's retargeting steps (#73) (hayatoito著, ) https://github.com/w3c/touch-events/commit/eeed53b305bc1c1fa35f7280aef342f16ebb230c

[70] Shadow: adjust composedPath() when currentTarget is a Window object (hayatoito著, ) https://github.com/whatwg/dom/commit/2153769e1ecf55f2d202fd5c6f996023b34545e5

[71] Redesign fire an event and target override (annevk著, ) https://github.com/whatwg/dom/commit/e19d7eef74fb83792415a4a78ed866d28f4cc543

[72] Shadow: do not dispatch an event when target is reletedTarget (hayatoito著, ) https://github.com/whatwg/dom/commit/afac5044c18fa871837b0a86d21f338b29f7a292

[78] Define special dispatch behavior for click events (annevk著, ) https://github.com/whatwg/dom/commit/cb12fd4e2db68a9d86841a13a73611e16f9f1fb4

[87] Allow constructing and subclassing EventTarget (domenic著, ) https://github.com/whatwg/dom/commit/c4c1c8b47340a1e5ecc1a07670927b831f240586

[88] Note retargeting usage in Fullscreen (annevk著, ) https://github.com/whatwg/dom/commit/7a771ad2bd086b2938340085333b6960226a27ca

[89] Consider moving "retargeting" to the dispatch section · Issue #620 · whatwg/dom () https://github.com/whatwg/dom/issues/620

[90] Note retargeting usage in Fullscreen by annevk · Pull Request #630 · whatwg/dom () https://github.com/whatwg/dom/pull/630

[91] Standardize window.event (miketaylr著, ) https://github.com/whatwg/dom/commit/c69d7c0fb8796de884652c517825122d12901ef5

[92] Avoid setting target to the Window object (annevk著, ) https://github.com/whatwg/dom/commit/0b04ae848b27f9eaf6f0bd17ecaff0bd7f833068

[93] Dispatch event always set the event.target to the global object after dispatch · Issue #697 · whatwg/dom () https://github.com/whatwg/dom/issues/697

[94] Avoid setting target to the Window object by annevk · Pull Request #698 · whatwg/dom () https://github.com/whatwg/dom/pull/698