您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Cleanup HDrezka: change content width, change player size, remove blocks (telegram, social, support, vk, etc), restyle blocks (cover, status, rating, etc)
当前为
// ==UserScript== // @name HDrezka Cleanup // @name:en HDrezka Cleanup // @namespace http://tampermonkey.net/ // @version 0.66 // @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://hdrezka.club/* // @match https://rezka.ag/* // @match https://rezkify.com/* // @match https://kinopub.me/* // @match http://hdrezka.tv/* // @match http://hdrezka.co/* // @match http://hdrezka.ink/* // @match http://hdrezka.buzz/* // @match http://hdrezka.loan/* // @match http://hdrezka.center/* // @match http://hdrezka.city/* // @match http://hdrezka.fyi/* // @match http://hdrezka.run/* // @match http://hdrezka.today/* // @match http://hdrezka.win/* // @match http://hdrezka.tips/* // @match http://hdrezka.vip/* // @match http://hdrezka.solutions/* // @icon https://www.google.com/s2/favicons?domain=rezka.ag // @grant GM_addStyle // @grant GM_xmlhttpRequest // @run-at document-body // @license MIT // ==/UserScript== (function () { "use strict"; /* ------------------------------------------------- */ /* --------------GLOBAL----------------------------- */ /* ------------------------------------------------- */ let hc = {}; /* ------------------------------------------------- */ /* --------------DEBUG------------------------------ */ /* ------------------------------------------------- */ // unsafeWindow.hc = hc; /* ------------------------------------------------- */ /* --------------IMAGES----------------------------- */ /* ------------------------------------------------- */ const images = { arrowImgURL: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAABaCAYAAAA4qEECAAAABmJLR0QA/wD/AP+gvaeTAAABa0lEQVR4nO3awUrDQBSF4dMuGhc+uF0puK/v4KL4RPoARbLUxTRQi5nMJDPJvcn/gRsp5NyfWgSVAAAAAAAAAAAAAAAAAACYXSPpKOlL0qekp+v3UNBB0rukn7uvD0kPC+5alb7IxC5oKDKxC0iNTOwJciMTe4SxkYmdoZF0VjzkOfE1/OrXI+Wd3L1bc16LG2PCETvTlGDETlQiFLEHlAxE7B41whD7Ts0gxL6aI8TmY88ZYLOxlzh8c7GXPHgzsS0camFDVZYOtLSlKIuHWdw0ieWDLG/L4uEQDxujPB3gaesfHoe72+xu8A03290MjTB/g/mBGczeYnbYBOZuSv2XAI9/7jd126uVIZWkxH6pPWIv6TsywHvkzlDsi6RdzQF7SW3Pw9cSuROL3Sq0qOrtnwevLXKnL/Zpjoc/KsRuFX6EnrXOyJ1G4TP5onDzSaHBbKp+Rhm00/ZuBgAAAAAAAAAAAAAAAODKL8SQFSF3JeZKAAAAAElFTkSuQmCC", settingsOpenImgURL: "data:image/png;base64,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", settingsCloseImgURL: "data:image/png;base64,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", imdbImgURL: /* https://icons8.com/icon/V0AXUEQxEIf5/imdb */ "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=", expandImgURL: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/AP+gvaeTAAAAvElEQVRIie2UPQ7CMAxGn5gzl4qLMjYjUnsbBi6CVLgAA5eAgUYqxnaa8rPQT4rUJF/8kjoxLCrUzWiN4t06/iKAFjwHmQxoPfOg9h3AGdg4/jVwnAPogH747oFa8dbC000FRCNAGPmCsYGYA0TRTxA5nrza6TSvqzBz7o/00V+0E/10z+U4PJKpvRM3yV+/pj95aON2wi8VFZlSsfJowB64OPNX4JCJ8SSt9GoJTorGmiKABbGCu4BFL7oDR9d+PRMVHjcAAAAASUVORK5CYII=", }; /* ------------------------------------------------- */ /* --------------DOCUMENT--------------------------- */ /* ------------------------------------------------- */ function onDocumentStart() { initSettings(); initPlayer(); initContentSizeTumbler(); initAutoPlayNext(); initHideAds(); initHidePlayerAds(); initStyleImprovements(); initPlayerCover(); initPlayerFullPage(); initHideInfo(); initHideComments(); initHideTranslators(); initIMDbRating(); initHotkeys(); initHideRussian(); } function onDocumentEnd() {} document.addEventListener("DOMContentLoaded", onDocumentEnd); onDocumentStart(); /* ------------------------------------------------- */ /* --------------GLOBAL-STYLES---------------------- */ /* ------------------------------------------------- */ GM_addStyle(` /* css */ /* 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; } /* !css */ `); /* ------------------------------------------------- */ /* --------------PLAYER----------------------------- */ /* ------------------------------------------------- */ function initPlayer() { 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: auto !important; min-height: 300px !important; } /* !css */ `); hc.player = {}; hc.player.start = start; hc.player.play = play; hc.player.pause = pause; hc.player.stop = stop; hc.player.next = next; hc.player.prev = prev; hc.player.toggle = toggle; hc.player.fullscreen = fullscreen; hc.player.exitfullscreen = exitfullscreen; hc.player.poster = poster; hc.player.resize = resize; hc.player.mute = mute; hc.player.vast = vast; hc.player.shoudvast = 0; setup(); function setup() { window.addEventListener("message", function (event) { if (event.data) { if (event.data.event == "init") { vast(hc.player.shoudvast); } if (event.data.event == "inited") { poster("hc-poster"); } if (event.data.event == "new") { vast(hc.player.shoudvast); } if (event.data.event == "fullscreen") { resize(); } if (event.data.event == "exitfullscreen") { resize(); } } }); } function defined() { return typeof CDNPlayer != "undefined"; } function start() { sof.tv.buildCDNPlayer(); vast(hc.player.shoudvast); play(); } function vast(value) { hc.player.shoudvast = value; if (defined()) { CDNPlayer.api("update:vast", value); } } function play() { vast(hc.player.shoudvast); if (defined()) { CDNPlayer.api("play"); } } function pause() { if (defined()) { CDNPlayer.api("pause"); } } function stop() { if (defined()) { CDNPlayer.api("stop"); } } function toggle() { if (defined()) { if (!CDNPlayer.api("started")) { play(); } else { vast(hc.player.shoudvast); CDNPlayer.api("toggle"); } } } function fullscreen() { if (defined()) { CDNPlayer.api("fullscreen"); } } function exitfullscreen() { if (defined()) { CDNPlayer.api("exitfullscreen"); } } function poster(poster) { if (defined()) { CDNPlayer.api("poster", poster); } } function mute() { if (defined()) { if (!CDNPlayer.api("muted")) { CDNPlayer.api("mute"); } else { CDNPlayer.api("unmute"); } } } function sibling(direction) { const activeEpisode = document.querySelector(".b-simple_episode__item.active"); if (activeEpisode && activeEpisode[direction]) { activeEpisode[direction].click(); setTimeout(start, 1000); } else { const activeSeason = document.querySelector(".b-simple_season__item.active"); if (activeSeason && activeSeason[direction]) { activeSeason[direction].click(); setTimeout(start, 1000); } } } function next() { sibling("nextElementSibling"); } function prev() { sibling("previousElementSibling"); } function calc(initialSize, newWidth, maxHeight) { let initialWidth = initialSize.width; let initialHeight = initialSize.height; let resizedWidth = initialSize.width; let resizedHeight = initialSize.height; if (initialHeight > 0 && initialWidth !== newWidth) { let ratio = initialWidth / initialHeight; resizedWidth = newWidth; resizedHeight = newWidth / ratio; if (resizedHeight > maxHeight) { resizedHeight = maxHeight; resizedWidth = maxHeight * ratio; } } return { width: resizedWidth, height: resizedHeight, }; } function resize() { const contentMain = document.querySelector(".b-content__main"); if (contentMain) { const playerHolder = document.querySelector(".b-player__holder_cdn"); const playerContainer = document.querySelector(".b-player__container_cdn"); if (playerHolder && playerContainer) { const initial = { width: playerHolder.offsetWidth, height: playerHolder.offsetHeight, }; const resized = calc(initial, contentMain.offsetWidth, window.innerHeight); if (initial.width !== resized.width) { playerHolder.style.width = resized.width + "px"; playerContainer.style.height = resized.height + "px"; console.log( `HDrezka Cleanup: cdn player resized ` + `from ${initial.width}x${initial.height} ` + `to ${resized.width}x${resized.height}.` ); } if (defined()) { CDNPlayer.api("resize"); } } } } } /* ------------------------------------------------- */ /* --------------CONTENT-SIZE----------------------- */ /* ------------------------------------------------- */ function initContentSizeTumbler() { GM_addStyle(` /* css */ /* Padding for content */ .b-wrapper { padding-left: 30px !important; padding-right: 30px !important; } .b-footer { width: auto !important; } .b-search__form.focused, .search-results { width: calc(100% - 60px); left: 30px; } /* 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 (HDrezka tracker block) */ .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; } /* Content Size Tumbler */ .hc-tumbler-content-size { width: 78px !important; } .hc-tumbler-content-size .hc-tumbler-point:nth-child(1) { border-width: 8px; } .hc-tumbler-content-size .hc-tumbler-point:nth-child(2) { border-width: 7px; } .hc-tumbler-content-size .hc-tumbler-point:nth-child(3) { border-width: 6px; } .hc-tumbler-content-size .hc-tumbler-point:nth-child(4) { border-width: 5px; } /* Content Sizes */ body { min-width: 1020px; } 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 */ `); settings(); function settings() { if (hc.settings) { hc.settings.createTumblerSetting({ name: "content-size", label: "Максимальная ширина контента", classes: [], options: [ { class: null, text: "960 px", end: function () { window.removeEventListener("resize", hc.player.resize); hc.player.resize(); }, }, { class: "hc-content-size-wide", text: "1150 px", end: function () { window.removeEventListener("resize", hc.player.resize); window.addEventListener("resize", hc.player.resize); hc.player.resize(); }, }, { class: "hc-content-size-ultrawide", text: "1340 px", end: function () { window.removeEventListener("resize", hc.player.resize); window.addEventListener("resize", hc.player.resize); hc.player.resize(); }, }, { class: "hc-content-size-full", text: "1340 px", end: function () { window.removeEventListener("resize", hc.player.resize); window.addEventListener("resize", hc.player.resize); hc.player.resize(); }, }, ], }); } } } /* ------------------------------------------------- */ /* --------------PLAYER-FULL-PAGE------------------- */ /* ------------------------------------------------- */ function initPlayerFullPage() { GM_addStyle(` /* css */ body.hc-player-full-page { height: 100%; overflow: hidden; } body.hc-player-full-page .b-player__container_cdn { position: fixed !important; width: 100% !important; height: 100% !important; top: 0; left: 0; z-index: 1000; } .hc-player-top-bar { position: absolute; width: 100%; top: 0; left: 0; padding: 20px; background: linear-gradient( to bottom, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .1) 70%, rgba(0, 0, 0, 0) 100% ); box-sizing: border-box; pointer-events: none } .hc-player-top-bar:hover { display: block !important; visibility: visible !important; } .hc-player-top-bar-title { cursor: pointer; position: relative; display: inline; float: left; text-align: left; line-height: 20px; font-size: 20px; font-weight: bold; pointer-events: all; padding-left: 30px; user-select: none; } .hc-player-top-bar-title:before { content: ''; position: absolute; top: 0; left: 0; width: 20px; height: 20px; margin-right: 10px; background-size: 20px 20px; background-repeat: no-repeat; background-image: url(${images.expandImgURL}); filter: invert(100%) sepia(95%) saturate(21%) hue-rotate(280deg) brightness(106%) contrast(106%); transform: rotate(-90deg); } body.hc-player-full-page .hc-player-top-bar-title:before { background-image: url(${images.arrowImgURL}) !important; } /* !css */ `); setup(); function setup() { var collapsed = false; const playerTopBar = document.createElement("div"); playerTopBar.classList.add("hc-player-top-bar"); const playerTopBarTitle = document.createElement("div"); playerTopBarTitle.classList.add("hc-player-top-bar-title"); playerTopBarTitle.addEventListener("click", () => { collapsed = true; hc.player.exitfullscreen() document.body.classList.toggle("hc-player-full-page"); hc.player.resize(); }); playerTopBar.appendChild(playerTopBarTitle); window.addEventListener("message", function (event) { if (event.data) { if (event.data.event == "init") { const player = document.querySelector("#oframecdnplayer"); if (player) { const postTitle = document.querySelector(".b-post__title h1"); if (postTitle) { playerTopBarTitle.innerText = postTitle.innerText; } player.appendChild(playerTopBar); } } if (event.data.event == "play") { if (!collapsed && document.body.classList.contains("hc-player-full-page-enabled")) { document.body.classList.add("hc-player-full-page"); hc.player.resize(); } } if (event.data.event == "ui") { if (event.data.data == 0) { playerTopBar.classList.add("hidden"); } if (event.data.data == 1) { playerTopBar.classList.remove("hidden"); } } if (event.data.event == "fullscreen") { document.body.classList.add("hc-player-full-page"); } } }); } settings(); function settings() { if (hc.settings) { hc.settings.createTumblerSetting({ name: "player-full-page", label: "Разворачивать плеер на всю страницу", classes: ["hc-on-of-tumbler"], options: [ { class: null, text: "Выкл", }, { class: "hc-player-full-page-enabled", text: "Вкл", }, ], }); } } } /* ------------------------------------------------- */ /* --------------PLAYER-AUTO-PLAY-NEXT-------------- */ /* ------------------------------------------------- */ function initAutoPlayNext() { setup(); settings(); function setup() { window.addEventListener("message", function (event) { if (event.data && event.data.event == "ended") { if (document.body.classList.contains("hc-auto-play-next-enabled")) { hc.player.next(); } } if ( event.data && event.data.event == "time" && event.data.data != 0 && event.data.data >= event.data.duration - 1 ) { if (document.body.classList.contains("hc-auto-play-next-disabled")) { hc.player.stop(); } } }); } function settings() { if (hc.settings) { hc.settings.createTumblerSetting({ name: "auto-play-next", label: "Автопереключение", classes: [], options: [ { class: null, text: "Только эпизоды (поведение по умолчанию)", }, { class: "hc-auto-play-next-enabled", text: "Эпизоды и сезоны (быстрое переключение)", }, { class: "hc-auto-play-next-disabled", text: "Выкл", }, ], }); } } } /* ------------------------------------------------- */ /* --------------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; } /* !css */ `); settings(); function settings() { if (hc.settings) { hc.settings.createTumblerSetting({ name: "hide-ads", label: "Скрыть рекламные блоки", classes: ["hc-on-of-tumbler"], options: [ { class: null, text: "Выкл", }, { class: "hc-hide-ads", text: "Вкл", default: true, }, ], }); } } } /* ------------------------------------------------- */ /* --------------HIDE-PLAYER-ADS-------------------- */ /* ------------------------------------------------- */ function initHidePlayerAds() { settings(); function settings() { if (hc.settings) { hc.settings.createTumblerSetting({ name: "hide-player-ads", label: "Отключить рекламные ролики в плеере", classes: ["hc-on-of-tumbler"], options: [ { start: function () { hc.player.vast(1); }, class: null, text: "Выкл", }, { start: function () { hc.player.vast(0); }, class: "hc-player-hide-ads", text: "Вкл", default: true, }, ], }); } } } /* ------------------------------------------------- */ /* --------------STYLE-IMPROVEMENTS----------------- */ /* ------------------------------------------------- */ function initStyleImprovements() { GM_addStyle(` /* css */ /* Top Nav */ body.hc-style .b-topnav__sub_inner a { color: #000 !important; } body.hc-style.b-theme__template__night .b-topnav__sub_inner a { color: #fff !important; } /* Slider */ body.hc-style .b-newest_slider__list .b-content__inline_item { width: 92px; margin-right: 8px; } body.hc-style.b-theme__template__night .b-newest_slider__title span { border-color: #fff; color: #fff; } /* Sidelist */ body.hc-style .b-sidelist .b-content__inline_item { width: 92px; margin-right: 8px; } /* Сontent item */ body.hc-style .b-content__inline_item { width: 166px; margin-right: 10px; } body.hc-style .b-content__inline_item .b-content__inline_item-link a, body.hc-style .b-content__inline_item .b-content__inline_item-link a:visited { color: #000; } 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; } 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-theme__template__night .b-content__inline_item .cat { background-color: #060f13 !important; } 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 .info { background-color: #6f6f6f; color: #fff; 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-content__inline_item-cover { padding: 0; border: 0; } /* Сontent page */ body.hc-style .b-post .b-post__partcontent a, body.hc-style .b-post__info a, body.hc-style .b-post__info .persons-list-holder .person-name-item a { color: #000 !important; border-color: #000; } body.hc-style.b-theme__template__night .b-post .b-post__partcontent a, body.hc-style.b-theme__template__night .b-post__info a, body.hc-style.b-theme__template__night .b-post__info .persons-list-holder .person-name-item a { color: #fff !important; border-color: #fff; } body.hc-style .b-sidecover { background: none; border: none; padding: 0; overflow: hidden; border-radius: 4px; } body.hc-style .b-post .b-sidetitle, body.hc-style .b-post .b-post__mtitle { font-size: 16px; font-weight: bold; line-height: 18px; overflow: hidden; padding: 10px 18px; text-overflow: ellipsis; white-space: nowrap; } body.hc-style .b-post .b-post__actions .btn, body.hc-style .b-post .b-sidetitle, body.hc-style .b-post .b-post__schedule_block_title, body.hc-style .b-post .b-post__schedule_more, body.hc-style .b-post .b-post__mtitle { background: #ddd; } body.hc-style .b-post .b-post__actions .btn, body.hc-style .b-post .b-sidetitle, body.hc-style .b-post .b-post__schedule_block_title .title, body.hc-style .b-post .b-post__schedule_more .title, body.hc-style .b-post .b-post__mtitle { color: #000; } body.hc-style.b-theme__template__night .b-post .b-post__actions .btn, body.hc-style.b-theme__template__night .b-post .b-sidetitle, body.hc-style.b-theme__template__night .b-post .b-post__schedule_block_title, body.hc-style.b-theme__template__night .b-post .b-post__schedule_more, body.hc-style.b-theme__template__night .b-post .b-post__mtitle { background: #192125; } body.hc-style.b-theme__template__night .b-post .b-post__actions .btn, body.hc-style.b-theme__template__night .b-post .b-sidetitle, body.hc-style.b-theme__template__night .b-post .b-post__schedule_block_title .title, body.hc-style.b-theme__template__night .b-post .b-post__schedule_more .title, body.hc-style.b-theme__template__night .b-post .b-post__mtitle { color: #fff; } 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-post .b-post__social_holder { background: #1f1f1f; } /* Rating stars */ body.hc-style .b-content__bubble_rating .b-rating > .current, body.hc-style .b-post__rating .b-post__rating_layer_current { filter: grayscale(100%) !important; } body.hc-style.b-theme__template__night .b-content__bubble_rating .b-rating > .current, body.hc-style.b-theme__template__night .b-post__rating .b-post__rating_layer_current { filter: grayscale(100%) brightness(200%) !important; } body.hc-style .b-content__bubble_rating b { color: #000; } body.hc-style.b-theme__template__night .b-content__bubble_rating b { color: #fff; } body.hc-style .b-post__rating .num { color: inherit !important;; } /* Breadcrumbs */ body.hc-style .b-content__crumbs a { color: #444; } body.hc-style.b-theme__template__night .b-content__crumbs a { color: #fff; } /* Comments */ body.hc-style .b-comment__like_it > i { display: none; } body.hc-style .b-comment__likes_count { margin: 0 !important; } body.hc-style .b-comment__quoteuser, body.hc-style .b-comment__like_it, body.hc-style.b-theme__template__night .b-comment__quoteuser, body.hc-style.b-theme__template__night .b-comment__like_it { color: #888; border-color: #888; } body.hc-style .b-comment .message > .text { color: #000; } body.hc-style.b-theme__template__night .b-comment .message > .text { color: #fff; } /* Content bubble */ body.hc-style .b-content__bubble_content a { color: #000; } body.hc-style.b-theme__template__night .b-content__bubble_content a { color: #fff; } /* Misc */ body.hc-style .b-newest_slider__title { padding-bottom: 20px; } /* !css */ `); settings(); function settings() { if (hc.settings) { hc.settings.createTumblerSetting({ name: "styles", label: "Декоративные изменения", classes: ["hc-on-of-tumbler"], options: [ { class: null, text: "Выкл", }, { class: "hc-style", text: "Вкл", default: true, }, ], }); } } } /* ------------------------------------------------- */ /* --------------PLAYER-COVER----------------------- */ /* ------------------------------------------------- */ function initPlayerCover() { document.addEventListener("DOMContentLoaded", setup); 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 #cdnplayer [style*='hc-poster'] { 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}') !important; background-size: auto 100% !important; background-position: center !important; background-repeat: no-repeat !important; } /* !css */ `); } function settings() { if (hc.settings) { hc.settings.createTumblerSetting({ name: "player-cover", label: "Отображать обложку в плеере", classes: ["hc-on-of-tumbler"], options: [ { class: null, text: "Выкл", }, { class: "hc-player-cover", text: "Вкл", default: true, }, ], }); } } } /* ------------------------------------------------- */ /* --------------HIDE-INFO-------------------------- */ /* ------------------------------------------------- */ function initHideInfo() { 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(${images.arrowImgURL}); 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 */ `); settings(); document.addEventListener("DOMContentLoaded", setup); 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", () => { document.body.classList.toggle("hc-hide-info"); }); title.insertBefore(button, title.firstChild); } function settings() { if (hc.settings) { hc.settings.createTumblerSetting({ name: "hide-info", label: "Сворачивать описание контента", classes: ["hc-on-of-tumbler"], options: [ { start: function () { document.body.classList.remove("hc-hide-info"); }, class: null, text: "Выкл", }, { start: function () { document.body.classList.add("hc-hide-info"); }, class: "hc-hide-info-enabled", text: "Вкл", }, ], }); } } } /* ------------------------------------------------- */ /* --------------HIDE-COMMENTS---------------------- */ /* ------------------------------------------------- */ function initHideComments() { GM_addStyle(` /* css */ body.hc-comments-hide #hd-comments-list, body.hc-comments-hide #hd-comments-navigation { display: none; } .hc-comments-title { margin-bottom: 13px; overflow: hidden; } .hc-comments-title .title { font-size: 16px; font-weight: bold; line-height: 18px; overflow: hidden; padding: 10px 18px; text-overflow: ellipsis; white-space: nowrap; width: 520px; float: left; } .hc-comments-title { background: #ddd; } .hc-comments-title .title { color: #000; } body.b-theme__template__night .hc-comments-title { background: #192125; } body.b-theme__template__night .hc-comments-title .title { color: #fff; } .hc-act { color: #878586; cursor: pointer; float: right; font-size: 12px; margin-top: 8px; margin-right: 18px; } .hc-act:hover { text-decoration: underline; } .hc-act-show { display: none; } .hc-act-hide { display: block; } body.hc-comments-hide .hc-act-show { display: block; } body.hc-comments-hide .hc-act-hide { display: none; } body.hc-comments-hide .b-content__crumbs { margin-top: 30px; } /* !css */ `); settings(); document.addEventListener("DOMContentLoaded", setup); function setup() { const commentsList = document.querySelector("#hd-comments-list"); if (!commentsList) return; const commentsTitle = document.createElement("div"); commentsTitle.classList.add("hc-comments-title"); commentsTitle.addEventListener("click", () => { document.body.classList.toggle("hc-comments-hide"); }); const title = document.createElement("div"); title.innerText = "Отзывы"; title.classList.add("title"); commentsTitle.appendChild(title); const actShow = document.createElement("div"); actShow.classList.add("hc-act"); actShow.classList.add("hc-act-show"); actShow.innerText = "развернуть"; commentsTitle.appendChild(actShow); const actHide = document.createElement("div"); actHide.classList.add("hc-act"); actHide.classList.add("hc-act-hide"); actHide.innerText = "свернуть"; commentsTitle.appendChild(actHide); commentsList.parentNode.insertBefore(commentsTitle, commentsList); } function settings() { if (hc.settings) { hc.settings.createTumblerSetting({ name: "comments-hide", label: "Сворачивать отзывы", classes: ["hc-on-of-tumbler"], options: [ { start: function () { document.body.classList.remove("hc-comments-hide"); }, class: null, text: "Выкл", }, { start: function () { document.body.classList.add("hc-comments-hide"); }, class: "hc-comments-hide-enabled", text: "Вкл", }, ], }); } } } /* ------------------------------------------------- */ /* --------------TRANSLATORS------------------------ */ /* ------------------------------------------------- */ function initHideTranslators() { GM_addStyle(` /* css */ /* Content hide translators */ .hc-translators-hide-enabled .b-translator__item.active { cursor: pointer; } .hc-translators-hide-enabled .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(${images.arrowImgURL}); filter: invert(100%) sepia(95%) saturate(21%) hue-rotate(280deg) brightness(106%) contrast(106%); transform: rotate(90deg); cursor: pointer; } .hc-translators-hide-enabled .hc-show-translators .hc-toggle-translators-button { transform: rotate(-90deg); } .hc-translators-hide-enabled .b-translator__item:not(.active):not(.hc-toggle-translators-button) { display: none; } .hc-translators-hide-enabled .b-translators__title { display: none; } .hc-translators-hide-enabled .hc-show-translators .b-translator__item:not(.active):not(.hc-toggle-translators-button) { display: block; } .hc-translators-hide-enabled .hc-show-translators .b-translators__title { display: block; } /* !css */ `); settings(); document.addEventListener("DOMContentLoaded", setup); function setup() { function toggle() { document.querySelector(".b-translators__block").classList.toggle("hc-show-translators"); } 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 settings() { if (hc.settings) { hc.settings.createTumblerSetting({ name: "translators", label: "Сворачивать список переводов", classes: ["hc-on-of-tumbler"], options: [ { class: null, text: "Выкл", }, { class: "hc-translators-hide-enabled", text: "Вкл", }, ], }); } } } /* ------------------------------------------------- */ /* --------------IMDB-RATING------------------------ */ /* ------------------------------------------------- */ function initIMDbRating() { GM_addStyle(` /* css */ /* Rating */ .b-content__inline_item-link > .rating { display: none; } body.hc-imdb .b-content__inline_item-link > .rating { display: block; } .b-content__inline_item-link > .rating { position: relative; line-height: 15px; font-size: 11px; font-weight: normal; 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; background-image: url(${images.imdbImgURL}); /* https://codepen.io/sosuke/pen/Pjoqqp */ filter: invert(66%) sepia(77%) saturate(1448%) hue-rotate(347deg) brightness(99%) contrast(91%); } /* !css */ `); 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 settings() { if (hc.settings) { hc.settings.createTumblerSetting({ name: "imdb", label: "Рейтинг IMDb", classes: ["hc-on-of-tumbler"], options: [ { class: null, text: "Выкл", }, { end: function () { document.querySelectorAll(".b-content__inline_item").forEach(getAndShowRating); }, class: "hc-imdb", text: "Вкл", }, ], }); } } } /* ------------------------------------------------- */ /* --------------HOTKEYS---------------------------- */ /* ------------------------------------------------- */ function initHotkeys() { const HELP_TOOLTIP = /* html */ ` <!-- html --> <span class="hc-tooltip"> <span class="hc-tooltip-icon">i</span> <div class="tooltiptext"> <div>Список горячих клавиш</div> <ul style="margin-top: 15px;"> <li style="margin-top: 5px;">ПРОБЕЛ - Плей/Пауза</li> <li style="margin-top: 5px;">F - Полноэкранный режим</li> <li style="margin-top: 5px;">N - Следующий эпизод</li> <li style="margin-top: 5px;">P - Предыдущий эпизод</li> </ul> <div style="margin-top: 15px;"> <small> В отличии от оригинальных работают с разу полсле загрузки страницы. В том числе когда плеер не в фокусе или был не в фокусе на момент перевода в полноэкранный режим. </small> </div> </div> </div> <!-- !html --> `; function setup() { function anyActiveInput() { const inputs = document.querySelectorAll("input,textarea"); return Array.from(inputs).includes(document.activeElement); } document.addEventListener("keyup", function (e) { if (!anyActiveInput()) { switch (e.code) { case "KeyF": hc.player.fullscreen(); e.preventDefault(); break; } } }); document.addEventListener("keydown", function (e) { if (!anyActiveInput()) { switch (e.code) { case "KeyN": hc.player.next(); e.preventDefault(); break; case "KeyP": hc.player.prev(); e.preventDefault(); break; case "Space": hc.player.toggle(); e.preventDefault(); break; } } }); } settings(); function settings() { if (hc.settings) { hc.settings.createTumblerSetting({ name: "hotkeys", label: `Улучшеные горячие клавиши ${HELP_TOOLTIP}`, classes: ["hc-on-of-tumbler"], options: [ { class: null, text: "Выкл", reload: true, }, { end: setup, class: "hc-hotkeys-enabled", text: "Вкл", default: true, reload: true, }, ], }); } } } /* ------------------------------------------------- */ /* --------------HIDE-RUSSIAN----------------------- */ /* ------------------------------------------------- */ function initHideRussian() { GM_addStyle(` /* css */ /* Main */ .hc-hide-russian .hc-russian { display: none; } /* !css */ `); document.addEventListener("DOMContentLoaded", setup); 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 settings() { if (hc.settings) { hc.settings.createTumblerSetting({ name: "hide-russian", label: "Скрыть контент из страны-агрессора", classes: ["hc-on-of-tumbler"], options: [ { class: null, text: "Выкл", }, { class: "hc-hide-russian", text: "Вкл", }, ], }); } } } /* ------------------------------------------------- */ /* --------------SETTINGS--------------------------- */ /* ------------------------------------------------- */ function initSettings() { GM_addStyle(` /* css */ /* Settings */ .hc-settings { position: relative; } /* 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; user-select: none; } .hc-tumbler-point { border-radius: 50%; content: ''; display: block; height: 20px; width: 20px; background-color: #999; background-clip: content-box; box-sizing: border-box; border-color: transparent; border-style: solid; border-width: 5px; } .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; } /* On-Off Tumbler */ .hc-on-of-tumbler .hc-tumbler-point:nth-child(1) { background-color: green; } .hc-on-of-tumbler .hc-tumbler-point:nth-child(2) { background-color: indianred; } /* Settings */ .hc-settings > ul { width: 400px; display: none; background: #313131; border-top: 0; position: absolute; top: 50px; left: 0px; white-space: nowrap; box-shadow: 0 5px 20px 0px #000; border-color: #222d33; border-style: solid; border-width: 3px 3px 3px 3px; padding: 5px 0; } .hc-settings > ul:before { content: ''; display: block; position: absolute; top: -13px; left: 20px; width: 0; height: 0; border-left: 10px solid transparent; border-right: 10px solid transparent; border-bottom: 10px solid #222d33; } .hc-settings > ul:after { content: ''; display: block; position: absolute; top: -9px; left: 21px; width: 0; height: 0; border-left: 9px solid transparent; border-right: 9px solid transparent; border-bottom: 9px solid #313131; } body.b-theme__template__night .hc-settings > ul:after { border-bottom-color: #060f13; } body.hc-settings-active .hc-settings > ul { display: block !important; } .hc-settings > ul > li { white-space: nowrap; color: #777; font-size: 10px; font-weight: bold; margin: 0 !important; padding: 5px 10px; height: 30px; } .hc-settings > ul > li .hc-tumbler { float: right; } .hc-settings .hc-setting-text-value { display: none; opacity: .5; } .hc-settings .hc-setting-text-block { float: left; padding-top: 5px; position: relative; } body.b-theme__template__night .hc-settings > ul { background: #060f13; } /* Settings tumbler */ .hc-tumbler-settings { margin-top: 5px; margin-left: 10px; } .hc-tumbler-settings .hc-tumbler-point { background-size: 15px 15px; background-repeat: no-repeat; background-position: center; border-width: 2px; } .hc-tumbler-settings .hc-tumbler-point:nth-child(1) { background-image: url('${images.settingsOpenImgURL}'); background-color: transparent !important; } .hc-tumbler-settings .hc-tumbler-point:nth-child(2) { background-image: url('${images.settingsCloseImgURL}'); background-color: transparent !important; } /* Tooltip */ .hc-tooltip { position: relative; display: inline-block; border-bottom: 1px dotted black; } .hc-tooltip .tooltiptext { background: #313131; border-top: 0; position: absolute; top: -25px; left: 35px; white-space: nowrap; box-shadow: 0 5px 20px 0px #000; border-color: #222d33; border-style: solid; border-width: 3px; visibility: hidden; width: 200px; white-space: normal; padding: 15px; position: absolute; z-index: 3; } body.b-theme__template__night .hc-tooltip .tooltiptext { background: #060f13; } .hc-tooltip:hover .tooltiptext { visibility: visible; } .hc-tooltip .tooltiptext:before { content: ''; display: block; position: absolute; left: -13px; top: 11px; width: 0; height: 0; border-top: 10px solid transparent; border-bottom: 10px solid transparent; border-right: 10px solid #222d33; } .hc-tooltip .tooltiptext:after { content: ''; display: block; position: absolute; left: -9px; top: 12px; width: 0; height: 0; border-top: 9px solid transparent; border-bottom: 9px solid transparent; border-right: 9px solid #222d33; } body.b-theme__template__night .hc-tooltip .tooltiptext:after { border-right-color: #060f13; } .hc-tooltip-icon { border-radius: 50%; background: #777; min-width: 15px; min-height: 15px; display: inline-block; text-align: center; color: #000; text-transform: lowercase; cursor: pointer; position: absolute; font-family: monospace, monospace; font-size: 13px; top: -10px; right: -20px; } body.hc-settings-active.active-brand.pp #top-head, body.hc-settings-active .b-tophead_wrapper { position: fixed !important; border-bottom: 3px solid #222d33; } .b-topnav_wrapper { transition: none; } body.hc-settings-active .b-topnav_wrapper { margin-top: 40px; transition: none; } /* !css */ `); hc.settings = {}; hc.settings.createTumblerSetting = createTumblerSetting; const SETTINGS_NAME = "hc-settings"; const DEFAULT_SETTING = ""; document.addEventListener("DOMContentLoaded", setup); function setSetting(config, option) { const setting = option.class !== null ? option.class : DEFAULT_SETTING; const settingsStr = localStorage.getItem(SETTINGS_NAME); let settings = settingsStr !== null ? JSON.parse(settingsStr) : {}; settings[config.name] = setting; localStorage.setItem(SETTINGS_NAME, JSON.stringify(settings)); } function getSetting(config) { const settingsStr = localStorage.getItem(SETTINGS_NAME); const settings = settingsStr !== null ? JSON.parse(settingsStr) : {}; let setting = settings[config.name]; return setting !== undefined ? setting : null; } function getDefaultOption(config) { for (let optionIndex = 0; optionIndex < config.options.length; optionIndex++) { const tumblerOption = config.options[optionIndex]; if (tumblerOption.default === true) { return tumblerOption; } } } function setBodyClass(config, option) { for (let optionIndex = 0; optionIndex < config.options.length; optionIndex++) { const tumblerOption = config.options[optionIndex]; if (tumblerOption.class !== null) { document.body.classList.remove(tumblerOption.class); } } if (option && option.class) { document.body.classList.add(option.class); } } function getNextOption(config, option) { let nextOptionIndex; if (option) { const currentOptionIndex = config.options.indexOf(option); if (currentOptionIndex < config.options.length - 1) { nextOptionIndex = currentOptionIndex + 1; } else { nextOptionIndex = 0; } } else { nextOptionIndex = 1; } return config.options[nextOptionIndex]; } function getCurrentOption(config) { const currentSetting = getSetting(config); if (currentSetting != null) { for (let optionIndex = 0; optionIndex < config.options.length; optionIndex++) { const tumblerOption = config.options[optionIndex]; const optionSetting = tumblerOption.class !== null ? tumblerOption.class : DEFAULT_SETTING; if (optionSetting === currentSetting) { return tumblerOption; } } } const option = getDefaultOption(config); if (option) { setSetting(config, option); return option; } else { setSetting(config, { class: DEFAULT_SETTING }); } } function rotateSetting(config) { const currentOption = getCurrentOption(config); const nextOption = getNextOption(config, currentOption); setSetting(config, nextOption); setBodyClass(config, nextOption); if (nextOption.reload === true) { document.location.reload(); } if (nextOption.start) { nextOption.start(); } if (nextOption.end) { nextOption.end(); } } function initSetting(config) { const currentOption = getCurrentOption(config); setBodyClass(config, currentOption); if (currentOption && currentOption.start) { currentOption.start(); } if (currentOption && currentOption.end) { document.addEventListener("DOMContentLoaded", currentOption.end); } } function setup() { const tophead = document.querySelector(".b-tophead-left"); if (!tophead) return; const tumblerWrapper = buildTumbler({ handler: toggle, name: "settings", classes: [], options: [ { class: null, }, { class: "hc-settings-active", }, ], }); tumblerWrapper.classList.add("hc-settings"); tumblerWrapper.classList.add("pull-left"); const tumblerUL = document.createElement("ul"); tumblerWrapper.appendChild(tumblerUL); document.addEventListener("click", close); tophead.appendChild(tumblerWrapper); } function toggle(event) { document.body.classList.toggle("hc-settings-active"); event.stopPropagation(); } function close(event) { if (!event.target.closest(".hc-settings")) { document.body.classList.remove("hc-settings-active"); } } function addTumblerSetting(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 buildTumbler(config) { const optionsLength = config.options.length; const tumblerClassName = "hc-tumbler-" + config.name; GM_addStyle(` /* css */ .${tumblerClassName} { width: ${optionsLength * 15 + optionsLength * 5}px !important; } /* !css */ `); const tumblerWrapper = document.createElement("div"); tumblerWrapper.classList.add("hc-tumbler-wrapper"); const tumbler = document.createElement("div"); tumbler.classList.add("hc-tumbler"); tumbler.classList.add(tumblerClassName); tumbler.className += " " + config.classes.join(" "); tumbler.addEventListener("click", config.handler); for (let optionIndex = 0; optionIndex < optionsLength; optionIndex++) { const tumblerOption = config.options[optionIndex]; const tumblerPoint = document.createElement("div"); tumblerPoint.classList.add("hc-tumbler-point"); tumbler.appendChild(tumblerPoint); if (tumblerOption.class !== null) { // Add dot move style for all points except initial const enabledClassName = tumblerOption.class; GM_addStyle(` /* css */ .${enabledClassName} .${tumblerClassName} .hc-tumbler-dot { transform: translateX(${optionIndex * 100}%); } /* !css */ `); } } const tumblerDot = document.createElement("div"); tumblerDot.classList.add("hc-tumbler-dot"); tumbler.appendChild(tumblerDot); tumblerWrapper.appendChild(tumbler); return tumblerWrapper; } function buildTumblerSetting(config) { initSetting(config); const originalHandler = config.handler; function handler(event) { rotateSetting(config); if (originalHandler) { originalHandler(event); } } config.handler = handler; const tumblerWrapper = buildTumbler(config); const settingClass = "hc-setting-" + config.name; tumblerWrapper.classList.add(settingClass); const settingTextBlock = document.createElement("div"); settingTextBlock.classList.add("hc-setting-text-block"); const labelSpan = document.createElement("span"); labelSpan.classList.add("hc-setting-label"); labelSpan.innerHTML = config.label; settingTextBlock.appendChild(labelSpan); const optionsLength = config.options.length; let defaultSelector = "body"; for (let tumblerIndex = 0; tumblerIndex < optionsLength; tumblerIndex++) { const tumplerOption = config.options[tumblerIndex]; if (tumplerOption.class !== null) { defaultSelector += `:not(.${tumplerOption.class})`; } } for (let optionIndex = 0; optionIndex < optionsLength; optionIndex++) { const tumplerOption = config.options[optionIndex]; const textValueClass = "hc-setting-text-value-" + (optionIndex + 1); const textValueSpan = document.createElement("span"); textValueSpan.classList.add("hc-setting-text-value"); textValueSpan.classList.add(textValueClass); textValueSpan.innerHTML = tumplerOption.text; settingTextBlock.appendChild(textValueSpan); if (optionIndex == 0) { GM_addStyle(` /* css */ ${defaultSelector} .${settingClass} .${textValueClass} { display: block !important; } /* !css */ `); } else { const enabledClassName = config.options[optionIndex].class; GM_addStyle(` /* css */ .${enabledClassName} .${settingClass} .${textValueClass} { display: block !important; } /* !css */ `); } } tumblerWrapper.appendChild(settingTextBlock); return tumblerWrapper; } function createTumblerSetting(config) { const tumblerSetting = buildTumblerSetting(config); document.addEventListener("DOMContentLoaded", () => { addTumblerSetting(tumblerSetting); }); } } })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址