Greasy Fork

Greasy Fork is available in English.

HDrezka Cleanup

Cleanup HDrezka: change content width, change player size, remove blocks (telegram, social, support, vk, etc), restyle blocks (cover, status, rating, etc)

当前为 2022-06-14 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name            HDrezka Cleanup
// @name:en         HDrezka Cleanup
// @namespace       http://tampermonkey.net/
// @version         0.37
// @description     Cleanup HDrezka: change content width, change player size, remove blocks (telegram, social, support, vk, etc), restyle blocks (cover, status, rating, etc)
// @description:en  Cleanup HDrezka: change content width, change player size, remove blocks (telegram, social, support, vk, etc), restyle blocks (cover, status, rating, etc)
// @author          rub4ek
// @match           https://hdrezka.me/*
// @match           https://hdrezka.ag/*
// @match           https://rezka.ag/*
// @match           https://rezkify.com/*
// @match           https://kinopub.me/*
// @match           http://hdrezka.co/*
// @icon            https://www.google.com/s2/favicons?domain=rezka.ag
// @grant           GM_addStyle
// @grant           GM_xmlhttpRequest
// @run-at          document-start
// @license         MIT
// ==/UserScript==

(function () {
    "use strict";

    /* ------------------------------------------------- */
    /* --------------GLOBAL----------------------------- */
    /* ------------------------------------------------- */

    let hc = {};

    const arrowImageURL =
        "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAABaCAYAAAA4qEECAAAABmJLR0QA/wD/AP+gvaeTAAABa0lEQVR4nO3awUrDQBSF4dMuGhc+uF0puK/v4KL4RPoARbLUxTRQi5nMJDPJvcn/gRsp5NyfWgSVAAAAAAAAAAAAAAAAAACYXSPpKOlL0qekp+v3UNBB0rukn7uvD0kPC+5alb7IxC5oKDKxC0iNTOwJciMTe4SxkYmdoZF0VjzkOfE1/OrXI+Wd3L1bc16LG2PCETvTlGDETlQiFLEHlAxE7B41whD7Ts0gxL6aI8TmY88ZYLOxlzh8c7GXPHgzsS0camFDVZYOtLSlKIuHWdw0ieWDLG/L4uEQDxujPB3gaesfHoe72+xu8A03290MjTB/g/mBGczeYnbYBOZuSv2XAI9/7jd126uVIZWkxH6pPWIv6TsywHvkzlDsi6RdzQF7SW3Pw9cSuROL3Sq0qOrtnwevLXKnL/Zpjoc/KsRuFX6EnrXOyJ1G4TP5onDzSaHBbKp+Rhm00/ZuBgAAAAAAAAAAAAAAAODKL8SQFSF3JeZKAAAAAElFTkSuQmCC";

    /* ------------------------------------------------- */
    /* --------------GLOBAL-STYLES---------------------- */
    /* ------------------------------------------------- */

    GM_addStyle(`

    /* css */

    /* Padding for content */
    .b-wrapper {
        padding-left: 30px !important;
        padding-right: 30px !important;
    }

    /* Remove extra right padding for content page */
    .b-content__columns {
        padding-right: 0 !important;
    }

    /* Remove extra right padding on main content listing */
    .b-content__inline_inner_mainprobar {
        padding-right: 0 !important;
    }
    .b-content__inline_inner_mainprobar .b-content__inline_item {
        margin-left: 16px !important;
    }

    /* Active brand fixes */
    body.active-brand,
    body.active-brand.pp {
        padding-top: 0 !important;
    }
    .active-brand #wrapper {
        width: auto !important;
    }

    /* Style status */
    .b-post__status_wrapper {
        width: auto !important;
        margin: 0px 10px 0px 13px !important;
    }

    /* Style and resize rating block */
    .b-post__rating_table {
        width: 100% !important;
    }
    .b-post__rating_table td > * {
        float: right !important;
    }
    .b-post__rating_table .label {
        display: none !important;
    }

    /* Hide last episode info */
    .b-post__lastepisodeout {
        display: none !important;
    }

    /* Hide support block */
    .b-post__support_holder {
        display: none !important;
    }
    .b-post__support_holder_report .append {
        display: none !important;
    }

    /* Hide share label */
    .b-post__social_holder_wrapper .share-label {
        display: none !important;
    }

    /* Hide mixedtext */
    .b-post__mixedtext {
        text-indent: -9999px !important;
        padding: 0 !important;
    }

    /* Tumbler */

    .hc-tumbler {
        width: 38px;
        height: 30px;
        background-color: #000;
        border: #1d92b2;
        border-radius: 30px;
        display: flex;
        justify-content: space-between;
        align-items: center;
        padding: 0 6px;
        cursor: pointer;
        position: relative;
    }
    .hc-tumbler:before,
    .hc-tumbler:after {
        background-size: 15px 15px;
        background-repeat: no-repeat;
        border-radius: 50%;
        content: '';
        display: block;
        top: 50%;
        margin-top: -7px;
        height: 15px;
        width: 15px;
        position: absolute;
    }
    .hc-tumbler:before {
        background-color: green;
        left: 6px;
    }
    .hc-tumbler:after {
        background-color: indianred;
        right: 6px;
    }
    .hc-tumbler > .hc-tumbler-dot {
        position: absolute;
        height: 20px;
        width: 20px;
        border-radius: 50%;
        background-color: #fff;
        transition: transform .5s,background-color .5s;
        will-change: transform;
        z-index: 2;
    }
    body.b-theme__template__night .hc-tumbler {
        background: #222d33;
    }

    /* !css */

    `);

    /* ------------------------------------------------- */
    /* --------------HIDE-ADS--------------------------- */
    /* ------------------------------------------------- */

    function initHideAds() {
        GM_addStyle(`

        /* css */

        /* Hide some ads containers */

        body.hc-hide-ads .b-content__main > .b-post__mixedtext + div[style],
        body.hc-hide-ads .b-content__main > .b-post__rating_table + div[style],
        body.hc-hide-ads .b-content__main > div > .b-player > .b-player__network_issues_holder + div[style],
        body.hc-hide-ads .b-content__main > div > .b-player > a[target='_blank'],
        body.hc-hide-ads .b-content__main + div,
        body.hc-hide-ads .b-wrapper .nopadd,
        body.hc-hide-ads .b-seriesupdate__block_list > .b-seriesupdate__block_list_item[data-url=''] {
            display: none !important;
        }

        /* Setting */

        body.hc-hide-ads .hc-tumbler-hide-ads .hc-tumbler-dot {
            transform: translateX(calc(100% - 2px));
        }

        /* !css */

        `);

        resolve();
        document.addEventListener("DOMContentLoaded", resolve);
        document.addEventListener("DOMContentLoaded", settings);

        function resolve() {
            if (!document.body) return;

            if (enabled()) {
                document.body.classList.add("hc-hide-ads");
            } else {
                document.body.classList.remove("hc-hide-ads");
            }
        }

        function enabled() {
            return localStorage.getItem("hc-hide-ads") != "false";
        }

        function toggle() {
            localStorage.setItem("hc-hide-ads", !enabled());
            resolve();
        }

        function settings() {
            if (!hc.settings) return;
            const elem = document.createElement("div");
            elem.insertAdjacentHTML(
                "beforeend",
                /* html */
                `
                    <!-- html -->
                    <div class="hc-tumbler hc-tumbler-hide-ads pull-right">
                        <div class="hc-tumbler-dot"></div>
                    </div>
                    <span>Скрыть рекламные блоки</span>
                    <!-- !html -->
                `
            );
            const tumbler = elem.querySelector(".hc-tumbler");
            tumbler.addEventListener("click", toggle);
            hc.settings.add(elem);
        }
    }

    /* ------------------------------------------------- */
    /* --------------STYLE-IMPROVEMENTS----------------- */
    /* ------------------------------------------------- */

    function initStyleImprovements() {
        GM_addStyle(`

        /* css */

        /* Standard theme */

        body.hc-style .b-content__inline_item .info {
            background-color: #6f6f6f;
            color: #fff;
        }

        /* Night theme */

        body.hc-style.b-theme__template__night .b-content__main a {
            color: #fff;
        }

        body.hc-style.b-theme__template__night .b-content__main a:visited {
            color: #fff;
        }

        body.hc-style.b-theme__template__night .b-post__info a {
            color: #fff;
        }

        body.hc-style.b-theme__template__night .persons-list-holder .person-name-item a {
            color: #fff !important;
            border-color: #fff;
        }

        body.hc-style.b-theme__template__night .b-newest_slider__title span {
            border-color: #fff;
            color: #fff;
        }

        body.hc-style.b-theme__template__night .b-content__inline_item .cat {
            background-color: #060f13 !important;
        }

        body.hc-style.b-theme__template__night .b-content__inline_item .b-content__inline_item-link a,
        body.hc-style.b-theme__template__night .b-content__inline_item .b-content__inline_item-link a:visited {
            color: #fff;
        }

        /* Content items */

        body.hc-style .b-content__inline_item {
            width: 166px;
            margin-right: 10px;
        }

        body.hc-style .b-content__inline_item .cat {
            position: relative;
        }

        body.hc-style .b-content__inline_item .cat .entity {
            display: inline-block !important;
            margin-right: -8px;
            position: absolute;
            left: 0;
            right: 0;
            overflow: hidden;
            text-overflow: ellipsis;
        }

        body.hc-style .b-content__inline_item:hover .cat .entity,
        body.hc-style .b-content__inline_item.active .cat .entity {
            display: none !important;
            margin-right: -10px;
            position: absolute;
            left: 0;
            right: 0;
            overflow: hidden;
            text-overflow: ellipsis;
        }

        body.hc-style .b-content__inline_item-cover {
            padding: 0;
            border: 0;
        }

        body.hc-style .b-content__inline_item .cat {
            position: relative;
            top: unset;
            bottom: 0;
            right: 0;
            border-radius: 0;
            width: 100%;
        }

        body.hc-style .b-content__inline_item .info {
            border-radius: 0 !important;
            box-sizing: border-box;
            width: 100%;
            margin-bottom: 26px;
        }

        body.hc-style .b-content__inline_item .trailer {
            display: none !important;
            left: 0;
        }

        body.hc-style .b-newest_slider__list .b-content__inline_item {
            width: 92px;
            margin-right: 8px;
        }

        body.hc-style .b-sidelist .b-content__inline_item {
            width: 92px;
            margin-right: 8px;
        }

        /* Сontent page */

        body.hc-style .b-post .b-sidetitle {
            background: #cfcfcf;
            font-size: 16px;
            font-weight: bold;
            line-height: 18px;
            overflow: hidden;
            padding: 10px 18px;
            text-overflow: ellipsis;
            white-space: nowrap;
        }
        body.hc-style.b-theme__template__night .b-post .b-sidetitle {
            background: #192125;
        }
        body.hc-style .b-post .b-post__schedule .b-sidetitle {
            display: none;
        }
        body.hc-style .b-post .b-post__partcontent {
            margin-top: 0;
        }
        body.hc-style .b-post .b-post__actions .btn {
            border: 0;
            border-radius: 0;
        }
        body.hc-style.b-theme__template__night .b-post .b-post__actions .btn {
            background-color: #192125;
        }

        /* Rating stars */

        body.hc-style.b-theme__template__night .b-post__rating .b-post__rating_layer_current {
            filter: grayscale(100%) brightness(200%) !important;
        }

        .b-post__rating .num {
            color: inherit !important;;
        }

        /* Misc */

        body.hc-style .b-newest_slider__title {
            padding-bottom: 20px;
        }

        /* Setting */

        body.hc-style .hc-tumbler-styles .hc-tumbler-dot {
            transform: translateX(calc(100% - 2px));
        }

        /* !css */

        `);

        resolve();
        document.addEventListener("DOMContentLoaded", resolve);
        document.addEventListener("DOMContentLoaded", settings);

        function resolve() {
            if (!document.body) return;

            if (enabled()) {
                document.body.classList.add("hc-style");
            } else {
                document.body.classList.remove("hc-style");
            }
        }

        function enabled() {
            return localStorage.getItem("hc-style-improvements") == "true";
        }

        function toggle() {
            localStorage.setItem("hc-style-improvements", !enabled());
            resolve();
        }

        function settings() {
            if (hc.settings) {
                hc.settings.tumbler(toggle, "hc-tumbler-styles", "Визуальные изменения");
            }
        }
    }

    /* ------------------------------------------------- */
    /* --------------RESIZE-PLAYER---------------------- */
    /* ------------------------------------------------- */

    GM_addStyle(`

    /* css */

    /* Style player */

    .b-player {
        padding-top: 0;
    }
    .b-player #cdnplayer-preloader {
        height: 100%;
        width: 100%;
    }
    .b-player .b-simple_seasons__list {
        padding: 10px;
    }
    .b-player .b-player__holder_cdn {
        height: auto !important;
    }
    .b-player .b-player__container_cdn {
        resize: vertical;
        overflow: auto;
        width: 100% !important;
    }

    /* !css */
    
    `);

    function resizePlayer() {
        const playerHolderElem = document.querySelector(".b-player__holder_cdn");
        if (!playerHolderElem) return;

        const playerContainerElem = document.querySelector(".b-player__container_cdn");
        if (!playerContainerElem) return;

        const contentMainElem = document.querySelector(".b-content__main");
        if (!contentMainElem) return;

        const initialWidth = playerHolderElem.offsetWidth;
        const initialHeight = playerHolderElem.offsetHeight;
        let resizedWidth = contentMainElem.offsetWidth;
        let windowHeight = window.innerHeight;

        if (initialHeight > 0 && initialWidth !== resizedWidth) {
            let ratio = initialWidth / initialHeight;
            let resizedHeight = resizedWidth / ratio;
            if (resizedHeight > windowHeight) {
                resizedHeight = windowHeight;
                resizedWidth = windowHeight * ratio;
            }
            playerHolderElem.style.width = resizedWidth + "px";
            playerContainerElem.style.height = resizedHeight + "px";
            console.log(
                `HDrezka Cleanup: player resized ` +
                    `from ${initialWidth}x${initialHeight} ` +
                    `to ${resizedWidth}x${resizedHeight}.`
            );
        }
    }

    /* ------------------------------------------------- */
    /* --------------SIZE-TUMBLER----------------------- */
    /* ------------------------------------------------- */

    function initContentSizeTumbler() {
        GM_addStyle(`

        /* css */

        /* Content Size Tumbler */

        .hc-content-size-tumbler {
            width: 78px !important;
        }
        .hc-content-size-tumbler:before,
        .hc-content-size-tumbler:after {
            display: none !important;
        }
        .hc-content-size-tumbler .hc-content-size-tumbler-point {
            background-size: 15px 15px;
            background-repeat: no-repeat;
            border-radius: 50%;
            content: '';
            display: block;
            height: 20px;
            width: 20px;
            position: absolute;
            background-color: #999;
            background-clip: content-box;
            box-sizing: border-box;
            border-color: transparent;
            border-style: solid;
        }

        .hc-content-size-tumbler .hc-content-size-tumbler-point:nth-child(1) {
            border-width: 8px;
        }
        .hc-content-size-tumbler .hc-content-size-tumbler-point:nth-child(2) {
            border-width: 7px;
            transform: translateX(calc(100% - 2px));
        }
        .hc-content-size-tumbler .hc-content-size-tumbler-point:nth-child(3) {
            border-width: 6px;
            transform: translateX(calc(200% - 2px));
        }
        .hc-content-size-tumbler .hc-content-size-tumbler-point:nth-child(4) {
            border-width: 5px;
            transform: translateX(calc(300% - 2px));
        }

        body.hc-content-size-wide .hc-content-size-tumbler .hc-tumbler-dot {
            transform: translateX(calc(100% - 2px));
        }
        body.hc-content-size-ultrawide .hc-content-size-tumbler .hc-tumbler-dot {
            transform: translateX(calc(200% - 2px));
        }
        body.hc-content-size-full .hc-content-size-tumbler .hc-tumbler-dot {
            transform: translateX(calc(300% - 2px));
        }

        /* Content Sizes */

        body.hc-content-size-wide .b-wrapper {
            width: auto;
            min-width: 960px;
            max-width: 1150px;
        }
        body.hc-content-size-ultrawide .b-wrapper {
            width: auto;
            min-width: 960px;
            max-width: 1340px;
        }
        body.hc-content-size-full .b-wrapper {
            min-width: 960px;
            width: auto;
        }
        body.hc-content-size-full .glory {
            width: auto;
        }

        /* !css */

        `);

        resolve();
        document.addEventListener("DOMContentLoaded", resolve);
        document.addEventListener("DOMContentLoaded", settings);

        function getSize() {
            return localStorage.getItem("hc-content-size");
        }

        function setSize(value) {
            return localStorage.setItem("hc-content-size", value);
        }

        function rotate() {
            let size = getSize();
            switch (size) {
                case "full":
                    size = "normal";
                    break;
                case "normal":
                    size = "wide";
                    break;
                case "wide":
                    size = "ultrawide";
                    break;
                default:
                    size = "full";
                    break;
            }
            setSize(size);
            resolve();
        }

        function resolve() {
            if (!document.body) return;

            document.body.classList.remove("hc-content-size-wide");
            document.body.classList.remove("hc-content-size-ultrawide");
            document.body.classList.remove("hc-content-size-full");
            window.removeEventListener("resize", resizePlayer);

            switch (getSize()) {
                case "wide":
                    document.body.classList.add("hc-content-size-wide");
                    window.addEventListener("resize", resizePlayer);
                    break;
                case "ultrawide":
                    document.body.classList.add("hc-content-size-ultrawide");
                    window.addEventListener("resize", resizePlayer);
                    break;
                case "full":
                    document.body.classList.add("hc-content-size-full");
                    window.addEventListener("resize", resizePlayer);
                    break;
            }

            resizePlayer();
        }

        function settings() {
            if (!hc.settings) return;
            const elem = document.createElement("div");
            elem.classList.add("hc-content-size-setting");
            elem.insertAdjacentHTML(
                "beforeend",
                /* html */
                `
                    <!-- html -->
                    <div class="hc-tumbler hc-content-size-tumbler pull-right">
                        <div class="hc-content-size-tumbler-point"></div>
                        <div class="hc-content-size-tumbler-point"></div>
                        <div class="hc-content-size-tumbler-point"></div>
                        <div class="hc-content-size-tumbler-point"></div>
                        <div class="hc-tumbler-dot"></div>
                    </div>
                    <span>Ширина контента</span>
                    <!-- !html -->
                `
            );
            const tumbler = elem.querySelector(".hc-content-size-tumbler");
            tumbler.addEventListener("click", rotate);
            hc.settings.add(elem);
        }
    }

    /* ------------------------------------------------- */
    /* --------------HIDE-INFO-------------------------- */
    /* ------------------------------------------------- */

    function initHideInfoButton() {
        GM_addStyle(`

        /* css */

        /* Content hide info (button) */

        .hc-hide-info-button {
            content: '';
            width: 25px;
            height: 25px;
            margin-right: 5px;
            background-size: 25px 25px;
            background-repeat: no-repeat;
            background-image: url(${arrowImageURL});
            cursor: pointer;
        }
        body.hc-hide-info .hc-hide-info-button {
            transform: rotate(180deg);
        }

        /* Content hide info (hidden styles) */

        body.hc-hide-info .b-post__infotable,
        body.hc-hide-info .b-post__description,
        body.hc-hide-info .b-post__infolast{
            display: none !important;
        }

        /* Content hide info (night theme) */

        body.b-theme__template__night .hc-hide-info-button {
            filter: invert(100%) sepia(95%) saturate(21%) hue-rotate(280deg) brightness(106%) contrast(106%);
        }

        /* Setting */

        body.hc-hide-info .hc-tumbler-hide-info .hc-tumbler-dot {
            transform: translateX(calc(100% - 2px));
        }

        /* !css */

        `);

        setup();
        resolve();
        document.addEventListener("DOMContentLoaded", setup);
        document.addEventListener("DOMContentLoaded", resolve);
        document.addEventListener("DOMContentLoaded", settings);

        function setup() {
            const title = document.querySelector(".b-post__title");
            if (!title) return;

            if (title.querySelector(".hc-hide-info-button")) return;

            const button = document.createElement("div");
            button.classList.add("pull-right");
            button.classList.add("hc-hide-info-button");
            button.addEventListener("click", change);
            title.insertBefore(button, title.firstChild);
        }

        function change() {
            document.body.classList.toggle("hc-hide-info")
        }

        function resolve() {
            if (!document.body) return;

            if (enabled()) {
                document.body.classList.add("hc-hide-info");
            } else {
                document.body.classList.remove("hc-hide-info");
            }
        }

        function enabled() {
            return localStorage.getItem("hc-hide-info") == "true";
        }

        function toggle() {
            localStorage.setItem("hc-hide-info", !enabled());
            resolve();
        }

        function settings() {
            if (hc.settings) {
                hc.settings.tumbler(toggle, "hc-tumbler-hide-info", "Сворачивать описание контента");
            }
        }
    }

    /* ------------------------------------------------- */
    /* --------------PLAYER-COVER----------------------- */
    /* ------------------------------------------------- */

    function initPlayerCover() {

        GM_addStyle(`

        /* css */

        /* Setting */

        body.hc-player-cover .hc-tumbler-player-cover .hc-tumbler-dot {
            transform: translateX(calc(100% - 2px));
        }

        /* !css */

        `);

        setup()
        resolve()
        document.addEventListener("DOMContentLoaded", setup);
        document.addEventListener("DOMContentLoaded", resolve);
        document.addEventListener("DOMContentLoaded", settings);

        function setup() {
            const cover = document.querySelector(".b-sidecover");
            if (!cover) return;

            const imgURL = cover.querySelector("img").src;

            GM_addStyle(`

            /* css */

            body.hc-player-cover #oframecdnplayer video[style*='position: absolute'] {
                background-image: linear-gradient(
                    to left, 
                    rgba(0,0,0,1) 0%, 
                    rgba(0,0,0,1) 30%, 
                    rgba(0,0,0,.8) 50%, 
                    rgba(0,0,0,1) 70%, 
                    rgba(0,0,0,1) 100%), 
                    url('${imgURL}'
                );
                background-size: auto 100%;
                background-position: center;
                background-repeat: no-repeat;
            }
            
            /* !css */

            `);
        }

        function resolve() {
            if (!document.body) return;

            if (enabled()) {
                document.body.classList.add("hc-player-cover");
            } else {
                document.body.classList.remove("hc-player-cover");
            }
        }

        function enabled() {
            return localStorage.getItem("hc-player-cover") != "false";
        }

        function toggle() {
            localStorage.setItem("hc-player-cover", !enabled());
            resolve();
        }

        function settings() {
            if (hc.settings) {
                hc.settings.tumbler(toggle, "hc-tumbler-player-cover", "Отображать обложку в плеере");
            }
        }

    }

    /* ------------------------------------------------- */
    /* --------------TRANSLATORS------------------------ */
    /* ------------------------------------------------- */

    function initHideTranslatorsButton() {
        GM_addStyle(`

        /* css */

        /* Content hide translators */

        .b-translator__item.active {
            cursor: pointer;
        }
        .hc-toggle-translators-button {
            content: '';
            float: left;
            width: 20px;
            height: 20px;
            margin-right: 3px;
            margin-top: 8px;
            margin-left: 5px;
            background-size: 20px 20px;
            background-repeat: no-repeat;
            background-image: url(${arrowImageURL});
            filter: invert(100%) sepia(95%) saturate(21%) hue-rotate(280deg) brightness(106%) contrast(106%);
            transform: rotate(90deg);
            cursor: pointer;
        }
        .hc-show-translators .hc-toggle-translators-button {
            transform: rotate(-90deg);
        }
        .b-translator__item:not(.active):not(.hc-toggle-translators-button) {
            display: none;
        }
        .b-translators__title {
            display: none;
        }
        .hc-show-translators .b-translator__item:not(.active):not(.hc-toggle-translators-button) {
            display: block;
        }
        .hc-show-translators .b-translators__title {
            display: block;
        }

        /* !css */

        `);

        document.addEventListener("DOMContentLoaded", setup);

        function setup() {
            const translators = document.querySelector(".b-translators__block");
            if (!translators) return;

            const translatorsList = translators.querySelector(".b-translators__list");
            if (!translatorsList) return;

            const toggler = document.createElement("li");
            toggler.classList.add("hc-toggle-translators-button");
            toggler.addEventListener("click", toggle);
            translatorsList.appendChild(toggler);

            translatorsList.querySelectorAll(".b-translator__item").forEach((button) => {
                button.addEventListener("click", function () {
                    if (this.classList.contains("active")) {
                        toggle();
                    }
                });
            });
        }

        function toggle() {
            document.querySelector(".b-translators__block").classList.toggle("hc-show-translators");
        }
    }

    /* ------------------------------------------------- */
    /* --------------HIDE-RUSSIAN----------------------- */
    /* ------------------------------------------------- */

    function initHideRussian() {
        GM_addStyle(`

        /* css */

        /* Main */

        .hc-hide-russian .hc-russian {
            display: none;
        }

        /* Setting */

        body.hc-hide-russian .hc-tumbler-hide-russian .hc-tumbler-dot {
            transform: translateX(calc(100% - 2px));
        }

        /* !css */
        
        `);

        setup();
        resolve();
        document.addEventListener("DOMContentLoaded", setup);
        document.addEventListener("DOMContentLoaded", resolve);
        document.addEventListener("DOMContentLoaded", settings);

        function setup() {
            document.querySelectorAll(".b-content__inline_item").forEach((elem) => {
                if (elem.textContent.includes("Россия,") && !elem.classList.contains("hc-russian")) {
                    elem.classList.add("hc-russian");
                    const info = elem
                        .querySelector(".b-content__inline_item-link")
                        .textContent.replace(/(\r\n|\n|\r)/gm, "")
                        .trim();
                    console.debug(`HDrezka Cleanup: mark russian ${info}`);
                }
            });
        }

        function resolve() {
            if (!document.body) return;

            if (enabled()) {
                document.body.classList.add("hc-hide-russian");
            } else {
                document.body.classList.remove("hc-hide-russian");
            }
        }

        function enabled() {
            return localStorage.getItem("hc-hide-russian") == "true";
        }

        function toggle() {
            localStorage.setItem("hc-hide-russian", !enabled());
            resolve();
        }

        function settings() {
            if (hc.settings) {
                hc.settings.tumbler(toggle, "hc-tumbler-hide-russian", "Скрыть контент из страны-агрессора");
            }
        }
    }

    /* ------------------------------------------------- */
    /* --------------IMDB-RATING------------------------ */
    /* ------------------------------------------------- */

    function initIMDbRating() {
        GM_addStyle(`

        /* css */

        /* Rating */

        .b-content__inline_item-link > .rating {
            position: relative;
            line-height: 15px;
            font-size: 11px;
            font-weight: normal;
            display: block;
            margin-top: 3px;
        }
        .b-content__inline_item-link > .rating .rating-votes {
            font-size: 9px;
        }
        .b-content__inline_item-link > .rating .rating-value {
            margin-left: 29px;
            color: #f09a20;
        }
        .b-content__inline_item-link > .rating:before {
            content: '';
            position: absolute;
            width: 26px;
            height: 100%;
            background-size: auto 24px;
            background-position: center -4px;
            background-repeat: no-repeat;

            /* https://icons8.com/icon/V0AXUEQxEIf5/imdb */
            background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAABmJLR0QA/wD/AP+gvaeTAAAEu0lEQVR4nO2czYscRRiHn+nxY7ORdc1ulGgQYoxGNwbEKIoHDxpQNGxEURQPQQ34D/gRCFE8hJCDIIoHz7noRTeCB4MmB0OMHxFRE0wkStCIGM0SV1fDJuOhetze2uqu/piZ7u35PfAyzLxVv3q73uma6uquASGEEEIIIYQQQgghhBBCCCGEEEIIIUTdaCT4LgM2AuPAamA5sLgXQdWAv4CfgCPAbuBd4HTayouALcAk0JJ1xE4DLwADvs6/Evi0AgHX1b4Erk7q/BMVCLLudiLs6zksAj6rQHD9YgcJh6NmmIDngSfsrIiucRUwBexvYGY7PwCXlhpS/zEJXBMAD6LOL4NhYDwANpQdSR+zIQDGyo6ijxlrAH8Cl5QdSZ8y1cBMi7LyD7ATM3W9DXiWuVd508AO4BBwR+i/MIP+v8B2zHTtduZfRbbbPwDMRD4fAJYBK4H7gTUdOp6ukmce+5Sl8bTl32T57wPOptQ+C9xr1X/S034c1wG7gHMFj6eblqvSkBXwkOV3LdptAs57dM8zP3mEeknt+1gHHC9wPJVLgAufH2CrR3drQt00+kmMAh/HtOtrrzYJAHgtRvNNT72iCQDzzf7W0bavvVoloAlMWOUnmF0WicOnvwd4D3gVuJv4ex3XA3+n0KttAgAGMTOYVvg6mKJO1g47AFwbU3ZHCr17LHsA2Iz5Uf/D0d6CSgCYMXl3+JqGPN/Y33FfaA4DZzLGG2UxsI35Z9KCSkBW8iSgBXwHXOQo/5ZHLw23Aj8ntF2pBKxLeVBx5fImoAU84yj/uEcvLWsxqwmVT8CvmCvUJFaG5fLoJ8X7kaP8Wo9eFjZ72o+1vEsRrhlGK4X/GHAn8JvDvxTYD6wqoB/HqVA/ymgkDpfeHuv9NPAhZro8bfmawNfADQkxxNKrM6Dt+4T5s57B8PNO6LvM7jAwaz159D7H3MK12eKJofQhKOr/gNnZz9LwfSf1bTvqKL+igN5OR/lbPHUqlYAWZgXySPjaDf2oveEof1cBvZOO8qOeOpVLQK/0Z4AbHeVfLhCvb0hLbUFM43ViO3DY8fnGAppfOD5blleszmfAK4DrS7a+QLznwvo2D2U8xtoOQTPAXsyCnIsAc6cuT7y/AA/HlN/lOSanXRAjthBZj1n7+ZHkJ5FfAm5OqRflFPANc2+BtlkFPJJC00ldzoA0PIb7rlwRmpiLtjz9mHsIssfVIKO/0/o+Gpgb+3H3hvNORhrA6zGaXU2AvcS7xuO/qcv6SYwB72dsLw0jwDsZjqmjCdgLLAkDWQLss/z7Iv4Rh7+oftTvYgh4FHgbM2Znac/HauBFzO9M0c7PvRgH5uneY5gfINeDXVPA96E/z9amNPpfMfeiaAQzH7+C5O1Xce3ZelFGME81X55RN5EiCRAdIMBkXpTDmQD3wpLoDScD3OskojccDjBPJohymGhvUTqOeVRD9I5JYEUTc0MkIH7xSnSHbUQeFhhAG7R7af9vU42ijdq9MedG7WgSDlYgyLraIRL+qqDNAGbjdkfWOmS0wr58DrjY7uyk9ZJhzF/VjGMeOFqONvOlZYrZv6uZCG2y1IiEEEIIIYQQQgghhBBCCCGEEEIIIYQQPeM/uURowB/mrvMAAAAASUVORK5CYII=");

            /* https://codepen.io/sosuke/pen/Pjoqqp */
            filter: invert(66%) sepia(77%) saturate(1448%) hue-rotate(347deg) brightness(99%) contrast(91%);
        }

        /* Setting */

        body.hc-imdb .hc-tumbler-imdb .hc-tumbler-dot {
            transform: translateX(calc(100% - 2px));
        }

        /* !css */
        
        `);

        setup();
        document.addEventListener("DOMContentLoaded", setup);
        document.addEventListener("DOMContentLoaded", settings);

        function setWithExpiry(key, value, ttl) {
            const now = new Date();

            // `item` is an object which contains the original value
            // as well as the time when it's supposed to expire
            const item = {
                value: value,
                expiry: now.getTime() + ttl,
            };
            localStorage.setItem(key, JSON.stringify(item));
        }

        function getWithExpiry(key) {
            const itemStr = localStorage.getItem(key);
            // if the item doesn't exist, return null
            if (!itemStr) {
                return null;
            }
            const item = JSON.parse(itemStr);
            const now = new Date();
            // compare the expiry time of the item with the current time
            if (now.getTime() > item.expiry) {
                // If the item is expired, delete the item from storage
                // and return null
                localStorage.removeItem(key);
                return null;
            }
            return item.value;
        }

        function getRating(id) {
            return new Promise((resolve) => {
                console.debug(`HDrezka IMDB Rating: request quick content for id=${id}.`);
                GM_xmlhttpRequest({
                    method: "POST",
                    url: "/engine/ajax/quick_content.php",
                    data: `id=${id}&is_touch=1`,
                    headers: {
                        "Content-Type": "application/x-www-form-urlencoded",
                    },
                    onload: (response) => {
                        // One weak ttl in ms
                        const ttl = 7 * 24 * 60 * 60 * 1000;
                        if (response.status === 200) {
                            // Is 200 status code
                            // Find IMDb block
                            const ratingHTML = /<span class="imdb">IMDb: <b>.{1,60}\)<\/i><\/span>/.exec(
                                response.responseText
                            );
                            if (ratingHTML) {
                                // IMDb block found
                                let rating;
                                let votes;
                                try {
                                    // Get actual rating
                                    const rating = /(<b>)(.*)(<\/b>)/.exec(ratingHTML[0])[2];
                                    // Get actual votes count
                                    const votes = /(<i>)\((.*)\)(<\/i>)/.exec(ratingHTML[0])[2];
                                    // Save real rating to Storage
                                    // Resolve with real rating
                                    const data = {
                                        rating: rating,
                                        votes: votes,
                                        id: id,
                                    };
                                    setWithExpiry(id, data, ttl);
                                    resolve(data);
                                    console.debug(`HDrezka IMDB Rating: request quick content for id=${id} success.`);
                                    return;
                                } catch (err) {
                                    console.debug(err);
                                }
                            }
                            // IMDb block not found
                            // Save empty rating to storage to not make new request in next page load
                            // Resolve with empty rating
                            const data = { rating: "", votes: "", id: id };
                            setWithExpiry(id, data, ttl);
                            resolve(data);
                            console.debug(
                                `HDrezka IMDB Rating: request quick content for id=${id} success, but no correct data found.`
                            );
                        } else {
                            console.debug(
                                `HDrezka IMDB Rating: request quick content for id=${id} failed with ${response.status} status code.`
                            );
                            // Isn't 200 status code
                            // Don't save any rating so it will be requsted again in next page load
                            // Resolve with null rating
                            resolve({ rating: null, votes: null, id: id });
                        }
                    },
                    onerror: () => {
                        console.debug(`HDrezka IMDB Rating: request quick content for id=${id} failed.`);
                        // Request failed
                        // Don't save any rating so it will be requsted again in next page load
                        // Resolve with null rating
                        resolve({ rating: null, votes: null, id: id });
                    },
                });
            });
        }

        function showRating(ratingObject) {
            if (
                ratingObject &&
                ratingObject.id !== null &&
                ratingObject.rating !== null &&
                ratingObject.rating !== ""
            ) {
                // Got rating
                // Find related elements to append rating
                document
                    .querySelectorAll(`[data-id="${ratingObject.id}"] .b-content__inline_item-link`)
                    .forEach((contentItemLinkElement) => {
                        // Check rating wasn't already appended
                        if (contentItemLinkElement && !contentItemLinkElement.querySelector(".rating")) {
                            // Append rating block
                            let votesText;
                            try {
                                votesText = `${parseInt(parseInt(ratingObject.votes.replace(/\s/g, "")) / 1000)}k`;
                            } catch (err) {
                                console.debug(err);
                                votesText = "";
                            }
                            contentItemLinkElement.innerHTML +=
                                /* html */
                                `
                                    <!-- html -->
                                    <span class="rating">
                                        <span class="rating-value"><b>${ratingObject.rating}</b></span>
                                        <span> / </span>
                                        <span class="rating-votes">${votesText}</span>
                                    </span>
                                    <!-- !html -->
                                `;
                        }
                    });
            }
        }

        function getAndShowRating(contentItemElement) {
            const id = contentItemElement.dataset.id;
            const ratingObject = getWithExpiry(id);
            if (
                ratingObject !== null &&
                ratingObject.id != null &&
                ratingObject.rating != null &&
                ratingObject.votes != null
            ) {
                // Found vaid saved rating in storage
                // Show rating from storage
                return showRating(ratingObject);
            }
            // Rating not found in storage
            // Request rating and then show
            return getRating(id).then(showRating);
        }

        function setup() {
            if (!document.body) return;

            resolve();

            if (document.body.classList.contains("hc-imdb")) {
                document.querySelectorAll(".b-content__inline_item").forEach(getAndShowRating);
            }
        }

        function resolve() {
            if (!document.body) return;

            if (enabled()) {
                document.body.classList.add("hc-imdb");
            } else {
                document.body.classList.remove("hc-imdb");
            }
        }

        function enabled() {
            return localStorage.getItem("hc-imdb") == "true";
        }

        function toggle() {
            localStorage.setItem("hc-imdb", !enabled());
            document.location.reload();
        }

        function settings() {
            if (hc.settings) {
                hc.settings.tumbler(toggle, "hc-tumbler-imdb", "Рейтинг IMDb");
            }
        }
    }

    /* ------------------------------------------------- */
    /* --------------PLAYER----------------------------- */
    /* ------------------------------------------------- */

    function initPlayer() {
        hc.player = {};
        hc.player.playNextEpisode = playNextEpisode;
        hc.player.playPrevEpisode = playPrevEpisode;

        function play() {
            sof.tv.buildCDNPlayer("autoplay");
        }

        function playSiblingEpisode(direction) {
            const activeEpisode = document.querySelector(".b-simple_episode__item.active");
            if (activeEpisode && activeEpisode[direction]) {
                activeEpisode[direction].click();
                setTimeout(play, 1000);
            } else {
                const activeSeason = document.querySelector(".b-simple_season__item.active");
                if (activeSeason && activeSeason[direction]) {
                    activeSeason[direction].click();
                    setTimeout(play, 1000);
                }
            }
        }

        function playNextEpisode() {
            playSiblingEpisode("nextElementSibling");
        }

        function playPrevEpisode() {
            playSiblingEpisode("previousElementSibling");
        }
    }

    /* ------------------------------------------------- */
    /* --------------PLAYER-AUTO-PLAY-NEXT-------------- */
    /* ------------------------------------------------- */

    function initAutoPlayNext() {
        GM_addStyle(`

        /* css */

        /* Setting */

        body.hc-auto-play-next .hc-tumbler-auto-play-next .hc-tumbler-dot {
            transform: translateX(calc(100% - 2px));
        }

        /* !css */
        
        `);
        setup();
        resolve();
        document.addEventListener("DOMContentLoaded", resolve);
        document.addEventListener("DOMContentLoaded", settings);

        function setup() {
            window.addEventListener("message", function (event) {
                if (enabled() && event.data && event.data.event == "ended") {
                    hc.player.playNextEpisode();
                }
            });
        }

        function resolve() {
            if (!document.body) return;

            if (enabled()) {
                document.body.classList.add("hc-auto-play-next");
            } else {
                document.body.classList.remove("hc-auto-play-next");
            }
        }

        function enabled() {
            return localStorage.getItem("hc-auto-play-next") == "true";
        }

        function toggle() {
            localStorage.setItem("hc-auto-play-next", !enabled());
            resolve();
        }

        function settings() {
            if (hc.settings) {
                hc.settings.tumbler(toggle, "hc-tumbler-auto-play-next", "Быстрое автопереключение серий и сезонов");
            }
        }
    }

    /* ------------------------------------------------- */
    /* --------------HOTKEYS---------------------------- */
    /* ------------------------------------------------- */

    function initHotkeys() {
        document.onkeyup = function (e) {
            switch (e.code) {
                case "KeyN":
                    hc.player.playNextEpisode();
                    break;
                case "KeyP": {
                    hc.player.playPrevEpisode();
                    break;
                }
            }
        };
    }

    /* ------------------------------------------------- */
    /* --------------SETTINGS--------------------------- */
    /* ------------------------------------------------- */

    function initSettings() {
        const settingsOpenImgURL =
            "data:image/png;base64,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";
        const settingsCloseImgURL =
            "data:image/png;base64,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";

        GM_addStyle(`

        /* css */

        /* Settings */

        .hc-settings {
            position: relative;
        }

        /* Settings tumbler */

        .hc-settings-tumbler {
            margin-top: 5px;
            margin-left: 10px;
        }
        .hc-settings-tumbler:before {
            background-image: url('${settingsOpenImgURL}');
            background-color: transparent !important;
        }
        .hc-settings-tumbler:after {
            background-image: url('${settingsCloseImgURL}');
            background-color: transparent !important;
        }
        .hc-settings.active .hc-settings-tumbler > .hc-tumbler-dot {
            transform: translateX(calc(100% - 2px));
        }
        .hc-settings ul {
            width: 350px;
            display: none;
            background: #313131;
            border-top: 0;
            position: absolute;
            top: 40px;
            left: 0px;
            white-space: nowrap;
            box-shadow: 0 5px 20px 0px rgb(0 0 0 / 70%);
            border-color: #222d33;
            border-style: solid;
            border-width: 0 3px 3px 3px;
            padding: 5px 0;
        }
        .hc-settings.active ul {
            display: block;
        }
        .hc-settings ul li {
            white-space: nowrap;
            color: #777;
            font-size: 10px;
            font-weight: bold;
            margin: 0 !important;
            padding: 5px 10px;
            line-height: 30px;
        }

        body.b-theme__template__night .hc-settings ul {
            background: #060f13;
        }

        /* !css */

        `);

        hc.settings = {};
        hc.settings.add = add;
        hc.settings.tumbler = tumbler;

        document.addEventListener("DOMContentLoaded", setup);

        function setup() {
            const tophead = document.querySelector(".b-tophead-left");
            if (!tophead) return;

            const elem = document.createElement("div");
            elem.classList.add("hc-settings");
            elem.classList.add("pull-left");
            elem.insertAdjacentHTML(
                "beforeend",
                /* html */
                `
                    <!-- html -->
                    <div class="hc-tumbler hc-settings-tumbler">
                        <div class="hc-tumbler-dot"></div>
                    </div>
                    <ul></ul>
                    <!-- !html -->
                `
            );

            const tumbler = elem.querySelector(".hc-settings-tumbler");
            tumbler.addEventListener("click", toggle);

            document.addEventListener("click", close);

            tophead.appendChild(elem);
        }

        function toggle(event) {
            event.target.closest(".hc-settings").classList.toggle("active");
            event.stopPropagation();
        }

        function close(event) {
            if (!event.target.closest(".hc-settings")) {
                document.querySelector(".hc-settings").classList.remove("active");
            }
        }

        function add(element) {
            const tophead = document.querySelector(".b-tophead-left");
            if (!tophead) return;

            const dropdown = tophead.querySelector(".hc-settings ul");
            if (!dropdown) return;

            const item = document.createElement("li");
            item.appendChild(element);
            dropdown.appendChild(item);
        }

        function tumbler(actionFunc, className, textLabel) {
            if (!hc.settings) return;
            const elem = document.createElement("div");
            elem.insertAdjacentHTML(
                "beforeend",
                /* html */
                `
                    <!-- html -->
                    <div class="hc-tumbler ${className} pull-right">
                        <div class="hc-tumbler-dot"></div>
                    </div>
                    <span>${textLabel}</span>
                    <!-- !html -->
                `
            );
            const tumbler = elem.querySelector(".hc-tumbler");
            tumbler.addEventListener("click", actionFunc);
            add(elem);
        }
    }

    /* ------------------------------------------------- */
    /* --------------DOCUMENT--------------------------- */
    /* ------------------------------------------------- */

    function onDocumentStart() {
        initSettings();
        initPlayer();
        initContentSizeTumbler();
        initHideAds();
        initStyleImprovements();
        initHideInfoButton();
        initHideTranslatorsButton();
        initPlayerCover()
        initIMDbRating();
        initAutoPlayNext();
        initHideRussian();
        initHotkeys();
    }

    function onDocumentEnd() {}

    document.addEventListener("DOMContentLoaded", onDocumentEnd);

    onDocumentStart();
})();