Platesmania Code Counter

Show country statistics for a user

Dovrai installare un'estensione come Tampermonkey, Greasemonkey o Violentmonkey per installare questo script.

You will need to install an extension such as Tampermonkey to install this script.

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Userscripts per installare questo script.

Dovrai installare un'estensione come ad esempio Tampermonkey per installare questo script.

Dovrai installare un gestore di script utente per installare questo script.

(Ho già un gestore di script utente, lasciamelo installare!)

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

(Ho già un gestore di stile utente, lasciamelo installare!)

// ==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);
    });
})();