<!DOCTYPE html>
<!-- 
     Any copyright is dedicated to the Public Domain.
     http://creativecommons.org/publicdomain/zero/1.0/
 -->
<html class="reftest-wait" lang="en-US">
  <head>
  <meta charset="utf-8">
  <title>CSS Test: CSS display:contents; in Shadow DOM</title>
  <link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=907396">
  <link rel="help" href="https://drafts.csswg.org/css-display/">
  <link rel="match" href="display-contents-shadow-dom-1-ref.html">
<style>
html,body {
  color:black; background-color:white; font:12px/1 monospace; padding:0; margin:0;
}
.before::before, ::slotted(.before)::before {content: "a ";}
.after::after, ::slotted(.after)::after {content: " c";}
div.before::before {content: "X ";}
div.after::after {content: " Y";}
.b, .c, ::slotted(.b), ::slotted(.c) { display:contents; }
</style>
  </head>
  <body>
    <div id="host1" class="before"></div>
    <span id="host2"></span>
    <div id="host3" class="after"></div>
    <div id="host4" class="before after"></div>
    <div id="host5" class="after"></div>
    <div id="host6" class="before"></div>
    <div id="host7"></div>
    <div id="host8" class="after"></div>
    <div id="host9" class="before after"></div>
    <div id="hostA" class="after"></div>
    <div id="hostB"></div>
    <div id="hostC"></div>
    <div id="hostD"></div>
    <div id="hostE"></div>
    <div id="hostF" class="before"></div>
    <div id="hostG"></div>
    <span id="hostH"></span>
    <div id="hostI"></div>
    <div id="hostJ"></div>
    <span id="hostK"></span>
    <div id="hostL"></div>
    <div id="hostM"><i slot=i>Two</i><b slot=b>One</b></div>
    <div id="hostN"><i slot=i class="c">Two</i><b slot=b>One</b></div>
    <div id="hostO"><i slot=i>Two</i><b slot=b class="c">One</b></div>
    <div id="hostP"><i slot=i class="c">Two</i><b slot=b class="c">One</b></div>
    <div id="hostQ" class="c" style="color:blue"><i slot=i class="c">Two</i><b slot=b class="c">One</b></div>Three
    <div id="hostS" class="c"><span class="c">S</span></div>
    <div id="hostT" class="c">T</div>
    <div id="hostU"><span slot="c">U</span></div>
    <div id="hostV" class="c" style="color:red"><b slot="b" class="c" style="color:inherit">V</b></div>

   <script>
      function shadow(id) {
        return document.getElementById(id).attachShadow({mode:"open"});
      }
      function span(s) {
        var e = document.createElement("span");
        var t = document.createTextNode(s);
        e.appendChild(t);
        return e;
      }
      function text(s) {
        return document.createTextNode(s);
      }
      function contents(n, slotName) {
        var e = document.createElement("z");
        e.style.display = "contents";
        e.style.color = "blue";
        if (n) e.appendChild(n);
        if (slotName) e.setAttribute("slot", slotName);
        return e;
      }

      function run() {
        document.body.offsetHeight;

        shadow("host1").innerHTML = '<slot style="display:inline"></slot> c';
        shadow("host2").innerHTML = 'a <slot style="display:contents"></slot> c';
        shadow("host3").innerHTML = 'a <slot style="display:contents"></slot>';
        shadow("host4").innerHTML = '<slot style="display:contents"></slot>';
        shadow("host5").innerHTML = 'a <slot style="display:contents"></slot>';
        shadow("host6").innerHTML = '<z style="color:blue; display:contents"><slot style="display:inline"></slot></z> c';
        shadow("host7").innerHTML = 'a <slot style="display:contents"></slot> c';
        shadow("host8").innerHTML = 'a <z style="color:blue; display:contents"><slot style="display:contents"></z></slot>';
        shadow("host9").innerHTML = '<slot style="display:contents"></slot>';
        shadow("hostA").innerHTML = 'a <slot style="display:contents"></slot>';
        shadow("hostB").innerHTML = 'a <slot name="c" style="display:contents"></slot> <slot name="b" style="display:contents"></slot> B';
        shadow("hostC").innerHTML = 'A <slot name="c" style="display:contents"></slot> <slot name="b" style="display:contents"></slot> B';
        shadow("hostD").innerHTML = 'A <slot name="c" style="display:contents"></slot> <slot name="b" style="display:contents"></slot> B <slot name="b"></slot>';
        shadow("hostE").innerHTML = 'A <slot name="c" style="display:contents"></slot> <slot name="b" style="display:contents"></slot> B';
        shadow("hostF").innerHTML = '<slot name="c" style="display:contents"></slot> <slot name="b" style="display:contents"></slot> B';
        shadow("hostG").innerHTML = '<slot name="b" style="display:contents"></slot>';
        shadow("hostH").innerHTML = '<slot name="b" style="display:contents"></slot>';
        shadow("hostI").innerHTML = 'A<slot name="b" style="display:contents"></slot>';
        shadow("hostJ").innerHTML = 'A<slot name="b" style="display:contents"></slot>';
        shadow("hostK").innerHTML = '<slot name="b" style="display:contents"></slot>';
        shadow("hostL").innerHTML = '<slot name="b" style="display:contents"></slot>';
        shadow("hostM").innerHTML = '<slot name="b" style="display:contents"></slot><slot name="i" style="display:inline"></slot>';
        shadow("hostN").innerHTML = '<slot name="b" style="display:contents"></slot><slot name="i" style="display:inline"></slot>';
        shadow("hostO").innerHTML = '<slot name="b" style="display:contents"></slot><slot name="i" style="display:inline"></slot>';
        shadow("hostP").innerHTML = '<slot name="b" style="display:contents"></slot><slot name="i" style="display:inline"></slot>';
        shadow("hostQ").innerHTML = '<slot name="b" style="display:contents"></slot><slot name="i" style="display:inline"></slot>';
      }

      function tweak() {
        document.body.offsetHeight;

        host1.appendChild(span("1"));
        host2.appendChild(text("2"));
        host3.appendChild(span("3"));
        host4.appendChild(text("4"));

        var e = span("5");
        e.style.display = "contents";
        host5.appendChild(e);

        host6.appendChild(span("6"));
        host7.appendChild(contents(text("7")));
        host8.appendChild(contents(span("8")));
        host9.appendChild(contents(text("9")));

        var e = contents(span("A"));
        hostA.appendChild(e);

        var e = contents(text("2"), "b");
        hostB.appendChild(e);
        var e = contents(text("1"), "c");
        hostB.appendChild(e);

        var e = contents(text("2"), "b");
        e.className = "after";
        hostC.appendChild(e);
        var e = contents(text("1"), "c");
        e.className = "before";
        hostC.appendChild(e);

        var e = contents(text("2"), "b");
        e.className = "before after";
        hostD.appendChild(e);
        var e = contents(text(" 3"), "b");
        e.className = "before after";
        hostD.appendChild(e);
        var e = contents(text("1"), "c");
        e.className = "before";
        hostD.appendChild(e);

        var e = contents(contents(text("2")), "b");
        e.className = "before after";
        hostE.appendChild(e);
        var e2 = contents(text("1"), "c");
        e2.className = "before after";
        hostE.insertBefore(e2, e);

        var e = contents(text("2"), "b");
        e.className = "before after";
        hostF.appendChild(e);
        var e2 = contents(text("1"), "c");
        e2.className = "before after";
        hostF.insertBefore(e2, e);

        var e = contents(contents(text("1")), "b");
        hostG.appendChild(e);
        var e = contents(text("2"), "b");
        e.className = "before after";
        hostG.appendChild(e);

        var e = contents(contents(text("2")), "b");
        hostH.appendChild(e);
        var e2 = contents(text("1"), "b");
        e2.className = "before after";
        hostH.insertBefore(e2, e);

        var e = contents(text("b"), "b");
        hostI.appendChild(e);
        var e = span("c");
        e.setAttribute("slot", "b");
        hostI.appendChild(e);

        var e = contents(contents(text("b")), "b");
        hostJ.appendChild(e);
        var e = span("c");
        e.setAttribute("slot", "b");
        hostJ.appendChild(e);

        var inner = span("b");
        inner.className = "after";
        var e = contents(contents(inner), "b");
        hostK.appendChild(e);
        var e = span("d");
        e.setAttribute("slot", "b");
        hostK.appendChild(e);

        var inner = contents(null);
        inner.className = "before";
        var e = contents(inner, "b");
        hostL.appendChild(e);
        var e = span("b");
        e.setAttribute("slot", "b");
        hostL.appendChild(e);

        document.body.offsetHeight;
        setTimeout(function() {
            shadow("hostS");
            shadow("hostT");
            shadow("hostU");
            shadow("hostV").innerHTML = '<z style="color:green"><slot name="b"></slot></z>';

            document.body.offsetHeight;
            document.documentElement.removeAttribute("class");
          },0);
      }

      run();
      setTimeout(tweak, 0);
    </script>
  </body>
</html>
