| OLD | NEW |
| (Empty) | |
| 1 <!DOCTYPE html> |
| 2 <script src='../../../resources/testharness.js'></script> |
| 3 <script src='../../../resources/testharnessreport.js'></script> |
| 4 <script src='resources/shadow-dom.js'></script> |
| 5 <div id="log"></div> |
| 6 <p> |
| 7 <pre> <<span class="pl-ent">input</span> <span class="pl-e">id</span>=<spa
n class="pl-s">i0</span> <span class="pl-e">tabindex</span>=<span class="pl-s">0
</span>></<span class="pl-ent">input</span>> |
| 8 <<span class="pl-ent">x</span><span class="pl-e">-foo</span>> |
| 9 <<span class="pl-ent">input</span> <span class="pl-e">id</span>=<span c
lass="pl-s">i2</span> <span class="pl-e">slot</span>=<span class="pl-s">s1</span
> <span class="pl-e">tabindex</span>=<span class="pl-s">2</span>></<span c
lass="pl-ent">input</span>> |
| 10 <<span class="pl-ent">input</span> <span class="pl-e">id</span>=<span c
lass="pl-s">i1</span> <span class="pl-e">slot</span>=<span class="pl-s">s1</span
> <span class="pl-e">tabindex</span>=<span class="pl-s">1</span>></<span c
lass="pl-ent">input</span>> |
| 11 </<span class="pl-ent">x</span><span class="pl-e">-foo</span>></pre> |
| 12 x-foo's shadow tree: |
| 13 <pre> <<span class="pl-ent">x</span><span class="pl-e">-bar</span> <span
class="pl-e">tabindex</span>=<span class="pl-s">4</span>> |
| 14 <<span class="pl-ent">input</span> <span class="pl-e">id</span>=<span c
lass="pl-s">j1</span> <span class="pl-e">slot</span>=<span class="pl-s">s2</span
> <span class="pl-e">tabindex</span>=<span class="pl-s">1</span>></<span c
lass="pl-ent">input</span>> |
| 15 <<span class="pl-ent">slot</span> <span class="pl-e">id</span>=<span cl
ass="pl-s">s1</span> <span class="pl-e">name</span>=<span class="pl-s">s1</span>
<span class="pl-e">slot</span>=<span class="pl-s">s2</span>></<span class
="pl-ent">slot</span>> |
| 16 <<span class="pl-ent">input</span> <span class="pl-e">id</span>=<span c
lass="pl-s">j0</span> <span class="pl-e">slot</span>=<span class="pl-s">s2</span
> <span class="pl-e">tabindex</span>=<span class="pl-s">0</span>></<span c
lass="pl-ent">input</span>> |
| 17 <<span class="pl-ent">input</span> <span class="pl-e">id</span>=<span c
lass="pl-s">j2</span> <span class="pl-e">slot</span>=<span class="pl-s">s2</span
> <span class="pl-e">tabindex</span>=<span class="pl-s">2</span>></<span c
lass="pl-ent">input</span>> |
| 18 </<span class="pl-ent">x</span><span class="pl-e">-bar</span>> |
| 19 <<span class="pl-ent">input</span> <span class="pl-e">id</span>=<span cla
ss="pl-s">j4</span> <span class="pl-e">tabindex</span>=<span class="pl-s">4</spa
n>></<span class="pl-ent">input</span>> |
| 20 <<span class="pl-ent">input</span> <span class="pl-e">id</span>=<span cla
ss="pl-s">j3</span> <span class="pl-e">tabindex</span>=<span class="pl-s">3</spa
n>></<span class="pl-ent">input</span>></pre> |
| 21 x-bar's shadow tree: |
| 22 <pre> <<span class="pl-ent">input</span> <span class="pl-e">id</span>=<s
pan class="pl-s">k0</span> <span class="pl-e">tabindex</span>=<span class="pl-s"
>0</span>></<span class="pl-ent">input</span>> |
| 23 <<span class="pl-ent">slot</span> <span class="pl-e">id</span>=<span clas
s="pl-s">s2</span> <span class="pl-e">name</span>=<span class="pl-s">s2</span>&g
t;</<span class="pl-ent">slot</span>> |
| 24 <<span class="pl-ent">input</span> <span class="pl-e">id</span>=<span cla
ss="pl-s">k1</span> <span class="pl-e">tabindex</span>=<span class="pl-s">1</spa
n>></<span class="pl-ent">input</span>></pre> |
| 25 document tree: [i0 -> [x-foo]]<br> |
| 26 x-foo's shadow tree: [j3 -> [x-bar] -> j4]<br> |
| 27 slot #s1: [i1 -> i2]<br> |
| 28 x-bar's shadow tree: [k1 -> k0 -> [s2]]<br> |
| 29 slot #s2: [j1 -> j2 -> [s1] -> j0]<br><br> |
| 30 <em>old nav forward: [i1 -> i2 -> i0 -> j1 -> j2 -> j3 -> k1 -> k0 -> j4 -> j
0]</em><br> |
| 31 <b>v1 ideal nav forward: [i0 -> j3 -> xbar -> k1 -> k0 -> j1 -> j2 -> i1 -> i
2 -> j0 -> j4]</b><br> |
| 32 </p> |
| 33 |
| 34 <input id="i0" tabindex=0 value="i0"> |
| 35 <div id="x-foo"> |
| 36 <div id="test"></div> |
| 37 <input id="i2" slot="s1" tabindex=2 value="i2"> |
| 38 <input id="i1" slot="s1" tabindex=1 value="i1"> |
| 39 <template data-mode="open"> |
| 40 <div id="x-bar" tabindex=4> |
| 41 <input id="j1" slot="s2" tabindex=1 value="j1"> |
| 42 <slot id="s1" name="s1" slot="s2"></slot> |
| 43 <input id="j0" slot="s2" tabindex=0 value="j0"> |
| 44 <input id="j2" slot="s2" tabindex=2 value="j2"> |
| 45 <template data-mode="open"> |
| 46 <input id="k0" tabindex=0 value="k0"> |
| 47 <slot id="s2" name="s2"></slot> |
| 48 <input id="k1" tabindex=1 value="k1"> |
| 49 </template> |
| 50 </div> |
| 51 <input id="j4" tabindex=4 value="j4"> |
| 52 <input id="j3" tabindex=3 value="j3"> |
| 53 </template> |
| 54 </div> |
| 55 </div> |
| 56 |
| 57 <script> |
| 58 |
| 59 function shouldCustomNavigateFocus(from, to, direction) |
| 60 { |
| 61 var fromElement = getNodeInComposedTree(from); |
| 62 if (!fromElement) { |
| 63 return; |
| 64 } |
| 65 fromElement.focus(); |
| 66 if (!isInnermostActiveElement(from)) { |
| 67 return; |
| 68 } |
| 69 if (direction == 'forward') |
| 70 navigateFocusForward(); |
| 71 else |
| 72 navigateFocusBackward(); |
| 73 return isInnermostActiveElement(to); |
| 74 } |
| 75 |
| 76 test(function() { |
| 77 var xfoo = document.getElementById('x-foo'); |
| 78 var i0 = document.getElementById('i0'); |
| 79 convertTemplatesToShadowRootsWithin(xfoo); |
| 80 var sr = xfoo.shadowRoot; |
| 81 var xbar = sr.querySelector('div'); |
| 82 convertTemplatesToShadowRootsWithin(xbar); |
| 83 |
| 84 var elements = [ |
| 85 'i0', |
| 86 'x-foo/j3', |
| 87 'x-foo/x-bar', |
| 88 'x-foo/x-bar/k1', |
| 89 'x-foo/x-bar/k0', |
| 90 'x-foo/j1', |
| 91 'x-foo/j2', |
| 92 'i1', |
| 93 'i2', |
| 94 'x-foo/j0', |
| 95 'x-foo/j4' |
| 96 ]; |
| 97 |
| 98 for (var i = 0; i + 1 < elements.length; ++i) |
| 99 assert_true(shouldCustomNavigateFocus(elements[i], elements[i + 1], 'forwa
rd'), "yo"); |
| 100 elements.reverse(); |
| 101 for (var i = 0; i + 1 < elements.length; ++i) |
| 102 assert_true(shouldCustomNavigateFocus(elements[i], elements[i + 1], 'backw
ard'), "yoooo"); |
| 103 }, 'Focus controller should treat slots as a focus scope.'); |
| 104 |
| 105 </script> |
| OLD | NEW |