Skip fast/dom/shadow/get-element-id-in-shadow-roots on some ports where SHADOW_DOM...
[WebKit-https.git] / LayoutTests / fast / dom / shadow / resources / shadow-dom.js
1 function createShadowRoot()
2 {
3     return {'isShadowRoot': true,
4             'children': Array.prototype.slice.call(arguments)};
5 }
6
7 // This function can take optional child elements, which might be a result of createShadowRoot(), as arguments[2:].
8 // You must enable SHADOW_DOM flag if you use this fucntion to host multiple ShadowRoots
9 // since window.internals does not have a function which can be used to host multiple shadow roots.
10 // FIXME: window.internals should have such function and remove the restriction.
11 function createDOM(tagName, attributes)
12 {
13     var element = document.createElement(tagName);
14     for (var name in attributes)
15         element.setAttribute(name, attributes[name]);
16     var childElements = Array.prototype.slice.call(arguments, 2);
17     var shadowRootCount = 0;
18     for (var i = 0; i < childElements.length; ++i) {
19         var child = childElements[i];
20         if (child.isShadowRoot) {
21             ++shadowRootCount;
22             var shadowRoot;
23             if (window.WebKitShadowRoot)
24                 shadowRoot = new WebKitShadowRoot(element);
25             else if (shadowRootcount == 1)
26                 shadowRoot = internals.ensureShadowRoot(element);
27             else
28                 throw "CreateDOM cannot be used to host multiple ShadowRoots without new WebKitShadowRoot()";
29             for (var j = 0; j < child.children.length; ++j)
30                 shadowRoot.appendChild(child.children[j]);
31         } else
32             element.appendChild(child);
33     }
34     return element;
35 }
36
37 function isShadowRoot(node)
38 {
39     // FIXME: window.internals should have internals.isShadowRoot(node).
40     return node.nodeName == "#shadow-root" || node.host;
41 }
42
43 // You can spefify youngerShadowRoot by consecutive slashes.
44 // See LayoutTests/fast/dom/shadow/get-element-by-id-in-shadow-root.html for actual usages.
45 function getElementInShadowTreeStack(path)
46 {
47     var ids = path.split('/');
48     var node = document.getElementById(ids[0]);
49     for (var i = 1; node != null && i < ids.length; ++i) {
50         if (isShadowRoot(node))
51             node = internals.youngerShadowRoot(node);
52         else
53             node = internals.oldestShadowRoot(node);
54         if (ids[i] != '')
55             node = internals.getElementByIdInShadowRoot(node, ids[i]);
56     }
57     return node;
58 }
59