Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | /* tests are using createTestTree(node) to
* append the node clone with
* initiated shadowDom on template parent ( id=host )
*/
import { CssChain as $ } from "./CssChain.js";
// from https://github.com/chromium/chromium/edit/main/third_party/blink/web_tests/external/wpt/shadow-dom/resources/shadow-dom.js
// changes:
// * added walkLightDom() code to test $.template()
// * createTestTree adds the cloned transformed node to parent
export function createTestTree( node )
{
let ids = {light:{},native:{}};
function attachShadowFromTemplate( template )
{
let parent = template.parentNode;
parent.removeChild( template );
let shadowRoot;
if( template.getAttribute( 'data-slot-assignment' ) === 'manual' )
{ /* c8 ignore next 5 */
shadowRoot =
parent.attachShadow( {
mode: template.getAttribute( 'data-mode' ),
slotAssignment: 'manual'
} );
}else
{
shadowRoot = parent.attachShadow(
{ mode: template.getAttribute( 'data-mode' ) } );
}
let id = template.id;
/* c8 ignore next 5 */
if( id )
{
shadowRoot.id = id;
ids[ id ] = shadowRoot;
}
shadowRoot.appendChild( document.importNode( template.content, true ) );
return shadowRoot;
}
function walkShadowDom( root )
{ /* c8 ignore next 4 */
if( root.id )
{
ids[ root.id ] = root;
}
for( let e of Array.from( root.querySelectorAll( '[id]' ) ) )
{
ids[ e.id ] = e;
}
for( let e of Array.from( root.querySelectorAll( 'template' ) ) )
{
walkShadowDom( attachShadowFromTemplate( e ) );
}
}
function walkLightDom( root ) // using CssChain
{ if( root.id )
ids.light[ root.id ] = root;
$( '[id]',root ).map( e => ids.light[ e.id ] = e );
$( 'template', root )
.map( t =>
{ const p = t.parentNode;
p.removeChild(t);
const $rendered = $(p).template(t);
$rendered.children.map( walkLightDom );
});
}
const cloneAppend = (n,classname) =>
{ let x = node.cloneNode( true );
x.id=classname;
x.classList.add(classname);
if( classname==='light')
ids.light[node.id]=x;
else
ids[node.id]=x;
n.parentNode.appendChild(x);
return x
};
walkLightDom( cloneAppend( node ,'light' ) );
walkShadowDom( cloneAppend( node,'shadow' ) );
return ids;
}
// https://github.com/chromium/chromium/blob/main/third_party/blink/web_tests/external/wpt/shadow-dom/resources/shadow-dom.js#L1
export function removeWhiteSpaceOnlyTextNodes(node)
{
for (var i = 0; i < node.childNodes.length; i++) {
var child = node.childNodes[i];
if (child.nodeType === Node.TEXT_NODE && child.nodeValue.trim().length == 0) {
node.removeChild(child);
i--;
} else if (child.nodeType === Node.ELEMENT_NODE || child.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
removeWhiteSpaceOnlyTextNodes(child);
}
}
if (node.shadowRoot) {
removeWhiteSpaceOnlyTextNodes(node.shadowRoot);
}
}
|