JVC Smiley animés

Réactive les smileys animés sur le forum jeuxvideo.com

// ==UserScript==
// @name         JVC Smiley animés
// @namespace    https://violentmonkey.github.io/
// @version      1.3.4
// @description  Réactive les smileys animés sur le forum jeuxvideo.com
// @author       HulkDu92
// @match        https://www.jeuxvideo.com/*
// @homepageURL  https://github.com/reborn12345/jvc-smileys
// @supportURL   https://github.com/reborn12345/jvc-smileys/issues
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    const smileyBaseURL = "https://jvc-smileys.pages.dev/smileys/" // URL des smileys animés Cloudflare Page

    const smileyCache = new Map();

     // Mapping des codes des smileys avec leur nom de fichier équivalent
     // Commenter les smileys pas animés de base
     const smileyMap = {
        // ":)": "1",
        // ":question:": "2",
        // ":g)": "3",
        // ":d)": "4",
        // ":cd:": "5",
        ":globe:": "6",
        // ":p)": "7",
        // ":malade:": "8",
        // ":pacg:": "9",
        // ":pacd:": "10",
        // ":noel:": "11",
        // ":o))": "12",
        // ":snif2:": "13",
        // ":-(": "14",
        // ":-((": "15",
        // ":mac:": "16",
        ":gba:": "17",
        // ":hap:": "18",
        // ":nah:": "19",
        // ":snif:": "20",
        // ":mort:": "21",
        ":ouch:": "22",
        ":-)))": "23",
        ":content:": "24",
        ":nonnon:": "25",
        ":cool:": "26",
        ":sleep:": "27",
        ":doute:": "28",
        // ":hello:": "29",
        ":honte:": "30",
        ":-p": "31",
        ":lol:": "32",
        ":non2:": "33",
        ":monoeil:": "34",
        ":non:": "35",
        ":ok:": "36",
        ":oui:": "37",
        // ":rechercher:": "38",
        ":rire:": "39",
        // ":-D": "40",
        ":rire2:": "41",
        // ":salut:": "42",
        ":sarcastic:": "43",
        // ":up:": "44",
        // ":(": "45",
        // ":-)": "46",
        // ":peur:": "47",
        // ":bye:": "48",
        ":dpdr:": "49",
        // ":fou:": "50",
        // ":gne:": "51",
        // ":dehors:": "52",
        // ":fier:": "53",
        // ":coeur:": "54",
        // ":rouge:": "55",
        // ":sors:": "56",
        // ":ouch2:": "57",
        // ":merci:": "58",
        // ":svp:": "59",
        // ":ange:": "60",
        // ":diable:": "61",
        // ":gni:": "62",
        // ":spoiler:": "63",
        // ":hs:": "64",
        // ":desole:": "65",
        ":fete:": "66",
        // ":sournois:": "67",
        // ":hum:": "68",
        ":bravo:": "69",
        ":banzai:": "70",
        ":bave:": "71",
        // ":ddb:": "ddb",
        // ":fish:": "fish",
        ":cimer:": "cimer",
        ":hapoelparty:": "hapoelparty",
        ":loveyou:": "loveyou",
        ":cute:": "nyu",
        // ":objection:": "objection",
        // ":pf:": "pf",
        ":play:": "play",
        // ":siffle:": "siffle"
    };

    function restaurerSmileys() {
        // Sélectionner tous les smileys avec data-code non encore traités
        document.querySelectorAll('img[data-code]:not([data-jvsmileys-processed])').forEach(img => {
            const code = img.getAttribute('data-code'); // Récupère le code du smiley (ex. : `:rire:`)
            if (!code) return;

            // Cherche le smiley dans le mapping
            const smileyFileName = smileyMap[code];
            if (smileyFileName) {
                // Crée l'URL du smiley animé
                const smileyURL = `${smileyBaseURL}${smileyFileName}.gif`;

                if (smileyCache.has(smileyURL)) {
                    // Si déjà validé, remplace directement
                    img.src = smileyURL;
                    img.setAttribute('data-jvsmileys-processed', true);
                    return;
                }

                img.src = smileyURL;
                img.setAttribute('data-jvsmileys-processed', true); // Marque comme traité
                smileyCache.set(smileyURL, true);
            }
        });
    }

    // Exporter la fonction restaurerSmileys
    window.restaurerSmileys = restaurerSmileys;


    // Initial replacement
    restaurerSmileys();

    const observer = new MutationObserver(restaurerSmileys);
    observer.observe(document.body, { childList: true, subtree: true });
})();