1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5/** Information about a particular status page. */
6function StatusPageInfo(statusPageName, statusPageUrl) {
7  this.date = '';
8  this.inFlight = 0;
9  this.jsonUrl = statusPageUrl + 'current?format=json';
10  this.message = '';
11  this.name = statusPageName;
12  this.state = '';
13  this.url = statusPageUrl;
14}
15
16/** Send and parse an asynchronous request to get a repo status JSON. */
17StatusPageInfo.prototype.requestJson = function() {
18  if (this.inFlight) return;
19
20  this.inFlight++;
21  gNumRequestsInFlight++;
22
23  var statusPageInfo = this;
24  var request = new XMLHttpRequest();
25  request.open('GET', this.jsonUrl, true);
26  request.onreadystatechange = function() {
27    if (request.readyState == 4 && request.status == 200) {
28      statusPageInfo.inFlight--;
29      gNumRequestsInFlight--;
30
31      var statusPageJson = JSON.parse(request.responseText);
32      statusPageInfo.date = statusPageJson.date;
33      statusPageInfo.message = statusPageJson.message;
34      statusPageInfo.state = statusPageJson.general_state;
35    }
36  };
37  request.send(null);
38};
39
40/** Creates HTML displaying the status. */
41StatusPageInfo.prototype.createHtml = function() {
42  var linkElement = document.createElement('a');
43  linkElement.href = this.url;
44  linkElement.innerHTML = this.name;
45
46  var statusElement = document.createElement('li');
47  statusElement.appendChild(linkElement);
48
49  var dateElement = document.createElement('li');
50  dateElement.innerHTML = this.date;
51
52  var messageElement = document.createElement('li');
53  messageElement.innerHTML = this.message;
54
55  var boxElement = document.createElement('ul');
56  boxElement.className = 'box ' + this.state;
57  boxElement.appendChild(statusElement);
58  boxElement.appendChild(dateElement);
59  boxElement.appendChild(messageElement);
60  return boxElement;
61};
62