<html>
<head>
  <title>fuzzer-widget-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="/res/common/js/common.js"></script>
  <script src="/res/imp/bower_components/webcomponentsjs/webcomponents-lite.js"></script>
  <script src="/res/imp/sinon-1.17.2.js"></script>
  <script type="text/javascript">
    sinon.log = function(message) {console.log(message);};
    let server = sinon.fakeServer.create();
    server.autoRespond = true;

    let data = [
      {
        'category': 'api_draw_functions',
        'categoryDisplay': 'API - CanvasDrawFunctions',
        'highPriorityCount': 0,
        'mediumPriorityCount': 6,
        'lowPriorityCount': 10,
        'status': 'stable',
        'groomer': 'alpha'
      },
      {
        'category': 'skp',
        'categoryDisplay': 'SKP from ReadBuffer',
        'highPriorityCount': 0,
        'mediumPriorityCount': 3,
        'lowPriorityCount': 47,
        'status': 'experimental',
        'groomer': 'beta'
      },
      {
        'category': 'sksl2glsl',
        'categoryDisplay': 'SKSL Compiler (GLSL)',
        'highPriorityCount': 2,
        'mediumPriorityCount': 23,
        'lowPriorityCount': 9,
        'status': 'experimental',
        'groomer': 'gamma'
      },
      {
        'category': 'textblob',
        'categoryDisplay': 'TextBlob deserialize',
        'highPriorityCount': 1,
        'mediumPriorityCount': 0,
        'lowPriorityCount': 2,
        'status': 'stable',
        'groomer': 'delta'
      }
    ];
    server.respondWith('GET', 'https://fuzzer.skia.org/json/fuzz-summary', function(request){
        if (!$$$("#loggedin").checked) {
          request.respond(307, {}, 'If not logged in, redirect to oauth page');
          return;
        }
        request.respond(200, {'Content-Type':'application/json'}, JSON.stringify(data));
      });


  </script>
  <link rel="import" href="/res/imp/bower_components/polymer/polymer.html">
  <link rel=import href='fuzzer-widget-sk'>
</head>
<body>
  <h1>fuzzer-widget-sk demo</h1>
  <div>Logged in <input id="loggedin" type="checkbox"></div>
  <fuzzer-widget-sk style="width:400px" reload=5></fuzzer-widget-sk>
</body>
</html>
