Gebruiker:MakiBoy/Gadget-LogCounter.js: verschil tussen versies

Uit Wikikids
Naar navigatie springen Naar zoeken springen
Regel 2: Regel 2:
 
// [[User:MakiBoy/Gadget-LogCounter.js]] gemaakt door [[User:MakiBoy]]
 
// [[User:MakiBoy/Gadget-LogCounter.js]] gemaakt door [[User:MakiBoy]]
  
var version = '2.8';
+
var version = '2.9';
  
 
function parseNumber(number) {
 
function parseNumber(number) {
Regel 14: Regel 14:
 
     var searchBar = '<div><input type="text" id="lc-searchbar"> <button onclick="searchTitle();">Zoek</button></div>'
 
     var searchBar = '<div><input type="text" id="lc-searchbar"> <button onclick="searchTitle();">Zoek</button></div>'
 
         + '<button onclick="reloadPagesLogCounter();">Laad alles opnieuw in</button>';
 
         + '<button onclick="reloadPagesLogCounter();">Laad alles opnieuw in</button>';
 +
    var LogCounterInfo = '<div id="logCounterInfo">Deze pagina laat zien hoeveel paginabezoeken er zijn geweest op een specifieke pagina. De rij "Views" bevat alle views. De rij "Categorie" laat alleen maar zien hoeveel views er vanuit een categorie komen.</div>';
  
 
     var table = document.createElement('table');
 
     var table = document.createElement('table');
Regel 20: Regel 21:
 
     var tableHead = document.createElement('thead');
 
     var tableHead = document.createElement('thead');
 
     var tableHeadRow = document.createElement('tr');
 
     var tableHeadRow = document.createElement('tr');
     var tableHeadTitles = ['Paginatitel', 'Laatste bezoek', 'Views', 'Hoofdpagina'];
+
     var tableHeadTitles = ['Paginatitel', 'Laatste bezoek', 'Views', 'Categorie'];
  
 
     var tableBody = document.createElement('tbody');
 
     var tableBody = document.createElement('tbody');
Regel 65: Regel 66:
 
         if (currentPage > 1) {
 
         if (currentPage > 1) {
 
             showPage(currentPage - 1);
 
             showPage(currentPage - 1);
             //Manier waarop je kunt zien op welke pagina je bent, misschien is het handiger om anders te coderen, maar ik weet niet precies hoe dat dan kan.
+
             //Manier waarop je kunt zien op welke pagina je bent
 
             document.getElementById('pageCounter').textContent = `Pagina ${currentPage} van ${totalPages}`;
 
             document.getElementById('pageCounter').textContent = `Pagina ${currentPage} van ${totalPages}`;
 
         }
 
         }
Regel 82: Regel 83:
 
         if (currentPage < totalPages) {
 
         if (currentPage < totalPages) {
 
             showPage(currentPage + 1);
 
             showPage(currentPage + 1);
             //Manier waarop je kunt zien op welke pagina je bent, misschien is het handiger om anders te coderen, maar ik weet niet precies hoe dat dan kan.
+
             //Manier waarop je kunt zien op welke pagina je bent
 
             document.getElementById('pageCounter').textContent = `Pagina ${currentPage} van ${totalPages}`;
 
             document.getElementById('pageCounter').textContent = `Pagina ${currentPage} van ${totalPages}`;
 
         }
 
         }
Regel 113: Regel 114:
  
 
     //document.getElementById('bodyContent').innerHTML = '';
 
     //document.getElementById('bodyContent').innerHTML = '';
     document.getElementById('bodyContent').innerHTML = searchBar;
+
     document.getElementById('bodyContent').innerHTML = searchBar + logCounterInfo;
 
     document.getElementById('bodyContent').appendChild(table);
 
     document.getElementById('bodyContent').appendChild(table);
 
     document.getElementById('bodyContent').appendChild(pagination);
 
     document.getElementById('bodyContent').appendChild(pagination);

Versie van 20 jan 2023 18:42

/* jshint sub:true maxerr:100000 */
// [[User:MakiBoy/Gadget-LogCounter.js]] gemaakt door [[User:MakiBoy]]

var version = '2.9';

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

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

    var searchBar = '<div><input type="text" id="lc-searchbar"> <button onclick="searchTitle();">Zoek</button></div>'
        + '<button onclick="reloadPagesLogCounter();">Laad alles opnieuw in</button>';
    var LogCounterInfo = '<div id="logCounterInfo">Deze pagina laat zien hoeveel paginabezoeken er zijn geweest op een specifieke pagina. De rij "Views" bevat alle views. De rij "Categorie" laat alleen maar zien hoeveel views er vanuit een categorie komen.</div>';

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

    var tableHead = document.createElement('thead');
    var tableHeadRow = document.createElement('tr');
    var tableHeadTitles = ['Paginatitel', 'Laatste bezoek', 'Views', 'Categorie'];

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

    var currentPage = 1;
    var rowsPerPage = mw.util.getParamValue('rows') ? parseInt(mw.util.getParamValue('rows')) : 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 mainPageVisited = page.mainPageVisitors ? parseNumber(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();

            row.innerHTML = `<td><a href="/${page.title}">${pageTitle}</a></td>
                <td>${dateString}</td>
                <td>${parseNumber(totalVisitors)}</td><td><span style="color:green; font-weight: bold;">${parseNumber(mainPageVisited)}</span></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;';
    prevButton.addEventListener('click', function () {
        if (currentPage > 1) {
            showPage(currentPage - 1);
            //Manier waarop je kunt zien op welke pagina je bent
            document.getElementById('pageCounter').textContent = `Pagina ${currentPage} van ${totalPages}`;
        }
    });
    pagination.appendChild(prevButton);

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

    var nextButton = document.createElement('button');
    nextButton.textContent = 'Volgende';
    nextButton.style = 'margin-left: 10px;';
    nextButton.addEventListener('click', function () {
        if (currentPage < totalPages) {
            showPage(currentPage + 1);
            //Manier waarop je kunt zien op welke pagina je bent
            document.getElementById('pageCounter').textContent = `Pagina ${currentPage} van ${totalPages}`;
        }
    });
    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 bezoeken: ${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').innerHTML = searchBar + logCounterInfo;
    document.getElementById('bodyContent').appendChild(table);
    document.getElementById('bodyContent').appendChild(pagination);
    document.getElementById('bodyContent').appendChild(totalElement);
}

function getCategoriesLogCounter() { //toon alleen pagina's in een specifieke categorie
	
}

function getPagesLogCounter() {
    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;
}

function searchTitle(searchQuery) {
    if (!searchQuery) {
        searchQuery = document.getElementById('lc-searchbar').value.replace(/ /g, '_');
    }
    var allPages = getPagesLogCounter();
    for (var i = 0; i < allPages.length; i++) {
        if (allPages[i].title.toLowerCase() === searchQuery.toLowerCase()) {
            var searchResult = [allPages[i]];
            showProjectLogCounter(searchResult);
            break;
        }
    }
    setTimeout(function () {
        if (!searchResult) {
    		var searchBar = '<div><input type="text" id="lc-searchbar"> <button onclick="searchTitle();">Zoek</button></div>'
        	+ '<button onclick="reloadPagesLogCounter();">Laad alles opnieuw in</button>'
        	+ '<br>De pagina <a href="https://wikikids.nl/' + searchQuery + '">' + searchQuery + '</a> heeft geen views ontvangen of bestaat niet.' 
        	+ 'Kijk voor meer <a href="https://wikikids.nl/WikiKids:LogCounter">informatie op deze pagina</a>.';
        	document.getElementById('bodyContent').innerHTML = searchBar;
        	console.log(allPages);
        	console.log(searchQuery);
        }
    }, 750);
}

function reloadPagesLogCounter() {
    var allPages = getPagesLogCounter();
    showProjectLogCounter(allPages);
}

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>';
    if (mw.util.getParamValue('page')) {
        searchTitle(mw.util.getParamValue('page'));
    } else {
        var allPages = getPagesLogCounter();
        showProjectLogCounter(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=761611"