Source code

Revision control

Copy as Markdown

Other Tools

/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
var gUpdateHistory = {
_view: null,
/**
* Initialize the User Interface
*/
onLoad() {
this._view = document.getElementById("historyItems");
var um = Cc["@mozilla.org/updates/update-manager;1"].getService(
Ci.nsIUpdateManager
);
var uc = um.getUpdateCount();
if (uc) {
while (this._view.hasChildNodes()) {
this._view.firstChild.remove();
}
for (var i = 0; i < uc; ++i) {
var update = um.getUpdateAt(i);
if (!update || !update.name) {
continue;
}
// Don't display updates that are downloading since they don't have
// valid statusText for the UI (bug 485493).
if (!update.statusText) {
continue;
}
var element = document.createXULElement("richlistitem");
element.className = "update";
const topLine = document.createXULElement("hbox");
const nameLabel = document.createXULElement("label");
nameLabel.className = "update-name";
document.l10n.setAttributes(nameLabel, "update-full-build-name", {
name: update.name,
buildID: update.buildID,
});
topLine.appendChild(nameLabel);
if (update.detailsURL) {
const detailsLink = document.createXULElement("label", {
is: "text-link",
});
detailsLink.href = update.detailsURL;
document.l10n.setAttributes(detailsLink, "update-details");
topLine.appendChild(detailsLink);
}
const installedOnLabel = document.createXULElement("label");
installedOnLabel.className = "update-installedOn-label";
document.l10n.setAttributes(installedOnLabel, "update-installed-on", {
date: this._formatDate(update.installDate),
});
const statusLabel = document.createXULElement("label");
statusLabel.className = "update-status-label";
document.l10n.setAttributes(statusLabel, "update-status", {
status: update.statusText,
});
element.append(topLine, installedOnLabel, statusLabel);
this._view.appendChild(element);
}
}
var cancelbutton = document.getElementById("history").getButton("cancel");
cancelbutton.focus();
},
/**
* Formats a date into human readable form
* @param seconds
* A date in seconds since 1970 epoch
* @returns A human readable date string
*/
_formatDate(seconds) {
var date = new Date(seconds);
const dtOptions = {
year: "numeric",
month: "long",
day: "numeric",
hour: "numeric",
minute: "numeric",
second: "numeric",
};
return date.toLocaleString(undefined, dtOptions);
},
};