<html>
<head>
  <title>ignores-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="bower_components/sinonjs/sinon.js"></script>
  <script src="testdata.js"></script>
  <script>
    var server = sinon.fakeServer.create();
    server.respondImmediately = true;

    server.respondWith("POST", "/json/ignores/add/", function(request) {
      request.respond(200, {"Content-Type":"application/json"},
        JSON.stringify(testdata.ignoresResult));
    });

    server.respondWith(/\/json\/ignores\/save\/(\d+)/, function(request, id) {
      request.respond(200, {"Content-Type":"application/json"},
        JSON.stringify(testdata.ignoresResult));
    });

    server.respondWith(/\/json\/ignores\/del\/(\d+)/, function(request) {
      request.respond(200, {"Content-Type":"application/json"},
        JSON.stringify(testdata.ignoresResult));
    });

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

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

  </script>

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

</head>
<body>
  <ignores-page-sk></ignores-page-sk>
  <script type="text/javascript" charset="utf-8">
      $$$('ignores-page-sk').pageSelected();
  </script>
</body>
</html>
