MediaWiki:Changelog.js
Appearance
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
(function ($) {
"use strict";
function createTable(id, hookObject) {
var tableStart = "<div><table id=\"" + id + "\" style=\"word-wrap: break-word;\" class=\"wikitable\">";
var tableEnd = "</table></div>";
var tableHeaders = ["Module", "Type", "Log", "Version", "Occurred errors"];
var tableHead = createTableHeader(tableHeaders);
hookObject.html(tableStart + tableHead + tableEnd);
}
function createTableHeader(headers) {
var tableHeadStart = "<thead>";
var tableHeadEnd = "</thead>";
var tableHeadRowStart = "<tr>";
var tableHeadRowEnd = "</tr>";
var tableHeadCellStart = "<th align=\"left\" style=\"\">";
var tableHeadCellEnd = "</th>";
var output = tableHeadStart + tableHeadRowStart;
jQuery.each(headers, function (i, item) {
if (item === 'Module' || item === 'Type' || item === 'Version') {
tableHeadCellStart = "<th align=\"left\" style=\"width:15%;\">";
} else if (item === 'Log') {
tableHeadCellStart = "<th align=\"left\" style=\"width:30%;\">";
} else {
tableHeadCellStart = "<th align=\"left\" style=\"width:25%;\">";
}
output = output + tableHeadCellStart + item + tableHeadCellEnd;
});
output = output + tableHeadRowEnd + tableHeadEnd;
return output;
}
function addData(tableObject, category) {
var rowStart = '<tr>';
var rowEnd = '</tr>';
var cellStart = '<td>';
var cellStartWithColspan = '<td colspan="5">';
var cellEnd = '</td>';
var breakElement = '<br />';
var url = "https://imp.inlogic.dk/api/changelog";
if (category)
url = url + "/" + category;
$.ajax({
url: url, success: function (data) {
if (!$.trim(data)) {
tableObject.append(rowStart + cellStartWithColspan + "Ingen log fundet for den valgte kategori..." + cellEnd + rowEnd);
} else {
// Group items by buildVersion
var grouped = {};
$.each(data, function (i, item) {
var version = item.buildVersion || 'Ukendt version';
if (!grouped[version]) grouped[version] = [];
grouped[version].push(item);
});
// Sort versions descending (assuming semantic versioning or numeric)
var versions = Object.keys(grouped).sort(function(a, b) {
// Try to sort as numbers, fallback to string
if (!isNaN(a) && !isNaN(b)) return b - a;
return b.localeCompare(a, undefined, {numeric: true, sensitivity: 'base'});
});
// For each version, create a new table with h2 header
$.each(versions, function (vi, version) {
// Create h2 header for version
var versionHeader = $('<h2 style="margin-top:1.5em;">Version: ' + version + '</h2>');
tableObject.parent().append(versionHeader);
// Create a new table for this version
var versionTable = $('<table style="width:100%;table-layout:fixed;word-wrap:break-word;" class="version-table wikitable"><thead></thead><tbody></tbody></table>');
// Add table header
var tableHeaders = ["Module", "Type", "Log", "Version", "Occurred errors"];
var tableHead = '';
$.each(tableHeaders, function (i, item) {
var thStyle = '';
if (item === 'Module' || item === 'Type' || item === 'Version') {
thStyle = 'width:15%';
} else if (item === 'Log') {
thStyle = 'width:30%';
} else {
thStyle = 'width:25%';
}
tableHead += '<th align="left" style="' + thStyle + '">' + item + '</th>';
});
versionTable.find('thead').append('<tr>' + tableHead + '</tr>');
// Add all items for this version
$.each(grouped[version], function (i, item) {
var logtype = "Add";
if (item.logType == 1) {
logtype = "Fix";
}
if (item.logType == 2) {
logtype = "Change";
}
var row = '<tr>';
row += '<td>' + item.licenseModules.moduleName + '</td>';
row += '<td>' + logtype + '</td>';
row += '<td>' + item.logText + '</td>';
row += '<td>' + item.buildVersion + '</td>';
row += '<td>' + (item.errorMessage || '') + '</td>';
row += '</tr>';
versionTable.find('tbody').append(row);
});
tableObject.parent().append(versionTable);
});
// Remove the original (empty) table
tableObject.remove();
}
}
});
}
createTable("backendTable", $("#backend"));
addData($("#backendTable"), 1);
createTable("frontendTable", $("#frontend"));
addData($("#frontendTable"), 2);
createTable("appTable", $("#app"));
addData($("#appTable"), 3);
createTable("absenceTable", $("#absence"));
addData($("#absenceTable"), 4);
createTable("professionalTable", $("#professional"));
addData($("#professionalTable"), 5);
createTable("guardianTable", $("#guardian"));
addData($("#guardianTable"), 6);
createTable("smsgatewayTable", $("#smsgatewayserver"));
addData($("#smsgatewayTable"), 8);
})(jQuery);