function create_requests_table(requests) {
var overdue_requests = [];
var pending_requests = [];
var resolved_requests = [];
$.each(requests, function (i, request) {
if (request.overdue())
overdue_requests.push(request);
else if (request.pending())
pending_requests.push(request);
else if (request.resolved())
resolved_requests.push(request);
});
function sort_deadline_asc(r1, r2) {
var date1 = Date.parse(r1.deadline);
var date2 = Date.parse(r2.deadline);
if (date1 > date2) return 1;
if (date1 < date2) return -1;
return 0;
}
function sort_resolved_on_desc(r1, r2) {
var date1 = Date.parse(r1.resolved_on);
var date2 = Date.parse(r2.resolved_on);
if (date1 > date2) return -1;
if (date1 < date2) return 1;
return 0;
}
overdue_requests.sort(sort_deadline_asc);
pending_requests.sort(sort_deadline_asc);
resolved_requests.sort(sort_resolved_on_desc);
requests = overdue_requests.concat(pending_requests, resolved_requests);
var table = $('
');
table.append('ID | Title | Status | Assigned to |
');
$.each(requests, function (i, request) {
var row = create_request_row(request);
row.appendTo(table);
});
table.appendTo('#container');
}
function create_request_row(request) {
var resolved_on = request.resolved() ? moment(request.resolved_on) : null;
var deadline = moment(request.deadline);
var status_description = request.resolved() ? 'Resolved ' + resolved_on.fromNow() : 'Due ' + deadline.fromNow();
var more_info = 'Submitted by ' + request.submitted_by + ' on ' + moment(request.submitted_on).format('D MMM YYYY') + '. ' + status_description + '.
';
var title = request.title + more_info;
var row = $('
');
var rowClass = request.resolved() ? 'resolved' : (request.overdue() ? 'overdue' : 'pending');
row.addClass(rowClass);
function add_cell(text, className) {
var cell = $(' | ');
if (className) cell.addClass(className);
var data = $('' + text + '
');
data.appendTo(cell);
cell.appendTo(row);
return cell;
}
add_cell(request.id);
add_cell(title, 'title');
add_cell(request.status, 'status');
add_cell(request.assigned_to);
return row;
}
function add_methods_to_request(request) {
request.resolved = function () {
return this.status == 'resolved' || this.status == 'closed';
};
request.overdue = function () {
return !this.resolved() && moment(this.deadline).isBefore(moment());
};
request.pending = function () {
return !this.resolved() && !this.overdue();
};
}
function getParameterByName(name) {
name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
var regex = new RegExp("[\\?&]" + name + "=([^]*)"),
results = regex.exec(location.search);
return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}
$(document).ready(function () {
var team = getParameterByName('team');
if(team == null) return;
var data_file = 'data/' + team + '.json';
$.getJSON(data_file, function (data) {
$('div.title').text(data.title);
$.each(data.requests, function (i, request) {
add_methods_to_request(request);
});
create_requests_table(data.requests);
});
var font_size = getParameterByName('font-size');
$('body').css('font-size', font_size);
});