RosettaCode Conribution Records Counter

count specific li elements within section.mw-pager-body

// ==UserScript==
// @name         RosettaCode Conribution Records Counter
// @namespace    http://tampermonkey.net/
// @version      1.0.2
// @description  count specific li elements within section.mw-pager-body
// @author       aspen138
// @match        *://rosettacode.org/wiki/Special:Contributions?end=&limit=5000&namespace=all&start=&tagfilter=&target=*
// @match        *://rosettacode.org/wiki/Special:Contributions*
// @grant        none
// @license    MIT
// ==/UserScript==


(function() {
    'use strict';

    function countAndDisplayDistinctTitles() {
        // Find the target section
        var section = document.querySelector('section.mw-pager-body');
        if (!section) return;

        // Collect all title attributes from 'a' elements
        var liElements = section.querySelectorAll('a.mw-contributions-title');
        var titlesSet = new Set();
        liElements.forEach(function(aElement) {
            var title = aElement.getAttribute('title');
            if (title && !title.startsWith('User:') && !title.startsWith('File:')) {
                titlesSet.add(title);
            }
        });
        console.log('titlesSet=',titlesSet);

        // Count distinct titles
        var countDistinctTitles = titlesSet.size;

        // Create a new element to display the count of distinct titles
        var resultDisplay = document.createElement('div');
        resultDisplay.textContent = `(RosettaCode Contribution Records Counter) Count of distinct titles: ${countDistinctTitles}`;
        resultDisplay.style.backgroundColor = 'yellow'; // Set the background color to yellow
        resultDisplay.style.color = 'blue'; // Optional: Set text color to blue for better readability
        resultDisplay.style.padding = '10px'; // Optional: Add some padding
        resultDisplay.style.marginBottom = '10px'; // Optional: Add some margin at the bottom
        resultDisplay.style.border = "2px solid black";

        // Insert the results as the first child of the section
        if (section.firstChild) {
            section.insertBefore(resultDisplay, section.firstChild);
        } else {
            section.appendChild(resultDisplay);
        }
    }

    // Assuming this function is called when the document is fully loaded
    window.addEventListener('load', countAndDisplayDistinctTitles);
})();