"use strict";
let EXPORTED_SYMBOLS = ["Versions"];
var Cu = Components.utils;
Cu.import("resource://gre/modules/Services.jsm");
let Versions = {
showPage: function(document, db, query, page) {
document.body.className += " gutter versions";
if (page === undefined) {
page = 1;
}
let data = this.loadData(db, query, page);
document.title = data.name + " :: Versions :: Classic Add-ons Archive";
let template = this.template;
template = this.processTemplate(template, data);
let contfrag = document.createRange().createContextualFragment(template);
let pagediv = document.getElementById("page");
let frag = contfrag.firstElementChild;
pagediv.appendChild(frag);
},
loadData: function(db, query, page) {
let col;
if (/^\d+$/.test(query)) {
col = "addon_id";
} else {
col = "slug";
}
let data = {};
let dbQuery = db.createStatement("SELECT COUNT(*) as count, addons.name AS name, slug FROM addons INNER JOIN versions ON addons.addon_id = versions.addon_id WHERE addons." + col + " = :query");
dbQuery.params.query = query;
dbQuery.executeStep();
data.name = dbQuery.row.name;
data.slug = dbQuery.row.slug;
let count = dbQuery.row.count;
dbQuery.finalize();
data.page = page;
data.count = new Intl.NumberFormat("en-US").format(count);
data.pages = Math.ceil(count / 30);
let pfrom = (page - 1) * 30 + 1;
data.pfrom = new Intl.NumberFormat("en-US").format(pfrom);
let pto = (pfrom + 29 < count) ? pfrom + 29 : count;
data.pto = new Intl.NumberFormat("en-US").format(pto);
if (page == 1) {
data.disprev = "disabled";
data.prev = "";
} else {
data.disprev = "";
data.prev = parseInt(page) - 1;
}
if (page == data.pages) {
data.disnext = "disabled";
data.next = "";
} else {
data.disnext = "";
data.next = parseInt(page) + 1;
}
dbQuery = db.createStatement("SELECT is_experimental, version, platform, release_notes, is_restart_required, versions.url AS url, min, max, size, created, licenses.name AS lic_name, licenses.url AS lic_url FROM addons INNER JOIN versions ON addons.addon_id = versions.addon_id LEFT JOIN licenses ON licenses.license_id = versions.license_id WHERE addons." + col + " = :query ORDER BY created DESC LIMIT 30 OFFSET :offset");
dbQuery.params.query = query;
dbQuery.params.offset = pfrom - 1;
data.items = "";
while (dbQuery.executeStep()) {
let item = this.item;
let experiment = "";
if (dbQuery.row.is_experimental) {
experiment = 'caution';
}
item = item.replace("%EXPERIMENT%", experiment);
let platform = "";
if (dbQuery.row.platform != "" && dbQuery.row.platform != "all") {
platform = " (" + dbQuery.row.platform + ")";
}
item = item.replace(/%VERSION%/g, dbQuery.row.version + platform);
item = item.replace("%RELNOTE%", dbQuery.row.release_notes.replace(/(?:\r\n|\r|\n)/g, "
").replace("$", "$"));
let restart = "";
if (dbQuery.row.is_restart_required == false) {
restart = ' No Restart';
}
item = item.replace("%RESTART%", restart);
item = item.replace("%MIN%", dbQuery.row.min);
item = item.replace("%MAX%", dbQuery.row.max);
let size, nBytes = dbQuery.row.size;
for (let aMultiples = ["KiB", "MiB", "GiB"], nMultiple = 0, nApprox = nBytes / 1024;
nApprox > 1; nApprox /= 1024, nMultiple++) {
size = nApprox.toFixed(1) + " " + aMultiples[nMultiple];
};
item = item.replace("%SIZE%", size);
let created = new Date(dbQuery.row.created*1000);
item = item.replace("%RELDATE%", created.toLocaleDateString('en-US', {year: 'numeric', month: 'long', day: 'numeric'}));
let license;
if (dbQuery.row.lic_url !== null) {
let lic_url, target;
if (dbQuery.row.lic_url != "") {
lic_url = dbQuery.row.lic_url;
target = 'target="_blank"';
} else {
lic_url = "caa:addon/" + data.slug + "/license/" + dbQuery.row.version;
target = '';
}
license = '
This add-on is not compatible with your version of Firefox because of the following: