blob: 2f116824901da385b2db925b39f9964bb2674bb0 [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/** Information about a particular status page. */
function StatusPageInfo(statusPageName, statusPageUrl) {
this.date = '';
this.inFlight = 0;
this.jsonUrl = statusPageUrl + 'current?format=json';
this.message = '';
this.name = statusPageName;
this.state = '';
this.url = statusPageUrl;
}
/** Send and parse an asynchronous request to get a repo status JSON. */
StatusPageInfo.prototype.requestJson = function() {
if (this.inFlight) return;
this.inFlight++;
gNumRequestsInFlight++;
var statusPageInfo = this;
var request = new XMLHttpRequest();
request.open('GET', this.jsonUrl, true);
request.onreadystatechange = function() {
if (request.readyState == 4 && request.status == 200) {
statusPageInfo.inFlight--;
gNumRequestsInFlight--;
var statusPageJson = JSON.parse(request.responseText);
statusPageInfo.date = statusPageJson.date;
statusPageInfo.message = statusPageJson.message;
statusPageInfo.state = statusPageJson.general_state;
}
};
request.send(null);
};
/** Creates HTML displaying the status. */
StatusPageInfo.prototype.createHtml = function() {
var linkElement = document.createElement('a');
linkElement.href = this.url;
linkElement.innerHTML = this.name;
var statusElement = document.createElement('li');
statusElement.appendChild(linkElement);
var dateElement = document.createElement('li');
dateElement.innerHTML = this.date;
var messageElement = document.createElement('li');
messageElement.innerHTML = this.message;
var boxElement = document.createElement('ul');
boxElement.className = 'box ' + this.state;
boxElement.appendChild(statusElement);
boxElement.appendChild(dateElement);
boxElement.appendChild(messageElement);
return boxElement;
};