<html>
<head>
  <title>comp-page-sk demo</title>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes">
  <script src="../../node_modules/native-promise-only/npo.js"></script>
  <script src="bower_components/webcomponentsjs/webcomponents-lite.js"></script>
  <script src="bower_components/page/page.js"></script>
  <script src="bower_components/d3/d3.js"></script>
  <script src="../common/js/common.js"></script>
  <script src="../js/gold.js"></script>
  <script src="bower_components/sinonjs/sinon.js"></script>
  <script src="testdata.js"></script>
  <script src="testdata-grid.js"></script>
  <script>
    var server = sinon.fakeServer.create();
    server.autoRespond = true;
    server.autoRespondAfter = 2000;

    server.respondWith("POST",  /\/json\/cmp*/, function(request) {
      request.respond(200, {"Content-Type":"application/json"},
                      JSON.stringify(testdata.compareData));
    })

    server.respondWith("GET", "/json/paramset", function(request) {
      request.respond(200, {"Content-Type":"application/json"},
                      JSON.stringify(testdata.paramSet));
    });

    server.respondWith("GET", /\/json\/diff*/, function(request) {
      request.respond(200, {"Content-Type":"application/json"},
        JSON.stringify(testdata.diffDigests));
    });

  </script>

  <link rel="import" href="comp-page-sk.html">

</head>
<body>
  <h2>Compare</h2>
  <comp-page-sk></comp-page-sk>
  <script type="text/javascript" charset="utf-8">
      var ctx = new page.Context(window.location.pathname);
      ctx.params.test = 'blurcircles';
      $$$('comp-page-sk').pageSelected(ctx);
  </script>
</body>
</html>
