Platesmania Code Counter

Show country statistics for a user

Vous devrez installer une extension telle que Tampermonkey, Greasemonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Userscripts pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension de gestionnaire de script utilisateur pour installer ce script.

(J'ai déjà un gestionnaire de scripts utilisateur, laissez-moi l'installer !)

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

(J'ai déjà un gestionnaire de style utilisateur, laissez-moi l'installer!)

// ==UserScript==
// @name         Platesmania Code Counter
// @version      1.1.2
// @description  Show country statistics for a user
// @author       You
// @match        https://platesmania.com/user*
// @grant        none
// @license     MIT
// @namespace https://greasyfork.org/users/976031
// ==/UserScript==

(function () {
    'use strict';

    if (!/^\/user\d+$/.test(location.pathname)) return;

    const userId = window.location.href.match(/user(\d+)/)?.[1];
    if (!userId) {
        console.error('User ID could not be extracted.');
        return;
    }
    const button = document.createElement('button');
    button.innerHTML = 'Show Code Stats';
    Object.assign(button.style, {
        position: 'fixed',
        bottom: '10px',
        left: '10px',
        zIndex: '1000',
        padding: '10px 15px',
        backgroundColor: 'black',
        color: '#fff',
        border: 'none',
        borderRadius: '5px',
        cursor: 'pointer',
        display: 'flex',
        alignItems: 'center',
        gap: '10px',
    });
    const spinner = document.createElement('img');
    spinner.src = 'https://upload.wikimedia.org/wikipedia/commons/b/b9/Youtube_loading_symbol_1_%28wobbly%29.gif';
    Object.assign(spinner.style, {
        width: '20px',
        height: '20px',
        display: 'none',
    });
    button.appendChild(spinner);
    document.body.appendChild(button);
    button.addEventListener('click', async () => {
        const urls = [
            { url: `https://platesmania.com/userreg.php?gallery=al-${userId}`, name: `Albania` },
            { url: `https://platesmania.com/userreg.php?gallery=au-${userId}`, name: `Australia` },
            { url: `https://platesmania.com/userreg.php?gallery=at1-${userId}`, name: `Austria (1947 year system)` },
            { url: `https://platesmania.com/userreg.php?gallery=at3-${userId}`, name: `Austria (1990)` },
            { url: `https://platesmania.com/userreg.php?gallery=at2-${userId}`, name: `Austria (Official services and consulates)` },
            { url: `https://platesmania.com/userreg.php?gallery=az-${userId}`, name: `Azerbaijan` },
            { url: `https://platesmania.com/userreg.php?gallery=by3-${userId}`, name: `Belarus (1992)` },
            { url: `https://platesmania.com/userreg.php?gallery=by2-${userId}`, name: `Belarus (2000)` },
            { url: `https://platesmania.com/userreg.php?gallery=by1-${userId}`, name: `Belarus (2004)` },
            { url: `https://platesmania.com/userreg.php?gallery=br-${userId}`, name: `Brazil` },
            { url: `https://platesmania.com/userreg.php?gallery=bg-${userId}`, name: `Bulgaria` },
            { url: `https://platesmania.com/userreg.php?gallery=kh2-${userId}`, name: `Cambodia (Authorities)` },
            { url: `https://platesmania.com/userreg.php?gallery=kh1-${userId}`, name: `Cambodia (Regular plates)` },
            { url: `https://platesmania.com/userreg.php?gallery=ca-${userId}`, name: `Canada` },
            { url: `https://platesmania.com/userreg.php?gallery=cn-${userId}`, name: `China` },
            { url: `https://platesmania.com/userreg.php?gallery=hr-${userId}`, name: `Croatia` },
            { url: `https://platesmania.com/userreg.php?gallery=cz3-${userId}`, name: `Czech Republic (1960)` },
            { url: `https://platesmania.com/userreg.php?gallery=cz1-${userId}`, name: `Czech Republic (Cars, Motorcycles, Dealer)` },
            { url: `https://platesmania.com/userreg.php?gallery=cz2-${userId}`, name: `Czech Republic (Sportcars, Oldtimers)` },
            { url: `https://platesmania.com/userreg.php?gallery=eg1-${userId}`, name: `Egypt (2008)` },
            { url: `https://platesmania.com/userreg.php?gallery=fr2-${userId}`, name: `France (FNI)` },
            { url: `https://platesmania.com/userreg.php?gallery=fr1-${userId}`, name: `France (SIV)` },
            { url: `https://platesmania.com/userreg.php?gallery=de-${userId}`, name: `Germany` },
            { url: `https://platesmania.com/userreg.php?gallery=gr-${userId}`, name: `Greece` },
            { url: `https://platesmania.com/userreg.php?gallery=is1-${userId}`, name: `Iceland` },
            { url: `https://platesmania.com/userreg.php?gallery=is2-${userId}`, name: `Iceland (Diplomatic)` },
            { url: `https://platesmania.com/userreg.php?gallery=id-${userId}`, name: `Indonesia` },
            { url: `https://platesmania.com/userreg.php?gallery=iq-${userId}`, name: `Iraq` },
            { url: `https://platesmania.com/userreg.php?gallery=ie-${userId}`, name: `Ireland` },
            { url: `https://platesmania.com/userreg.php?gallery=it2-${userId}`, name: `Italy (1927)` },
            { url: `https://platesmania.com/userreg.php?gallery=it1-${userId}`, name: `Italy (1994)` },
            { url: `https://platesmania.com/userreg.php?gallery=jp-${userId}`, name: `Japan` },
            { url: `https://platesmania.com/userreg.php?gallery=kz1-${userId}`, name: `Kazakhstan (1993)` },
            { url: `https://platesmania.com/userreg.php?gallery=kz2-${userId}`, name: `Kazakhstan (2012)` },
            { url: `https://platesmania.com/userreg.php?gallery=kg1-${userId}`, name: `Kyrgyzstan (1994)` },
            { url: `https://platesmania.com/userreg.php?gallery=kg2-${userId}`, name: `Kyrgyzstan (2016)` },
            { url: `https://platesmania.com/userreg.php?gallery=my1-${userId}`, name: `Malaysia (A(BC) 1(234))` },
            { url: `https://platesmania.com/userreg.php?gallery=my2-${userId}`, name: `Malaysia (AB(C) 1(234) D)` },
            { url: `https://platesmania.com/userreg.php?gallery=my4-${userId}`, name: `Malaysia, Military` },
            { url: `https://platesmania.com/userreg.php?gallery=my3-${userId}`, name: `Malaysia, Taxi` },
            { url: `https://platesmania.com/userreg.php?gallery=mx-${userId}`, name: `Mexico` },
            { url: `https://platesmania.com/userreg.php?gallery=md1-${userId}`, name: `Moldova` },
            { url: `https://platesmania.com/userreg.php?gallery=mn-${userId}`, name: `Mongolia` },
            { url: `https://platesmania.com/userreg.php?gallery=me-${userId}`, name: `Montenegro` },
            { url: `https://platesmania.com/userreg.php?gallery=ma-${userId}`, name: `Morocco` },
            { url: `https://platesmania.com/userreg.php?gallery=mk1-${userId}`, name: `North Macedonia (1993)` },
            { url: `https://platesmania.com/userreg.php?gallery=mk2-${userId}`, name: `North Macedonia (2012)` },
            { url: `https://platesmania.com/userreg.php?gallery=no3-${userId}`, name: `Norway (1913-1971 - system)` },
            { url: `https://platesmania.com/userreg.php?gallery=no1-${userId}`, name: `Norway (Cars, Commercial vehicles, Tax-exempt vehicles)` },
            { url: `https://platesmania.com/userreg.php?gallery=no4-${userId}`, name: `Norway (Export/Tourist)` },
            { url: `https://platesmania.com/userreg.php?gallery=no2-${userId}`, name: `Norway (Trailers, motorcycles, special vehicles)` },
            { url: `https://platesmania.com/userreg.php?gallery=ps1-${userId}`, name: `Palestinian Authority (1994)` },
            { url: `https://platesmania.com/userreg.php?gallery=ps2-${userId}`, name: `Palestinian Authority (2018)` },
            { url: `https://platesmania.com/userreg.php?gallery=pl4-${userId}`, name: `Poland (1976)` },
            { url: `https://platesmania.com/userreg.php?gallery=pl1-${userId}`, name: `Poland (2000)` },
            { url: `https://platesmania.com/userreg.php?gallery=pl2-${userId}`, name: `Poland (Authorities, Military)` },
            { url: `https://platesmania.com/userreg.php?gallery=pl3-${userId}`, name: `Poland (Provisional and testing, Vanity Plates)` },
            { url: `https://platesmania.com/userreg.php?gallery=pt-${userId}`, name: `Portugal` },
            { url: `https://platesmania.com/userreg.php?gallery=ro-${userId}`, name: `Romania` },
            { url: `https://platesmania.com/userreg.php?gallery=ru-${userId}`, name: `Russia` },
            { url: `https://platesmania.com/userreg.php?gallery=rs-${userId}`, name: `Serbia` },
            { url: `https://platesmania.com/userreg.php?gallery=sk-${userId}`, name: `Slovakia` },
            { url: `https://platesmania.com/userreg.php?gallery=si-${userId}`, name: `Slovenia` },
            { url: `https://platesmania.com/userreg.php?gallery=kr-${userId}`, name: `South Korea` },
            { url: `https://platesmania.com/userreg.php?gallery=es4-${userId}`, name: `Spain (1900 year series)` },
            { url: `https://platesmania.com/userreg.php?gallery=es3-${userId}`, name: `Spain (1971 year series)` },
            { url: `https://platesmania.com/userreg.php?gallery=es2-${userId}`, name: `Spain (Official and military plates)` },
            { url: `https://platesmania.com/userreg.php?gallery=es1-${userId}`, name: `Spain (Specialty plates)` },
            { url: `https://platesmania.com/userreg.php?gallery=ch-${userId}`, name: `Switzerland` },
            { url: `https://platesmania.com/userreg.php?gallery=tj1-${userId}`, name: `Tajikistan (1996)` },
            { url: `https://platesmania.com/userreg.php?gallery=tj2-${userId}`, name: `Tajikistan (2009)` },
            { url: `https://platesmania.com/userreg.php?gallery=th-${userId}`, name: `Thailand` },
            { url: `https://platesmania.com/userreg.php?gallery=xx-${userId}`, name: `Transnistria (cars)` },
            { url: `https://platesmania.com/userreg.php?gallery=tr-${userId}`, name: `Turkey` },
            { url: `https://platesmania.com/userreg.php?gallery=ae-${userId}`, name: `UAE` },
            { url: `https://platesmania.com/userreg.php?gallery=us-${userId}`, name: `USA` },
            { url: `https://platesmania.com/userreg.php?gallery=su2-${userId}`, name: `USSR (1958)` },
            { url: `https://platesmania.com/userreg.php?gallery=su4-${userId}`, name: `USSR (1958, Trailers)` },
            { url: `https://platesmania.com/userreg.php?gallery=su1-${userId}`, name: `USSR (1977)` },
            { url: `https://platesmania.com/userreg.php?gallery=su3-${userId}`, name: `USSR (1977, Trailers)` },
            { url: `https://platesmania.com/userreg.php?gallery=ua1-${userId}`, name: `Ukraine (2004)` },
            { url: `https://platesmania.com/userreg.php?gallery=ua3-${userId}`, name: `Ukraine (Dealer 2004)` },
            { url: `https://platesmania.com/userreg.php?gallery=ua2-${userId}`, name: `Ukraine (Transit plates, Police, 2004)` },
            { url: `https://platesmania.com/userreg.php?gallery=uk5-${userId}`, name: `United Kingdom (1932 / 1903)` },
            { url: `https://platesmania.com/userreg.php?gallery=uk4-${userId}`, name: `United Kingdom (1963)` },
            { url: `https://platesmania.com/userreg.php?gallery=uk3-${userId}`, name: `United Kingdom (1983)` },
            { url: `https://platesmania.com/userreg.php?gallery=uk1-${userId}`, name: `United Kingdom (2001)` },
            { url: `https://platesmania.com/userreg.php?gallery=uk2-${userId}`, name: `United Kingdom (Northern Ireland (1966))` },
            { url: `https://platesmania.com/userreg.php?gallery=uz-${userId}`, name: `Uzbekistan` },
            { url: `https://platesmania.com/userreg.php?gallery=vn-${userId}`, name: `Vietnam` },
        ];
        const stats = [];
        for (const { name, url } of urls) {
            const response = await fetch(url);
            const text = await response.text();
            const parser = new DOMParser();
            const doc = parser.parseFromString(text, 'text/html');
            const tableRows = doc.querySelectorAll('#example tbody tr');
            let spotted = 0;
            let total = 0;
            tableRows.forEach(row => {
                total++;
                const spotsCell = row.querySelector('td:nth-child(4)');
                if (spotsCell && spotsCell.querySelector('a')) {
                    spotted++;
                }
            });
            const percentage = total > 0 ? ((spotted / total) * 100).toFixed(2) : "0.00";
            const barWidth = percentage > 0 ? Math.min(100, percentage) : 0;
            const barHTML = `<div style="background: #ccc; height: 10px; width: 100%; border-radius: 5px; overflow: hidden;">
                    <div style="background: #007bff; height: 100%; width: ${barWidth}%;"></div>
                 </div>`;
            stats.push({ name, spotted, total, percentage, barHTML });
            spinner.style.display = 'inline';
            button.textContent = `Fetching ${name}...`;
            button.appendChild(spinner);
            console.log(`Fetched ${name}`);
        }
        spinner.style.display = 'none';
        button.textContent = 'Done';
        button.remove();
        const popup = document.createElement('div');
        Object.assign(popup.style, {
            position: 'fixed',
            top: '50%',
            left: '50%',
            transform: 'translate(-50%, -50%)',
            backgroundColor: '#fff',
            border: '1px solid #ccc',
            padding: '20px',
            zIndex: '9999',
            boxShadow: '0 0 10px rgba(0, 0, 0, 0.1)',
            maxHeight: '90vh',
            overflowY: 'auto',
        });
        const heading = document.createElement('h3');
        heading.textContent = `Code Spotting Statistics for User ${userId}`;
        popup.appendChild(heading);
        stats.forEach(({ name, spotted, total, percentage, barHTML }) => {
            const statDiv = document.createElement('div');
            statDiv.style.marginBottom = '15px';
            const statText = document.createElement('p');
            statText.textContent = `${name}: ${spotted} / ${total} (${percentage}%)`;
            statDiv.appendChild(statText);
            const barContainer = document.createElement('div');
            barContainer.innerHTML = barHTML;
            statDiv.appendChild(barContainer);
            popup.appendChild(statDiv);
        });
        const closeButton = document.createElement('button');
        closeButton.textContent = 'Close';
        Object.assign(closeButton.style, {
            marginTop: '10px',
            padding: '5px 10px',
            backgroundColor: '#dc3545',
            color: '#fff',
            border: 'none',
            borderRadius: '3px',
            cursor: 'pointer',
        });
        closeButton.addEventListener('click', () => popup.remove());
        popup.appendChild(closeButton);
        document.body.appendChild(popup);
    });
})();