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-13 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 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.32
// @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
// @run-at          document-start
// @license         MIT
// ==/UserScript==


(function() {
    'use strict';

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

    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(`
    /* Padding for content */
    .b-wrapper {
        padding-left: 30px;
        padding-right: 30px;
    }

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

    /* Remove extra right padding on main content listing */
    .b-content__inline_inner_mainprobar {
        padding-right: 0;
    }
    .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;
        margin: 0px 10px 0px 13px;
    }

    /* Style and resize rating block */
    .b-post__rating_table {
        width: 100%;
    }
    .b-post__rating_table td > * {
        float: right;
    }
    .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;
        padding: 0;
    }

    /* 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;
    }
    `);

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

    function initHideAds() {
        GM_addStyle(`

        /* 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));
        }
        `);

        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() {
            const elem = document.createElement('div');
            elem.insertAdjacentHTML('beforeend', `
                <div class='hc-tumbler hc-tumbler-hide-ads pull-right'>
                    <div class='hc-tumbler-dot'></div>
                </div>
                <span>Скрыть рекламные блоки</span>
            `);
            const tumbler = elem.querySelector('.hc-tumbler');
            tumbler.addEventListener('click', toggle);
            addSetting(elem);
        }
    }

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

    function initStyleImprovements() {
        GM_addStyle(`

        /* 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;
            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;
        }

        /* 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));
        }
        `);

        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() {
            const elem = document.createElement('div');
            elem.insertAdjacentHTML('beforeend', `
                <div class='hc-tumbler hc-tumbler-styles pull-right'>
                    <div class='hc-tumbler-dot'></div>
                </div>
                <span>Визуальные изменения</span>
            `);
            const tumbler = elem.querySelector('.hc-tumbler');
            tumbler.addEventListener('click', toggle);
            addSetting(elem);
        }
    }

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

    GM_addStyle(`

    /* 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;
    }
    `);


    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(`

        /* 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;
        }
        `);

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

        function settings() {
            const elem = document.createElement('div');
            elem.classList.add('hc-content-size-setting');
            elem.insertAdjacentHTML('beforeend', `
                <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>
            `);
            const tumbler = elem.querySelector('.hc-content-size-tumbler');
            tumbler.addEventListener('click', rotate);
            addSetting(elem);
        }

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

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

    function initHideInfoButton() {
        GM_addStyle(`

        /* 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%);
        }
        `);

        resolve();
        document.addEventListener('DOMContentLoaded', setup);
        document.addEventListener('DOMContentLoaded', resolve);

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

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

            initCover();
        }

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

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

            GM_addStyle(`
            #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;
            }
            `);
        }

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

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

    function initHideTranslatorsButton() {
        GM_addStyle(`

        /* 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;
        }
        `);

        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(`

        /* 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));
        }
        `);

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


        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() {
            const elem = document.createElement('div');
            elem.classList.add('hc-hide-russian-setting');
            elem.insertAdjacentHTML('beforeend', `
                <div class='hc-tumbler hc-tumbler-hide-russian pull-right'>
                    <div class='hc-tumbler-dot'></div>
                </div>
                <span>Скрыть контент из страны-агрессора</span>
            `);
            const tumbler = elem.querySelector('.hc-tumbler');
            tumbler.addEventListener('click', toggle);
            addSetting(elem);
        }
    }

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

    function initIMDbRating() {

        GM_addStyle(`

        /* 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));
        }
        `)

        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 ratingSpan = /<span class="imdb">IMDb: <b>.{1,60}\)<\/i><\/span>/.exec(response.responseText);
                            if (ratingSpan) {
                                // IMDb block found
                                let rating;
                                let votes;
                                try {
                                    // Get actual rating
                                    const rating = /(<b>)(.*)(<\/b>)/.exec(ratingSpan[0])[2];
                                    // Get actual votes count
                                    const votes = /(<i>)\((.*)\)(<\/i>)/.exec(ratingSpan[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 element to append rating
                const contentItemLinkElement = document.querySelector(
                    `[data-id="${ratingObject.id}"] .b-content__inline_item-link`
                );
                // 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 += `
                        <span class="rating">
                            <span class="rating-value"><b>${ratingObject.rating}</b></span>
                             <span> / </span>
                        <span class="rating-votes">${votesText}</span>
                        </span>
                    `;
                }
            }
        }

        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() {
            const elem = document.createElement('div');
            elem.insertAdjacentHTML('beforeend', `
                <div class='hc-tumbler hc-tumbler-imdb pull-right'>
                    <div class='hc-tumbler-dot'></div>
                </div>
                <span>Рейтинг IMDb</span>
            `);
            const tumbler = elem.querySelector('.hc-tumbler');
            tumbler.addEventListener('click', toggle);
            addSetting(elem);
        }
    }

    /* ------------------------------------------------- */
    /* --------------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(`

        /* 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: 320px;
            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;
        }
        `);

        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', `
                <div class='hc-tumbler hc-settings-tumbler'>
                    <div class='hc-tumbler-dot'></div>
                </div>
                <ul></ul>
            `);

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


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

    function onDocumentStart() {
        initSettings();
        initContentSizeTumbler();
        initHideAds();
        initStyleImprovements();
        initHideInfoButton();
        initHideTranslatorsButton();
        initIMDbRating();
        initHideRussian();
    }

    function onDocumentEnd() {}

    document.addEventListener('DOMContentLoaded', onDocumentEnd);

    onDocumentStart();

})();