<html>
<head>
  <title>alert-config-sk demo</title>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <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 type="text/javascript" charset="utf-8">
    sk.perf = {};
    sk.perf.key_order = [];
    // Mock out sk.post() to return random numbers for matches.
    sk.post= function(url) {
      if (url.indexOf('alert/bug/try') != -1) {
        return new Promise(function (resolve, reject) {
          resolve('{ "url": "https://perf.skia.org" }');
        });
      } else {
        return new Promise(function (resolve, reject) {
          var n = Math.floor(Math.random() * 100);
          resolve('{"count":' + n + '}');
        });
      }
    };
  </script>
  <script src="/res/imp/bower_components/webcomponentsjs/webcomponents-lite.js"></script>
  <link rel=import href="/res/imp/bower_components/polymer/polymer.html">
  <link rel=import href="alert-config.html">
  <style type="text/css" media="screen">
    body {
      font-family:Helvetica,Arial,'Bitstream Vera Sans',sans-serif;
    }

    alert-config-sk {
      display: block;
      margin: 2em;
      padding: 1em;
      border: solid lightgray 1px;
    }
  </style>
</head>
<body>
  <h1>alert-config-sk</h1>

  <template id="t" is="dom-bind">
    <alert-config-sk id=editor config="{{config}}"></alert-config-sk>
    <h2>Value</h2>
  </template>
  <pre id=value></pre>

  <script type="text/javascript" charset="utf-8">
    $$$("#t").addEventListener('dom-change', function() {
      // auto-binding template is ready.
      var paramset = {
        "config": ["565", "8888"],
        "type": ["CPU", "GPU"],
        "units": ["ms", "bytes"],
        "test": [
          "DeferredSurfaceCopy_discardable",
          "DeferredSurfaceCopy_nonDiscardable",
          "GLInstancedArraysBench_instance",
          "GLInstancedArraysBench_one_0",
          "GLInstancedArraysBench_one_1",
          "GLInstancedArraysBench_one_2",
          "GLInstancedArraysBench_one_4",
          "GLInstancedArraysBench_one_8",
          "GLInstancedArraysBench_two_0",
          "GLInstancedArraysBench_two_1",
          "GLInstancedArraysBench_two_2",
          "GLInstancedArraysBench_two_4",
          "GLInstancedArraysBench_two_8",
          "GLVec4ScalarBench_scalar_1_stage",
          "GLVec4ScalarBench_scalar_2_stage",
        ],
      };
      var config = {
        query: "config=565",
        alert: "alerts@example.com",
        interesting: 25,
        bug_uri_template: "http://example.com/{description}/{url}",
        algo: "stepfit",
        owner: "somebody@example.org",
      };
      $$$('#editor').paramset = paramset;
      $$$('#editor').config = config;
      $$$('#editor').addEventListener('config-changed', function(e) {
        $$$('#value').textContent = JSON.stringify($$$('#editor').config, null, '  ');
      });

    });
  </script>

</body>
</html>
