display-contents-shadow-dom-1.html 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. <!DOCTYPE html>
  2. <!--
  3. Any copyright is dedicated to the Public Domain.
  4. http://creativecommons.org/publicdomain/zero/1.0/
  5. -->
  6. <html class="reftest-wait" lang="en-US">
  7. <head>
  8. <title>CSS Test: CSS display:contents; in Shadow DOM</title>
  9. <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=907396">
  10. <link rel="help" href="http://dev.w3.org/csswg/css-display">
  11. <style>
  12. html,body {
  13. color:black; background-color:white; font-size:16px; padding:0; margin:0;
  14. }
  15. .before::before {content: "a ";}
  16. .after::after {content: " c";}
  17. div.before::before {content: "X ";}
  18. div.after::after {content: " Y";}
  19. .b,.c { display:contents; }
  20. </style>
  21. </head>
  22. <body>
  23. <div id="host1" class="before"></div>
  24. <span id="host2"></span>
  25. <div id="host3" class="after"></div>
  26. <div id="host4" class="before after"></div>
  27. <div id="host5" class="after"></div>
  28. <div id="host6" class="before"></div>
  29. <div id="host7"></div>
  30. <div id="host8" class="after"></div>
  31. <div id="host9" class="before after"></div>
  32. <div id="hostA" class="after"></div>
  33. <div id="hostB"></div>
  34. <div id="hostC"></div>
  35. <div id="hostD"></div>
  36. <div id="hostE"></div>
  37. <div id="hostF" class="before"></div>
  38. <div id="hostG"></div>
  39. <span id="hostH"></span>
  40. <div id="hostI"></div>
  41. <div id="hostJ"></div>
  42. <span id="hostK"></span>
  43. <div id="hostL"></div>
  44. <div id="hostM"><i>Two</i><b>One</b></div>
  45. <div id="hostN"><i class="c">Two</i><b>One</b></div>
  46. <div id="hostO"><i>Two</i><b class="c">One</b></div>
  47. <div id="hostP"><i class="c">Two</i><b class="c">One</b></div>
  48. <div id="hostQ" class="c" style="color:blue"><i class="c">Two</i><b class="c">One</b></div>Three
  49. <span id="hostR"><style scoped>:scope{color:green}</style></span>
  50. <div id="hostS" class="c"><span class="c">S</span></div>
  51. <div id="hostT" class="c">T</div>
  52. <div id="hostU"><span class="c">U</span></div>
  53. <div id="hostV" class="c" style="color:red"><b class="c" style="color:inherit">V</b></div>
  54. <!-- TODO(bug 1021572?) <div id="hostY" class="c" style="color:red"><b>Y</b></div> -->
  55. <script>
  56. function shadow(id) {
  57. return document.getElementById(id).createShadowRoot();
  58. }
  59. function span(s) {
  60. var e = document.createElement("span");
  61. var t = document.createTextNode(s);
  62. e.appendChild(t);
  63. return e;
  64. }
  65. function text(s) {
  66. return document.createTextNode(s);
  67. }
  68. function contents(n) {
  69. var e = document.createElement("z");
  70. e.style.display = "contents";
  71. e.style.color = "blue";
  72. if (n) e.appendChild(n);
  73. return e;
  74. }
  75. function run() {
  76. document.body.offsetHeight;
  77. shadow("host1").innerHTML = '<content></content> c';
  78. shadow("host2").innerHTML = 'a <content style="display:contents"></content> c';
  79. shadow("host3").innerHTML = 'a <content style="display:contents"></content>';
  80. shadow("host4").innerHTML = '<content style="display:contents"></content>';
  81. shadow("host5").innerHTML = 'a <content style="display:contents"></content>';
  82. shadow("host6").innerHTML = '<z style="color:blue; display:contents"><content></content></z> c';
  83. shadow("host7").innerHTML = 'a <content style="display:contents"></content> c';
  84. shadow("host8").innerHTML = 'a <z style="color:blue; display:contents"><content style="display:contents"></z></content>';
  85. shadow("host9").innerHTML = '<content style="display:contents"></content>';
  86. shadow("hostA").innerHTML = 'a <content style="display:contents"></content>';
  87. shadow("hostB").innerHTML = 'a <content select=".c"></content> <content select=".b"></content> B';
  88. shadow("hostC").innerHTML = 'A <content select=".c"></content> <content select=".b"></content> B';
  89. shadow("hostD").innerHTML = 'A <content select=".c"></content> <content select=".b"></content> B <content select=".b"></content>';
  90. shadow("hostE").innerHTML = 'A <content select=".c"></content> <content select=".b"></content> B';
  91. shadow("hostF").innerHTML = '<content select=".c"></content> <content select=".b"></content> B';
  92. shadow("hostG").innerHTML = '<content select=".b"></content>';
  93. shadow("hostH").innerHTML = '<content select=".b"></content>';
  94. shadow("hostI").innerHTML = 'A<content select=".b"></content>';
  95. shadow("hostJ").innerHTML = 'A<content select=".b"></content>';
  96. shadow("hostK").innerHTML = '<content select=".b"></content>';
  97. shadow("hostL").innerHTML = '<content select=".b"></content>';
  98. shadow("hostM").innerHTML = '<content select="b"></content><content select="i"></content>';
  99. shadow("hostN").innerHTML = '<content select="b"></content><content select="i"></content>';
  100. shadow("hostO").innerHTML = '<content select="b"></content><content select="i"></content>';
  101. shadow("hostP").innerHTML = '<content select="b"></content><content select="i"></content>';
  102. shadow("hostQ").innerHTML = '<content select="b"></content><content select="i"></content>';
  103. shadow("hostR").innerHTML = '<content select="span"></content>';
  104. shadow("hostW").innerHTML = '<z style="color:red"><content select="b"></content></z>';
  105. shadow("hostX").innerHTML = '<z style="color:red"><content select="b"></content></z>';
  106. // TODO(bug 1021572?) shadow("hostY").innerHTML = '<content select="b"><style scoped>:scope{color:green}</style></content>';
  107. }
  108. function tweak() {
  109. document.body.offsetHeight;
  110. host1.appendChild(span("1"));
  111. host2.appendChild(text("2"));
  112. host3.appendChild(span("3"));
  113. host4.appendChild(text("4"));
  114. var e = span("5");
  115. e.style.display = "contents";
  116. host5.appendChild(e);
  117. host6.appendChild(span("6"));
  118. host7.appendChild(contents(text("7")));
  119. host8.appendChild(contents(span("8")));
  120. host9.appendChild(contents(text("9")));
  121. var e = contents(span("A"));
  122. e.style.display = "contents";
  123. hostA.appendChild(e);
  124. var e = contents(text("2"));
  125. e.className = "b";
  126. hostB.appendChild(e);
  127. var e = contents(text("1"));
  128. e.className = "c";
  129. hostB.appendChild(e);
  130. var e = contents(text("2"));
  131. e.className = "b after";
  132. hostC.appendChild(e);
  133. var e = contents(text("1"));
  134. e.className = "c before";
  135. hostC.appendChild(e);
  136. var e = contents(text("2"));
  137. e.className = "b before after";
  138. hostD.appendChild(e);
  139. var e = contents(text(" 3"));
  140. e.className = "b before after";
  141. hostD.appendChild(e);
  142. var e = contents(text("1"));
  143. e.className = "c before";
  144. hostD.appendChild(e);
  145. var e = contents(contents(text("2")));
  146. e.className = "before b after";
  147. hostE.appendChild(e);
  148. var e2 = contents(text("1"));
  149. e2.className = "c before after";
  150. hostE.insertBefore(e2, e);
  151. var e = contents(text("2"));
  152. e.className = "before b after";
  153. hostF.appendChild(e);
  154. var e2 = contents(text("1"));
  155. e2.className = "c before after";
  156. hostF.insertBefore(e2, e);
  157. var e = contents(contents(text("1")));
  158. e.className = "b";
  159. hostG.appendChild(e);
  160. var e = contents(text("2"));
  161. e.className = "b before after";
  162. hostG.appendChild(e);
  163. var e = contents(contents(text("2")));
  164. e.className = "b";
  165. hostH.appendChild(e);
  166. var e2 = contents(text("1"));
  167. e2.className = "b before after";
  168. hostH.insertBefore(e2, e);
  169. var e = contents(text("b"));
  170. e.className = "b";
  171. hostI.appendChild(e);
  172. var e = span("c");
  173. e.className = "b";
  174. hostI.appendChild(e);
  175. var e = contents(contents(text("b")));
  176. e.className = "b";
  177. hostJ.appendChild(e);
  178. var e = span("c");
  179. e.className = "b";
  180. hostJ.appendChild(e);
  181. var inner = span("b");
  182. inner.className = "after";
  183. var e = contents(contents(inner));
  184. e.className = "b";
  185. hostK.appendChild(e);
  186. var e = span("d");
  187. e.className = "b";
  188. hostK.appendChild(e);
  189. var inner = contents(null);
  190. inner.className = "before";
  191. var e = contents(inner);
  192. e.className = "b";
  193. hostL.appendChild(e);
  194. var e = span("b");
  195. e.className = "b";
  196. hostL.appendChild(e);
  197. hostR.appendChild(span("R"));
  198. document.body.offsetHeight;
  199. setTimeout(function() {
  200. shadow("hostS");
  201. shadow("hostT");
  202. shadow("hostU");
  203. shadow("hostV").innerHTML = '<z style="color:green"><content select="b"></content></z>';
  204. document.body.offsetHeight;
  205. document.documentElement.removeAttribute("class");
  206. },0);
  207. }
  208. if (document.body.createShadowRoot) {
  209. run();
  210. window.addEventListener("MozReftestInvalidate", tweak, false);
  211. } else {
  212. document.documentElement.removeAttribute("class");
  213. }
  214. </script>
  215. </body>
  216. </html>