Gebruiker:MakiBoy/Gadget-LogCounter.js

Uit Wikikids
Naar navigatie springen Naar zoeken springen

Let op! Nadat je de veranderingen hebt opgeslagen, moet je de cache van je browser nog legen om ze daadwerkelijk te zien.

Mozilla (incl. Firefox) ctrl-shift-r
IE ctrl-f5
Opera f5
Safari cmd-r
Konqueror f5
// [[User:MakiBoy/Gadget-LogCounter.js]] gemaakt door [[User:MakiBoy]]

var version = '2.7';

function parseNumber(number) {
    return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
}

function showProject(pages) {
    document.getElementsByTagName("h1")[0].textContent = "Speciaal:LogCounter";
    document.title = "LogCounter - WikiKids";

    var searchBar = document.createElement('input');
    searchBar.type = 'text';
    searchBar.placeholder = 'Zoek een pagina...';
    searchBar.style = 'margin-top: 20px; width: 100%;';
    searchBar.addEventListener('input', function () {
        var searchValue = searchBar.value.toLowerCase();
        var filteredPages = pages.filter(function (page) {
            return page.title.toLowerCase().includes(searchValue);
        });
        showPage(1);
        totalPages = Math.ceil(filteredPages.length / rowsPerPage);
        pageCounter.textContent = `Pagina ${currentPage} van ${totalPages}`;
        if (currentPage === totalPages) {
            nextButton.disabled = true;
        }

        if (currentPage === 1) {
            prevButton.disabled = true;
        }

        if (filteredPages.length === 0) {
            tableBody.innerHTML = '<tr><td colspan="5">Geen resultaten gevonden</td></tr>';
        }

        if (searchValue === '') {
            showPage(1);
        }
    });
    totalElement.appendChild(searchBar);

    var table = document.createElement('table');
    table.classList.add('wikitable');

    var tableHead = document.createElement('thead');
    var tableHeadRow = document.createElement('tr');
    var tableHeadTitles = ['Paginatitel', 'Laatst bezocht', 'Normaal', 'Hoofdpagina', 'Totaal aantal'];

    var tableBody = document.createElement('tbody');

    var currentPage = 1;
    var rowsPerPage = 25;
    var totalPages = Math.ceil(pages.length / rowsPerPage);

    function showPage(pageNumber) {
        currentPage = pageNumber;
        tableBody.innerHTML = '';
        var start = (currentPage - 1) * rowsPerPage;
        var end = start + rowsPerPage;
        var paginatedItems = pages.slice(start, end);
        paginatedItems.forEach(function (page) {
            var row = document.createElement('tr');
            var totalVisitors = page.normalVisitors + page.mainPageVisitors;
            var pageTitle = page.title.replace(/_/g, ' ');

            function addZero(number) {
                return number < 10 ? "0" + number : number;
            }

            var date = new Date(page.updatedAt);
            var dateString = addZero(date.getDate()) + "-" + addZero((date.getMonth() + 1)) + "-" + date.getFullYear() + " " + addZero(date.getHours()) + ":" + addZero(date.getMinutes()) + ":" + addZero(date.getSeconds());

            row.innerHTML = `<td><a href="/${page.title}?x=N">${pageTitle}</a></td>
                <td>${dateString}</td>
                <td>${parseNumber(page.normalVisitors)}</td>
                <td>${parseNumber(page.mainPageVisitors)}</td>
                <td>${parseNumber(totalVisitors)}</td>`;
            tableBody.appendChild(row);
        });
    }

    showPage(1);

    var pagination = document.createElement('div');
    pagination.classList.add('pagination');

    var prevButton = document.createElement('button');
    prevButton.textContent = 'Vorige';
    prevButton.style = 'margin-right: 10px;';
    if (currentPage === 1) {
        prevButton.disabled = true;
    }
    prevButton.addEventListener('click', function () {
        if (currentPage > 1) {
            showPage(currentPage - 1);
        }
    });
    pagination.appendChild(prevButton);

    var pageCounter = document.createElement('span');
    pageCounter.textContent = `Pagina ${currentPage} van ${totalPages}`;
    pagination.appendChild(pageCounter);

    var nextButton = document.createElement('button');
    nextButton.textContent = 'Volgende';
    nextButton.style = 'margin-left: 10px;';
    if (currentPage === totalPages) {
        nextButton.disabled = true;
    }
    nextButton.addEventListener('click', function () {
        if (currentPage < totalPages) {
            showPage(currentPage + 1);
        }
    });
    pagination.appendChild(nextButton);

    tableHeadTitles.forEach(function (title) {
        var tableHeadCell = document.createElement('th');
        tableHeadCell.textContent = title;
        tableHeadRow.appendChild(tableHeadCell);
    });
    tableHead.appendChild(tableHeadRow);
    table.appendChild(tableHead);
    table.appendChild(tableBody);

    var totalVisitors = pages.reduce(function (total, page) {
        return total + page.normalVisitors + page.mainPageVisitors;
    }, 0);

    var totalElement = document.createElement('div');
    totalElement.style = 'margin-top: 20px; display: flex; flex-direction: column;';

    var totalVisitorsElement = document.createElement('span');
    totalVisitorsElement.textContent = `Totaal aantal bezoekers: ${parseNumber(totalVisitors)}`;
    totalElement.appendChild(totalVisitorsElement);

    var totalPagesElement = document.createElement('span');
    totalPagesElement.textContent = `Totaal aantal pagina's: ${parseNumber(pages.length)}`;
    totalElement.appendChild(totalPagesElement);

    document.getElementById('bodyContent').innerHTML = '';

    document.getElementById('bodyContent').appendChild(table);
    document.getElementById('bodyContent').appendChild(pagination);
    document.getElementById('bodyContent').appendChild(totalElement);
}

function getPages() {
    var pages = [];
    var request = new XMLHttpRequest();
    request.open('GET', 'https://wikikids.martvanweeghel.nl/pages', false);
    request.send(null);
    if (request.status === 200) {
        pages = JSON.parse(request.responseText);
    }

    // Sorteer de pagina's op het aantal bezoekers (hoog naar laag) (page.normalVisitors + page.mainPageVisitors)
    pages.sort(function (a, b) {
        return b.normalVisitors + b.mainPageVisitors - a.normalVisitors - a.mainPageVisitors;
    });
    return pages;
}

if (mw.config.get('wgNamespaceNumber') === -1 && mw.config.get('wgTitle') === "LogCounter") {
    document.getElementById("footer-places").innerHTML += '<li id="footer-places-gadget-LogCounter">Script gemaakt door <a href="/User:MakiBoy" title="Gebruiker:MakiBoy">MakiBoy</a>, versie: ' + version + '</li>';
    var allPages = getPages();
    showProject(allPages);
}
Afkomstig van Wikikids , de interactieve Nederlandstalige Internet-encyclopedie voor en door kinderen. "https://wikikids.nl/index.php?title=Gebruiker:MakiBoy/Gadget-LogCounter.js&oldid=760288"