event-path-test-helpers.js (2969B)
1 function dispatchEventWithEventLog(shadow, target, event) { 2 var eventPath = []; 3 var targets = []; 4 var relatedTargets = []; 5 var pathAtTargets = []; 6 7 var attachedNodes = []; 8 for (var nodeKey in shadow) { 9 var startingNode = shadow[nodeKey]; 10 for (var node = startingNode; node; node = node.parentNode) { 11 if (attachedNodes.indexOf(node) >= 0) 12 continue; 13 attachedNodes.push(node); 14 node.addEventListener(event.type, (function (event) { 15 eventPath.push(this.label); 16 relatedTargets.push(event.relatedTarget ? event.relatedTarget.label : null); 17 18 pathAtTargets.push(event.composedPath().map(function (node) { return node.label; })); 19 targets.push(event.target); 20 }).bind(node)); 21 } 22 } 23 24 target.dispatchEvent(event); 25 26 return {event: event, targets: targets, eventPath: eventPath, relatedTargets: relatedTargets, pathAtTargets: pathAtTargets}; 27 } 28 29 /* 30 -SR: ShadowRoot -S: Slot 31 A ------------------------------- A-SR 32 + B ------------ B-SR + A1 --- A1-SR 33 + C + B1 --- B1-SR + A2-S + A1a 34 + D --- D-SR + B1a + B1b --- B1b-SR 35 + D1 + B1c-S + B1b1 36 + B1b2 37 */ 38 function createFixedTestTree(mode) { 39 var namedNodes = {}; 40 41 function element(name) { 42 var element = document.createElement(name.indexOf('-S') > 0 ? 'slot' : 'div'); 43 element.label = name; 44 namedNodes[name] = element; 45 for (var i = 1; i < arguments.length; i++) { 46 var item = arguments[i]; 47 if (typeof(item) == 'function') 48 item(element); 49 else 50 element.appendChild(item); 51 } 52 return element; 53 } 54 55 function shadow(name) { 56 var children = []; 57 for (var i = 1; i < arguments.length; i++) 58 children.push(arguments[i]); 59 return function (element) { 60 var shadowRoot = element.attachShadow({mode: mode}); 61 shadowRoot.label = name; 62 namedNodes[name] = shadowRoot; 63 for (var child of children) 64 shadowRoot.appendChild(child); 65 } 66 } 67 68 var host = element('A', 69 shadow('A-SR', 70 element('A1', 71 shadow('A1-SR', 72 element('A1a'))), 73 element('A2-S') 74 ), 75 element('B', 76 shadow('B-SR', 77 element('B1', 78 shadow('B1-SR', 79 element('B1b', 80 shadow('B1b-SR', 81 element('B1b1'), 82 element('B1b2'))), 83 element('B1c-S')), 84 element('B1a'))), 85 element('C'), 86 element('D', 87 shadow('D-SR', 88 element('D1'))))); 89 90 return namedNodes; 91 }