// ==UserScript==
// @name HDrezka Cleanup
// @name:en HDrezka Cleanup
// @namespace http://tampermonkey.net/
// @version 0.36
// @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) return;
const elem = document.createElement("div");
elem.insertAdjacentHTML(
"beforeend",
/* html */
`
<!-- html -->
<div class="hc-tumbler hc-tumbler-styles 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);
}
}
/* ------------------------------------------------- */
/* --------------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 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);
}
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(`
/* 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%);
}
/* !css */
`);
setup()
resolve();
document.addEventListener("DOMContentLoaded", setup);
document.addEventListener("DOMContentLoaded", resolve);
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", 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(`
/* css */
#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-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(`
/* 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) return;
const elem = document.createElement("div");
elem.classList.add("hc-hide-russian-setting");
elem.insertAdjacentHTML(
"beforeend",
/* html */
`
<!-- html -->
<div class="hc-tumbler hc-tumbler-hide-russian 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);
}
}
/* ------------------------------------------------- */
/* --------------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) return;
const elem = document.createElement("div");
elem.insertAdjacentHTML(
"beforeend",
/* html */
`
<!-- html -->
<div class="hc-tumbler hc-tumbler-imdb pull-right">
<div class="hc-tumbler-dot"></div>
</div>
<span>Рейтинг IMDb</span>
<!-- !html -->
`
);
const tumbler = elem.querySelector(".hc-tumbler");
tumbler.addEventListener("click", toggle);
hc.settings.add(elem);
}
}
/* ------------------------------------------------- */
/* --------------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) return;
const elem = document.createElement("div");
elem.insertAdjacentHTML(
"beforeend",
/* html */
`
<!-- html -->
<div class="hc-tumbler hc-tumbler-auto-play-next 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);
}
}
/* ------------------------------------------------- */
/* --------------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,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAABmJLR0QA/wD/AP+gvaeTAAAHl0lEQVRoge2ZbWydZRnHf//ntD1th0EYGa0b48UQJtMRI6LQntEomnQ9HSwyiYnKmx9QE4MgJgiRKXwhIjMhcUHHgEgihsiAtSUmS5xbtwXQiMgEg3EMSk8LbGR2fTnrOfffD6ej571PkeOnXV9Ozv3c9/+6/s993dd9XdcDJ+WknJR6okYBZ67qOYfZ3DUlg81Nv+t8atfrjdDX1AhQAHK5PqR7wAUdJkc+NwH8shHqokaAzsl52Il5TY4IOrdRyhpGxHgdKnJdKwLWNUpfQ4iMp7svEqyseKBwzti6tZ9qhM5FEcms796USaf+9mb60uW15hgU0BahZBV1SeQtrhNkRvu7V2b6Ui9l1ndvWoxtsaNWpr/rpwTdgkiCpxRFPzicPPLo6icOHAcY2XDJ0sRs8gbjG2VWIJbUUDlpPCL0UL45u23F9ucPA7zW25s8pfnYDQTfK2izyRL5/s4de3/8oRHJ9Hf9hKBbi40TTLjwu9ORxwn6poVk2uJgGqYFlvgNZpnFl+YenFI0aZIE93U+M7zg7sQjku5+WXCBa4VrOcwd5sVLnbWCnK1XOgf3rFkIJpbykIh6DdM1J9QwxDAt6aiko9RaX+cFGE/llOuNY2PsMzKaTt0k/DMo2vrqMoE9a/GspH0E3pnTtExwmaGXws5+ZCEcJXxLx9N7t8axLzaRAxtXt5w+c9rhEh8ulSnBe8C3z7x4eFCbCNUmeRPR+AtdaUtbJH/UVnsNvIkjbe+dcSKYLCSLyrXG0t1PGjZUGAdTQttybbkfnvXE/touWCRvbry0rWkqcZ/FdYJKMuLJzh3DX4lr26JyrSDekR2gyK/NpODuzsE99y4Ga47wd8fSqRHbd5SGawfE24vBix1pRjZcslTm6yUkAItmROvBnp7WxSgGONjT02rcYtFc+kQRQd8Y2XDJ0rhYsYkkZpM3WJWuKGjB3NZ6Su5QJp26Oi5eJp26unVJ7g3BbYKW8ueGKJFrvT4uXqwzYtBYuvsV4IL5lZ7Gai3BEMeAVyPzrWWZ6X+MdbZ9zVJqDmV35+j04293tl0YxFZgVVngMCaLaJ0f4J+dA8OfEPh/JjKe7r4ooC3gNVDkx+Io6N+yz3dxSJaDraxgEtE6b6yOgWfA7YXxeRcVHAP+ZXEu5tQi9ZOyXlSC75z5zJ6XFkUkc1XPOeRyfYbzwOsEK0WUNEW1ReENPdIxMHzjeN9l11jRAxQiT61QWkumgCkFvnfm0PDjY31d24yuVZELC/LGWcMbkgYxBx3CwMeG9h0qBqo8I7nctZjNgu8LrQK1l5EAmLb8nMAdg/sez7XlV1psBk/JzC5kfWGOpyQ2W9NndwwN/1Zgi+ek0gzAkAC1C63C3IrZrCi6rhyzWvgVFVGkfIZmo+DMib9zofTOt65c+2CUD38C6laCFiMhkbh8+dO73ywej8yoI83iOkeiYFuFJ32wRC+ARa58eM6wl2MgvFxOAsBEedVlAXMHv2JONSKm4B61ASMnZHXUULXHuN7tPmXYVXVlFDocVMcbHCxySBW2VbpWU9Oj5HLvBnR2hNPA2aAkxefEbncUXQxsK1/ekj/+YLap+UeY0tBc+OMA2ebIv65mZgj6rOSyekZ5cNbW65YGo8BBOz9Uvnbh8Ls+tSafZ4vki6CksBrtGBiuWvKO9nV/hoidgiQnCi0xbcha0ReWP7P7r9XWZfq7RzGdRUOTsl6E/E0dg/vquuwHvxDRMRzWdw7u/WO1NUeuuOLUbOvMKHMhWWiyZSa5/PSdO49Wmz+WTn3R8lOll6Rf7RjYe2GcCzHWYS8A6SFKQqOXSLq/ViOhYLDfDwiWc7VIGIT9c3l+xw3TKPFQHBKxiQDkm7PbcAmoQOdn+lO3x8WoJZm+1O1EfLz4pQhC7vhsxRmsJbGJrNj+/GGLxwrntSDGS3C4M9PXvTG+2aWSWdf1VUW+wy5Lc+THzvrD/iNxcRZ1j0SwrDyNF2pDPDLWn7q5Xr+qXLyJKJNO3aZID+Oy1MaK5OiMRdoWT17r7U0arqjxuB377rF06s+jfV2phbAy/anLx1/o/gtwl2vmZ/7ygY2rK9L7WhK7QlySOHa9qH3tFjJgf1qRhjL9Xe9iBoxaTmyRTTKT7noA1I+91GIJuOYOGnTazNLrgQfj2BfLFd66cu1ZUT4cYOHOxzxwIZ0/Du/XFzOSW7yo/pf/ExKJT1ZLZ8olFmiUD0OiTgdRlR2TOYOLy9/WqiTkqt2WAqzao3x4NpaNcSYhb7fJlmmZACaQfm/YCkyhOk28Mplr+E0hfiXYDkwIJkrmmCzyk7FMjKt4rL/7Hgdulki6ThMbfCOwAmo1sZk0jEjR1nzTzMMnmtgHNq5uWZo9/VqHcJ9Qu01WEb/o2DF854dKBE40s6MN+ZBYt+LZXSPV5hiUSaeGZX8OUVaQKQ/e3zEwvLbWjT3S27MiEeWHiML2zh1774prW0M+ho6vT60JIeyHii7ilEL0+Y6h3X//sHU25ItVoVGgQ+Xjtg41ggQ08mOoGCrJzeRgGGyUusYRMQfFfDmsoHwU+WCj1DXuO3tT02DI5ZdLjgACCkokKiq7k3JSTsr/R/4LDG0pHVdMdVIAAAAASUVORK5CYII=";
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;
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);
}
}
/* ------------------------------------------------- */
/* --------------DOCUMENT--------------------------- */
/* ------------------------------------------------- */
function onDocumentStart() {
initSettings();
initPlayer();
initContentSizeTumbler();
initHideAds();
initStyleImprovements();
initHideInfoButton();
initHideTranslatorsButton();
initIMDbRating();
initAutoPlayNext();
initHideRussian();
initHotkeys();
}
function onDocumentEnd() {}
document.addEventListener("DOMContentLoaded", onDocumentEnd);
onDocumentStart();
})();