HDRezka Dubbing Marker

Добавляет флажки стран, значки телеканалов и студий рядом с названием озвучки на HDRezka

// ==UserScript==
// @name         HDRezka Dubbing Marker
// @namespace    http://tampermonkey.net/
// @version      1.9.5
// @description  Добавляет флажки стран, значки телеканалов и студий рядом с названием озвучки на HDRezka
// @author       T.Er
// @include      /^https?:\/\/.*rezk.*\/.*$/
// @icon         https://statichdrezka.ac/templates/hdrezka/images/avatar.png
// @grant        GM.addStyle
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_deleteValue
// @grant        GM_registerMenuCommand
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    //Добавляем кнопки в меню TamperMonkey
    let menuCommands = {};

    // Описываем функции в массиве
    const features = [
        { keyFunc: 'funcRaitingIconEnabled', name: 'Иконки в Рейтинге озвучек' },
        { keyFunc: 'funcRaitingColorEnabled', name: 'Цветной блок с Рейтингом озвучек' },
    ];

    // Регистрируем все пункты меню
    function registerAllMenus() {
        // Удаляем старые команды меню
        for (let id in menuCommands) {
            GM_unregisterMenuCommand(menuCommands[id]);
        }
        menuCommands = {};

        // Регистрируем новые команды
        for (let feature of features) {
            let enabled = GM_getValue(feature.keyFunc, true);
            let title = (enabled ? "✅ Вкл: " : "❌ Выкл: ") + feature.name;

            menuCommands[feature.keyFunc] = GM_registerMenuCommand(title, () => toggleFeature(feature));
        }
    }

    // Функция переключения состояния
    function toggleFeature(feature) {
        let currentState = GM_getValue(feature.keyFunc, true);
        let newState = !currentState;
        GM_setValue(feature.keyFunc, newState);

        alert(`${feature.name} ${newState ? '✅ Включен (а)' : '❌ Выключен (а)'}\nПерезагрузите страницу!`);

        registerAllMenus(); // Перерегистрировать меню после переключения
    }

    // При старте скрипта
    registerAllMenus();

   // CSS-код
