Jump to content

MediaWiki:Changelog.js: Difference between revisions

From UmsWiki
No edit summary
No edit summary
Line 74: Line 74:
                     $.each(versions, function (vi, version) {
                     $.each(versions, function (vi, version) {
                         // Create h2 header for version
                         // Create h2 header for version
                         var versionHeader = $('<h2 style="margin-top:1.5em;">Version: ' + version + '</h2>');
                         var versionHeader = $('<h3 style="margin-top:1.5em;">Version: ' + version + '</h3>');
                         tableObject.parent().append(versionHeader);
                         tableObject.parent().append(versionHeader);



Revision as of 10:42, 11 August 2025

(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 = $('<h3 style="margin-top:1.5em;">Version: ' + version + '</h3>');
                        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);