jul/js/latestposts.js
2015-08-08 22:45:34 -07:00

118 lines
3.6 KiB
JavaScript

function filter(func, list) {
var retl = [];
var idx = 0;
for (var i = 0; i < list.length; i++) {
if (func(list[i]) == 1) {
retl[idx] = list[i];
idx++;
}
}
return retl;
}
function pluralize(val, str) {
if (val == 1) {
return String(val) + " " + str;
} else if (val == 0 || val >= 2) {
return String(val) + " " + str + "s";
}
}
function htmlattrs(attrs) {
var attrStrings = [];
for (var i in attrs) {
attrStrings.push(i + '="' + attrs[i] + '"');
}
return attrStrings.join(" ");
}
var gen_row = function (elements, attrs) { return "<tr"+(attrs["row"]!=undefined?" "+htmlattrs(attrs["row"]):"")+">"+elements.join("")+"</tr>"; }
var gen_cell = function (text, attrs) { return "<td"+(attrs!=undefined?" "+htmlattrs(attrs):"")+">"+text+"</td>"; }
function htmlchars(str) {
return str;
}
function linkify(text, attrs) {
var attrStrings = [];
for (var i in attrs) {
attrStrings.push(i + '="' + htmlchars(attrs[i]) + '"')
}
return "<a "+(attrStrings.join(" "))+">"+htmlchars(text)+"</a>";
}
var postlist = function() {$.get("latestposts.php", {raw: 1}, function(data) {
var ctime = new Date();
var lines = data.split("\n");
var splitter = /"(.*?)"/gi;
var noCommas = function(e) { return e != ","; }
var rows = [];
for (var i = 0; i < lines.length; i++) {
rows[i] = filter(noCommas, lines[i].split(splitter));
rows[i].splice(0,1);
}
var html_rows = function() {
var trows = [];
var statr1 = {class: "tbl tdbg1 font center"};
var statr2 = {class: "tbl tdbg2 font"};
var statr3 = {class: "tbl tdbg1 font"};
var statr4 = {class: "tbl tdbg2 font center"};
trows[0] = gen_row([gen_cell("<b>Latest Posts</b>", {class: "tbl tdbgc font center", colspan: "5"})], {});
trows[1] = gen_row([
gen_cell("&nbsp;", {class: "tbl tdbgh font center", width: 30}),
gen_cell("Forum", {class: "tbl tdbgh font center", width: 200}),
gen_cell("Thread",{class: "tbl tdbgh font center"}),
gen_cell("User", {class: "tbl tdbgh font center", width: 200}),
gen_cell("Time", {class: "tbl tdbgh font center", width: 130})], {});
for (var i = 2; i < rows.length; i++) {
var trow = rows[i-2];
var dt = new datetime(trow[8]);
trows[i] = gen_row([
gen_cell(trow[0], statr2),
gen_cell(linkify(trow[1], {href: "/forum.php?id="+trow[2], target: "blank"}),statr4),
gen_cell(linkify(trow[3], {href: "/thread.php?pid="+trow[0]+"&r=1#"+trow[0], target: "blank"}), statr3),
gen_cell("<span style='font-weight: bold; color: #"+trow[7]+";'>"+trow[4]+"</span>", statr1),
gen_cell(dt.since(), statr4)
], {});
}
var html = trows.join("");
return html;
};
$("table[name=latest]").html(html_rows());
});}
function datetime(tstamp) {
var ctime = new Date();
this.timestamp = tstamp-10800;
this.now = ctime.valueOf()/1000;
this.since = function() {
var delta = (this.now - this.timestamp);
if (delta >= 0 && delta <= 10) {
return "Just now";
} else if (delta < 60 && delta > 10) {
var val = Math.round(delta/60).toString();
return pluralize(val, "second")
} else if (delta < 3600 && delta > 59) {
var val = Math.round(delta/60).toString();
return pluralize(val, "minute");
} else if (delta < 86400 && delta > 3599) {
var val = Math.round(delta/3600).toString();
return pluralize(val, "hour");
}
return delta;
}
this.idelta = function() {
return (this.now - this.timestamp);
}
}
$(document).ready(function() {
var UPDATE_TIME = 250;
postlist();
setInterval(
function() {
postlist();
}, 30000);
});