GM.addStyle(`
.b-translators__block {
    background-color: #151515;
    padding: 10px 5px;
    text-align: left !important;
    box-sizing: border-box;
    overflow: auto;
    /* display: flex; */
    flex-wrap: wrap;
    gap: 8px;
    justify-content: space-between;
}

.b-translator__item {
    box-sizing: border-box;
    border-radius: 3px;
    background-color: #2D2D2D;
    color: #fff;
    cursor: pointer;
    font-size: 13px;
    overflow: hidden;
    padding: 5px;
    position: relative;
    text-overflow: ellipsis;
    text-align: center;
    white-space: nowrap;
    flex: 1 1 calc((100% / 3) - 8px);
}
.b-translator__item:hover{
   background-color: #157FAC;
}
.b-translator__item.active{
   background: #5D5D5D !important;
   cursor: pointer;
}

`);


    function addFlags(select_block) {
        const flagData = [
            //Флажки стран
            { key: "Белорусский", src: "https://statichdrezka.ac/i/flags/by.png", title: "Белорусский" },
            { key: "Грузинский", src: "https://statichdrezka.ac/i/flags/ge.png", title: "Грузинский" },
            { key: "Азербайджанский", src: "https://statichdrezka.ac/i/flags/az.png", title: "Азербайджанский" },
            { key: "Узбекский", src: "https://statichdrezka.ac/i/flags/uz.png", title: "Узбекский" },
            { key: "субтитры", src: "https://img.icons8.com/?size=100&id=XCcnZrg9lnPM&format=png&color=000000", title: "Субтитры" },
            { key: "без цензуры", src: "https://img.icons8.com/?size=100&id=o3iN2IEeyqAq&format=png&color=000000", title: "18+" },
            //Иконки озвучек и релиз-групп
            { key: "HDrezka Studio", src: "https://statichdrezka.ac/templates/hdrezka/images/avatar.png", title: "HDRezka Studio", width: 17, height: 17 },
            { key: "лостфильм", src: "https://lostpix.com/img/2025-01/04/75o3n6md7s5qo9p5vpz8b9a4b.jpg", title: "ЛостФильм" },
            { key: "яскъер", src: "https://lostpix.com/img/2025-01/04/b2ply34edh156aphznvkectqv.png", title: "Яскъер", width: 17, height: 17, radius: "10%" },
            { key: "Кубе", src: "https://lostpix.com/img/2025-01/04/24g0thmtvc936tr2nfc56plvi.jpg", title: "Кубик в Кубе", radius: "10%" },
            { key: "Red Head Sound", src: "https://lostpix.com/img/2025-01/04/wzlvivblwmiw56h432d43fzcd.jpg", title: "RHS", radius: "50%" },
            { key: "TVShows", src: "https://lostpix.com/img/2025-01/04/pmjr5qoeybuar1e1xlv3b1sak.jpg", title: "TVShows", height: 14, width: 32, radius: "5%" },
            { key: "VHSник", src: "https://lostpix.com/img/2025-03/23/5g082agrvbumq4roxrqdso57r.png", title: "VHSник", height: 12, width: 32, bottom: "1px" },
            { key: "Flarrow Films", src: "https://lostpix.com/img/2025-01/04/emgaf24p5utbmomglbnvg4svd.png", title: "FF" },
            { key: "Киномания", src: "https://upload.wikimedia.org/wikipedia/uk/1/18/Kinomania_loho.png", title: "Киномания", width: 24 },
            { key: "СВ-Дубль", src: "https://lostpix.com/img/2025-01/06/ztky56bs65xck9ndxa6gmhlos.jpg", title: "СВ-Дубль" },
            { key: "Варус", src: "https://lostpix.com/img/2025-03/23/ob52pg4rv3b2k6iyt3fybn8jh.png", title: "Варус Видео", width: 22 },
            { key: "Союз", src: "https://upload.wikimedia.org/wikipedia/ru/thumb/e/e6/Logo_souz.svg/800px-Logo_souz.svg.png", title: "Союз", height: 16, width: 13 },
            { key: "CP Digital", src: "https://lostpix.com/img/2025-03/23/y130r1u5gl5rqhzr9vjm76gt4.png", title: "CP Digital", radius: "5%" },
            { key: "Лазер-Видео", src: "https://lostpix.com/img/2025-01/06/1lp5ifxsdpmogsl0ymh67sj43.png", title: "Лазер-Видео" },
            { key: "Tycoon", src: "https://lostpix.com/img/2025-01/06/f8q1n6zunkcon5kgoeka6ns28.gif", title: "Tycoon" },
            { key: "West Video", src: "https://lostpix.com/img/2025-03/23/2t38pz9v4frn58m0czpnkry2j.png", title: "West Video", width: 24 },
            { key: "колдфильм", src: "https://lostpix.com/img/2025-01/07/i7m2nsqihte3dyp12m3e01hlz.png", title: "Колдфильм" },
            { key: "Condor", src: "https://lostpix.com/img/2025-01/07/0kaxqknxd4ws07njxwsgpck4f.png", title: "Condor" },
            { key: "RStudioSound", src: "https://lostpix.com/img/2025-01/07/gnbqcht943wn4qn0kmanzgl0s.png", title: "RStudioSound" },
            { key: "Le-Production", src: "https://lostpix.com/img/2025-01/07/ezufgwoyjcjamz9jn6sx5s9ry.jpg", title: "Le-Production", height: 13, width: 15, radius: "10%" },
            { key: "RUDUB", src: "https://lostpix.com/img/2025-01/07/ozoi9scvxcxm8ypboh6i8qco6.png", title: "RUDUB", height: 17, width: 17 },
            { key: "NewStudio", src: "https://lostpix.com/img/2025-01/07/b4kqxpu41xk75kpysq21hsqft.png", title: "NewStudio", height: 12, width: 32, bottom: "2px" },
            { key: "Цікава Ідея", src: "https://lostpix.com/img/2025-03/23/egngt6s4rukc3054z7eam8qym.png", title: "Цікава Ідея" },
            { key: "Amedia", src: "https://upload.wikimedia.org/wikipedia/ru/6/6d/Logo_Amedia.png", title: "Amedia" },
            { key: "NovaFilm", src: "http://fandub.wiki/images/4/43/Novafilm.png", title: "NovaFilm", height: 14, width: 32 },
            { key: "Novamedia", src: "https://lostpix.com/img/2025-05/03/kgstoi9zb9xrimhnmj6ey2pgj.png", title: "Novamedia", height: 14, width: 14 },
            { key: "Fox", src: "https://upload.wikimedia.org/wikipedia/commons/thumb/4/48/FOX_wordmark-orange_2.svg/1920px-FOX_wordmark-orange_2.svg.png", title: "FOX", height: 12, width: 30, bottom: "1px" },
            { key: "AlexFilm", src: "https://lostpix.com/img/2025-01/12/bn3j92rytskxn32jrud0nq5fe.png", title: "AlexFilm", height: 16, width: 16, radius: "10%" },
            { key: "Видеосервис", src: "https://lostpix.com/img/2025-03/23/cpjor1m40yj1x6ag4zfmkh4cj.png", title: "Видеосервис" },
            { key: "Премьер", src: "https://upload.wikimedia.org/wikipedia/ru/e/e1/Премьер_Видео_Фильм.png", title: "Премьер", width: 12 },
            { key: "Good", src: "https://lostpix.com/img/2025-01/12/1fd0lvm6kvct0a3mufhc5v3xr.jpg", title: "Good People", height: 16, width: 16, radius: "50%" },
            { key: "1win", src: "https://lostpix.com/img/2025-01/12/d8dv3ayvjbf6ufjm3wd70cm84.jpg", title: "1Win", height: 16, width: 16, radius: "50%" },
            { key: "байбако", src: "https://lostpix.com/img/2025-01/12/pqatyqrd34h0bi8u8cfmzrw4p.jpg", title: "BaibaKoTV", height: 15, width: 30 },
            { key: "Кураж", src: "https://lostpix.com/img/2025-01/12/fv6sye0rmcqrolblhac9yqbwi.png", title: "Кураж-Бамбей", height: 17, width: 17 },
            { key: "StudioBand", src: "https://lostpix.com/img/2025-03/23/63yhpdovqozqr2giw68t6gszs.jpg", title: "StudioBand", height: 17, width: 17, radius: "50%" },
            { key: "Гоблин", src: "https://lostpix.com/img/2025-01/16/b2mvyp1l2xigl84720g0fkmvr.jpg", title: "Гоблин", height: 17, width: 17, radius: "10%" },
            { key: "Viruse", src: "https://lostpix.com/img/2025-01/17/g0wnqpr7cbcgxnobhumbkw23y.jpg", title: "ViruseProject", height: 17, width: 17, radius: "50%" },
            { key: "R5", src: "https://lostpix.com/img/2025-01/18/vzlmcdea6is64963lwevd3lzx.png", title: "R5", height: 14, width: 30 },
            //Иконки телеканалов
            { key: "РенТВ", src: "https://upload.wikimedia.org/wikipedia/commons/thumb/d/df/REN_TV_logo_2017.svg/300px-REN_TV_logo_2017.svg.png", title: "РенТВ" },
            { key: "НТВ", src: "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1a/NTV_logo_2003.svg/300px-NTV_logo_2003.svg.png", title: "НТВ", radius: "5%" },
            { key: "ОРТ", src: "https://upload.wikimedia.org/wikipedia/commons/b/b8/Channel_one_russia_logo_3.PNG", title: "ОРТ" },
            { key: "SDI Media", src: "https://upload.wikimedia.org/wikipedia/ru/3/30/SDI-media.png", title: "SDI Media", height: 14, width: 32, radius: "5%" },
            { key: "ТВ-3", src: "https://upload.wikimedia.org/wikipedia/commons/thumb/d/d2/TV-3_logo_%282015%29.png/1024px-TV-3_logo_%282015%29.png", title: "ТВ-3" },
            { key: "СТС", src: "https://upload.wikimedia.org/wikipedia/commons/c/c1/Логотип_СТС_2005-2012.png", title: "СТС" },
            { key: "ТВ6", src: "https://upload.wikimedia.org/wikipedia/commons/e/e0/TV-6.jpg", title: "ТВ6", height: 14, width: 22, radius: "5%" },
            { key: "5 канал", src: "https://upload.wikimedia.org/wikipedia/commons/thumb/c/c0/5-tv_logo_%282023%29.svg/1024px-5-tv_logo_%282023%29.svg.png", title: "5 канал" },
            { key: "РТР", src: "https://upload.wikimedia.org/wikipedia/ru/1/1a/VGTRK_logo_VGTRK_sign.png", title: "РТР", height: 14, width: 32, bottom: "1px", radius: "5%" },
            { key: "ВГТРК", src: "https://upload.wikimedia.org/wikipedia/ru/1/1a/VGTRK_logo_VGTRK_sign.png", title: "ВГТРК", height: 14, width: 32, bottom: "1px", radius: "5%" },
            { key: "ТНТ", src: "https://upload.wikimedia.org/wikipedia/commons/6/6b/Logo_tnt.png", title: "ТНТ", height: 12, width: 36, bottom: "3px" },
            { key: "Первый", src: "https://upload.wikimedia.org/wikipedia/commons/thumb/a/a7/1канал-5.svg/1024px-1канал-5.svg.png", title: "Первый" },
            { key: "ТВЦ", src: "https://upload.wikimedia.org/wikipedia/ru/thumb/7/72/TV_Tsentr_2013_Logo.svg/170px-TV_Tsentr_2013_Logo.svg.png", title: "ТВЦ", height: 14, width: 32, bottom: "1px" },
            { key: "AMC", src: "https://upload.wikimedia.org/wikipedia/commons/thumb/3/34/AMC_logo_2019.svg/1024px-AMC_logo_2019.svg.png", title: "AMC", width: 30 },
            { key: "Останкино", src: "https://upload.wikimedia.org/wikipedia/commons/f/fd/Логотип_1-й_канал_Останкино_%28фиолетовый%29.png", title: "Останкино" },
            { key: "Paramount", src: "https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Paramount_Network.svg/1024px-Paramount_Network.svg.png", title: "Paramount" },
            { key: "Карусель", src: "https://upload.wikimedia.org/wikipedia/commons/thumb/a/ae/Karusel_2022.svg/640px-Karusel_2022.svg.png", title: "Карусель", height: 14, width: 38 },
            { key: "Universal", src: "https://upload.wikimedia.org/wikipedia/commons/4/49/Universal_Pictures_logo_2.png", title: "Universal", height: 16, width: 30 },
            { key: "Селена", src: "https://lostpix.com/img/2025-01/12/k1xs6kzito87say3gfb7sv0xe.png", title: "Селена", height: 16, width: 26 },
            { key: "MTV", src: "https://upload.wikimedia.org/wikipedia/commons/thumb/6/68/MTV_2021_%28brand_version%29.svg/1920px-MTV_2021_%28brand_version%29.svg.png", title: "MTV", width: 24 },
            { key: "Sony", src: "https://upload.wikimedia.org/wikipedia/ru/7/7f/Логотип_телеканал_Sony_Sci-Fi.png", title: "Sony", height: 16, width: 13 },
            { key: "Домашний", src: "https://upload.wikimedia.org/wikipedia/ru/thumb/a/a5/Логотип_телеканала_«Домашний»_с_16_декабря_2017.png/1024px-Логотип_телеканала_«Домашний»_с_16_декабря_2017.png", title: "Домашний", height: 16, width: 16 },
            { key: "CBS", src: "https://m.media-amazon.com/images/M/MV5BMDZhMzNhNjktNzAzZi00YzIxLThhMjgtYjg4Yzk5ZTQwZjIwXkEyXkFqcGdeQXVyNDY1NTYzMDA@._V1_FMjpg_UX1000_.jpg", title: "CBS", height: 16, width: 16, radius: "10%" },
            { key: "ДТВ", src: "https://upload.wikimedia.org/wikipedia/commons/thumb/b/ba/DTV_Logo.svg/1920px-DTV_Logo.svg.png", title: "ДТВ", height: 14, width: 32, bottom: "1px" },
            { key: "2x2", src: "https://upload.wikimedia.org/wikipedia/commons/thumb/6/6c/2x2_TV_Logo.svg/1920px-2x2_TV_Logo.svg.png", title: "2x2", height: 14, width: 32 },
            { key: "Арт", src: "https://lostpix.com/img/2025-03/23/g6ogrptzyf3j1hv8bzheakdvk.png", title: "Екб АРТ", height: 16, width: 16, radius: "10%" },
            { key: "Кириллица", src: "https://lostpix.com/img/2025-01/16/545gfsyxijaq5ehg489o5s0h2.jpg", title: "Кириллица", height: 15, width: 15, radius: "50%" },
            //украинские
            { key: "1+1", src: "https://upload.wikimedia.org/wikipedia/commons/thumb/9/92/1%2B1_logo.svg/1920px-1%2B1_logo.svg.png", title: "1+1", height: 10, width: 32, bottom: "2.5px"},
            { key: "Новый канал", src: "https://upload.wikimedia.org/wikipedia/commons/b/b4/Новий_канал_%28Украина%29_%282012-н.в.%29.png", title: "Новый канал", height: 15, width: 15},
            { key: "СТБ", src: "https://upload.wikimedia.org/wikipedia/commons/thumb/0/04/STB_logo.svg/1024px-STB_logo.svg.png", title: "СТБ", height: 16, width: 18},
            { key: "ICTV", src: "https://upload.wikimedia.org/wikipedia/commons/6/6f/ICTV_2003-2005.png", title: "ICTV", height: 17, width: 30},
            { key: "Интер", src: "https://upload.wikimedia.org/wikipedia/commons/thumb/6/6b/Inter_TV-Channel_%282000-2007%29.svg/800px-Inter_TV-Channel_%282000-2007%29.svg.png", title: "Интер"},
            { key: "ТЕТ", src: "https://upload.wikimedia.org/wikipedia/commons/thumb/b/b5/TETUA_logo%282022%29.svg/1920px-TETUA_logo%282022%29.svg.png", title: "ТЕТ", height: 10, width: 32, bottom: "3px"},
            { key: "2+2", src: "https://upload.wikimedia.org/wikipedia/commons/thumb/a/a4/2%2B2_logo_2017.svg/1920px-2%2B2_logo_2017.svg.png", title: "2+2", height: 10, width: 30, bottom: "3px"},
            { key: "НТН", src: "https://upload.wikimedia.org/wikipedia/commons/thumb/d/d1/NTNUA_logo_%282013%29.svg/1920px-NTNUA_logo_%282013%29.svg.png", title: "НТН", height: 14, width: 30, bottom: "1px", radius: "5%"},
            { key: "К1", src: "https://upload.wikimedia.org/wikipedia/commons/thumb/a/a4/K1_Logo_2014.svg/800px-K1_Logo_2014.svg.png", title: "К1", height: 16, width: 14},
            { key: "ТРК Украина", src: "https://upload.wikimedia.org/wikipedia/commons/thumb/4/4c/TRK_Ukraina_%282022%29.svg/1024px-TRK_Ukraina_%282022%29.svg.png", title: "ТРК Украина", height: 14, width: 16},
            { key: "НЛО", src: "https://upload.wikimedia.org/wikipedia/commons/thumb/f/f6/NLOTV_logo.svg/1024px-NLOTV_logo.svg.png", title: "НЛО", height: 17, width: 16},
            { key: "Cine+", src: "https://upload.wikimedia.org/wikipedia/commons/b/b6/Cine%2B_Hit.png", title: "Cine+", height: 17, width: 25}
        ];

        const processItems = (selector) => {
            const items = document.querySelectorAll(selector);

            items.forEach(item => {
                const titleText = item.textContent.trim();

                // Проверка: если уже есть картинка и она соответствует контенту, пропускаем
                const existingFlag = item.querySelector('img');
                if (existingFlag && titleText.includes(existingFlag.title) && !titleText.includes("Украинский") && !titleText.includes("Казахский")) {
                    return;
                }

                for (const data of flagData) {
                    if (titleText.toLowerCase().includes(data.key.toLowerCase())) {
                        const img = document.createElement('img');
                        img.title = data.title;
                        img.src = data.src;
                        img.width = data.width || 16;
                        img.height = data.height || 16;
                        img.alt = data.title;
                        img.style.borderRadius = data.radius || "";
                        img.style.cursor = "help";
                        img.style.verticalAlign = "text-bottom";
                        img.style.marginLeft = "3px";
                        img.style.marginBottom = data.bottom || "";

                        item.appendChild(img);
                        break; // нашли нужное — дальше не проверяем
                    }
                }
            // 🔥 Добавление иконки дубляжа отдельно, даже если был флаг
	        if (titleText.toLowerCase().includes("дубляж")) {
	            const dubbingImg = document.createElement('img');
	            dubbingImg.src = "https://img.icons8.com/?size=100&id=3YAUk7TXYr22&format=png&color=000000";
	            dubbingImg.title = "Дубляж";
	            dubbingImg.width = 12;
	            dubbingImg.height = 13;
	            dubbingImg.style.cursor = "help";
	            dubbingImg.style.marginLeft = "3px";
	            dubbingImg.style.marginBottom = "2px";
	            item.appendChild(dubbingImg);
	        }
            });
        };

        processItems(select_block);
    }

    const observer = new MutationObserver(() => {
        const block = document.querySelector('.b-translators__block');
        if (block) {
            addFlags('.b-translator__item');
            observer.disconnect();
        }
    });

    observer.observe(document.body, { childList: true, subtree: true });

    if (GM_getValue('funcRaitingIconEnabled', true)) {

        let lastElements = [];

        document.body.addEventListener('mouseover', (e) => {
            if (e.target.closest('.b-rgstats__help')) {
                setTimeout(() => {
                    const currentElements = Array.from(document.querySelectorAll('.b-rgstats__list_item .inner .title'));
                    if (currentElements.length === 0) return;

                    const isSame = currentElements.length === lastElements.length &&
                          currentElements.every((el, i) => el === lastElements[i]);

                    if (!isSame) {
                        lastElements = currentElements;
                        addFlags('.b-rgstats__list_item .inner .title');
                    }
                }, 100);
            }
        });
    } else {
        console.log("✅ Иконки в меню рейтинга озвучек выключены!");
    }

    if (GM_getValue('funcRaitingColorEnabled', true)) {
        const styleId = 'custom-tooltip-style';
        if (!document.getElementById(styleId)) {
            const style = document.createElement('style');
            style.id = styleId;
            style.innerHTML = `
              .b-rgstats__list_item {
                box-shadow: 0 0 20px 6px #03A9F4;
                background: linear-gradient(to bottom, #23566E, #007BFF);
                border-radius: 5px;
           `;
            document.head.appendChild(style);
        }
    }else {
            console.log("✅ Цветной блок с Рейтингом выключен!");
    }

})();