ShikiUtils

Полезные утилиты для шикимори

Version au 11/03/2025. Voir la dernière version.

// ==UserScript==
// @name         ShikiUtils
// @icon         https://www.google.com/s2/favicons?domain=shikimori.me
// @namespace    https://shikimori.one
// @version      2.5
// @description Полезные утилиты для шикимори
// @author       LifeH
// @match        *://shikimori.org/*
// @match        *://shikimori.one/*
// @match        *://shikimori.me/*
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_registerMenuCommand
// @grant        GM_xmlhttpRequest
// @connect      shikimori.one
// @license      MIT
// ==/UserScript==
(function () {
    "use strict";

    const CopyBtnI = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABN2lDQ1BBZG9iZSBSR0IgKDE5OTgpAAAokZWPv0rDUBSHvxtFxaFWCOLgcCdRUGzVwYxJW4ogWKtDkq1JQ5ViEm6uf/oQjm4dXNx9AidHwUHxCXwDxamDQ4QMBYvf9J3fORzOAaNi152GUYbzWKt205Gu58vZF2aYAoBOmKV2q3UAECdxxBjf7wiA10277jTG+38yH6ZKAyNguxtlIYgK0L/SqQYxBMygn2oQD4CpTto1EE9AqZf7G1AKcv8ASsr1fBBfgNlzPR+MOcAMcl8BTB1da4Bakg7UWe9Uy6plWdLuJkEkjweZjs4zuR+HiUoT1dFRF8jvA2AxH2w3HblWtay99X/+PRHX82Vun0cIQCw9F1lBeKEuf1UYO5PrYsdwGQ7vYXpUZLs3cLcBC7dFtlqF8hY8Dn8AwMZP/fNTP8gAAAAJcEhZcwAAAE8AAABPAWOK/dcAAAXRaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzE0MiA3OS4xNjA5MjQsIDIwMTcvMDcvMTMtMDE6MDY6MzkgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE4IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjUtMDEtMzFUMDI6Mzg6MjMrMDE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI1LTAxLTMxVDAyOjU4OjUxKzAxOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDI1LTAxLTMxVDAyOjU4OjUxKzAxOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2YWFkNjQ5Zi0yZjgzLTFhNGMtYjRlNi0wNTVjOWUyYTE2YTgiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpiYzY3YzUwMS0yOWE4LTAwNDctYjIzYy04Mjg5NDQwMWVhZWEiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDplYWE5Njg2Zi0zYzM5LWUzNDUtODQwMi1kYzM3YTIyYThmYWQiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmVhYTk2ODZmLTNjMzktZTM0NS04NDAyLWRjMzdhMjJhOGZhZCIgc3RFdnQ6d2hlbj0iMjAyNS0wMS0zMVQwMjozODoyMyswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo2YWFkNjQ5Zi0yZjgzLTFhNGMtYjRlNi0wNTVjOWUyYTE2YTgiIHN0RXZ0OndoZW49IjIwMjUtMDEtMzFUMDI6NTg6NTErMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE4IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5BTpLUAAAAz0lEQVQ4jc3SMUuCURjF8Z/2OjlY30IQ5yAnF1EIGhrDyQ/iB2ipOQoXN8FRF0GCaA8awo8QKO5qDb5DvNzuW04euMvDc/73nMstzCZj6KCBxO/6xBNWP4dJah5him0E0MYlmlnAeWq+jpihhofssIgCNjlmeMdFCJBVz77nV+Rs8Yyz0KPdoo+XSJoiHtENASqY4y0CgAVOQxX+peMArFFF/VDAAEsMDwEkqbmZtxhLkNUOJ3+8fBf6B6/2tT4i5hJauAsBrnCDck6Ce8y/AVeuKCJx/FChAAAAAElFTkSuQmCC";
    const CopyBtnSelI = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABN2lDQ1BBZG9iZSBSR0IgKDE5OTgpAAAokZWPv0rDUBSHvxtFxaFWCOLgcCdRUGzVwYxJW4ogWKtDkq1JQ5ViEm6uf/oQjm4dXNx9AidHwUHxCXwDxamDQ4QMBYvf9J3fORzOAaNi152GUYbzWKt205Gu58vZF2aYAoBOmKV2q3UAECdxxBjf7wiA10277jTG+38yH6ZKAyNguxtlIYgK0L/SqQYxBMygn2oQD4CpTto1EE9AqZf7G1AKcv8ASsr1fBBfgNlzPR+MOcAMcl8BTB1da4Bakg7UWe9Uy6plWdLuJkEkjweZjs4zuR+HiUoT1dFRF8jvA2AxH2w3HblWtay99X/+PRHX82Vun0cIQCw9F1lBeKEuf1UYO5PrYsdwGQ7vYXpUZLs3cLcBC7dFtlqF8hY8Dn8AwMZP/fNTP8gAAAAJcEhZcwAAAE8AAABPAWOK/dcAAAahaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzE0MiA3OS4xNjA5MjQsIDIwMTcvMDcvMTMtMDE6MDY6MzkgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE4IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjUtMDEtMzFUMDI6Mzg6MjMrMDE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI1LTAxLTMxVDAyOjU5OjIzKzAxOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDI1LTAxLTMxVDAyOjU5OjIzKzAxOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo3MzA2ZWI4NC05YThjLTYzNDktOTA2MC1iYzRjZGU3NWExNDYiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo5ZTI3OTc1Ny1kODk4LTc0NGUtOGM3MC0xNjBhZDc5ODg3N2YiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozMGYyYzIwOC0wZGRiLWYzNDktODVjNi01NzQ0ZWUxNDFjZGMiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjMwZjJjMjA4LTBkZGItZjM0OS04NWM2LTU3NDRlZTE0MWNkYyIgc3RFdnQ6d2hlbj0iMjAyNS0wMS0zMVQwMjozODoyMyswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDoyOWRmOWVkNC0wOTM3LTExNGItOGIxNS04MTI5ZTFhNTJlOTUiIHN0RXZ0OndoZW49IjIwMjUtMDEtMzFUMDI6NTk6MjMrMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE4IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NzMwNmViODQtOWE4Yy02MzQ5LTkwNjAtYmM0Y2RlNzVhMTQ2IiBzdEV2dDp3aGVuPSIyMDI1LTAxLTMxVDAyOjU5OjIzKzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+2wWMfwAAANBJREFUOI3N0rFKQlEcx/GPdp0azLcQwjnI6S6SEDQ4SlMv4Bv4AC01i9Hi5gM0ShDugUP0CIHi7jUH7yCX07nl1A/O8uf/+57f73Aq2aAJXbSR+FlfeMLqcJjk5ilekEUAV7hGWgRc5OZexAznGBWHVVSwKTHDApchQFF39j2/IyfDKxqhR7vHEG+RNFWMcRsC1DHDewQAnzgLVfiT/gdgjSZaxwKescTkGECSm9OyxViCorY4+eXl29A/mNvX+oiYa+jgIQS4QR+nJQkeMdsBGJMnlGUPSdMAAAAASUVORK5CYII=";
    const CssCopyBtnSelI = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABN2lDQ1BBZG9iZSBSR0IgKDE5OTgpAAAokZWPv0rDUBSHvxtFxaFWCOLgcCdRUGzVwYxJW4ogWKtDkq1JQ5ViEm6uf/oQjm4dXNx9AidHwUHxCXwDxamDQ4QMBYvf9J3fORzOAaNi152GUYbzWKt205Gu58vZF2aYAoBOmKV2q3UAECdxxBjf7wiA10277jTG+38yH6ZKAyNguxtlIYgK0L/SqQYxBMygn2oQD4CpTto1EE9AqZf7G1AKcv8ASsr1fBBfgNlzPR+MOcAMcl8BTB1da4Bakg7UWe9Uy6plWdLuJkEkjweZjs4zuR+HiUoT1dFRF8jvA2AxH2w3HblWtay99X/+PRHX82Vun0cIQCw9F1lBeKEuf1UYO5PrYsdwGQ7vYXpUZLs3cLcBC7dFtlqF8hY8Dn8AwMZP/fNTP8gAAAAJcEhZcwAAAHYAAAB2AU57JggAAAXIaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzE0MiA3OS4xNjA5MjQsIDIwMTcvMDcvMTMtMDE6MDY6MzkgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE4IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjUtMDEtMzFUMTY6NTk6NTYrMDE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI1LTAxLTMxVDE3OjAxKzAxOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDI1LTAxLTMxVDE3OjAxKzAxOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo5ZTA2NTkzOC1kMGQ5LTYzNGItYmJkZi05NmJhNjEyYmVjYTMiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDoyYWQ3YTQ3My01YzMxLTUzNDUtOGQ5Yy0yMDY3YTA5MzUwMTAiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo2NjA4MWVhZi00ZGRlLTVkNGMtYTJlMS1hMGMzNjE3ZTRjMTUiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjY2MDgxZWFmLTRkZGUtNWQ0Yy1hMmUxLWEwYzM2MTdlNGMxNSIgc3RFdnQ6d2hlbj0iMjAyNS0wMS0zMVQxNjo1OTo1NiswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo5ZTA2NTkzOC1kMGQ5LTYzNGItYmJkZi05NmJhNjEyYmVjYTMiIHN0RXZ0OndoZW49IjIwMjUtMDEtMzFUMTc6MDErMDE6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE4IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5ZWUbgAAAA8klEQVQ4jaXSMU7DQBCF4c8RHUSiTUeZKiU0PkAKoOAE9DSRfQCcA6Sk4xQQCehpIF1OQJcWgVJGpvAgGStEVvykkWa1u/+82dlkMxlmKND3vz5xgdfmRi8uj5DsiGM8Id0G6ONjR/VfHW2D9FpchJca5LG+cdASMK7l5T4O6pp2BRRdAX/UBKR4i0gxwELV9yLWGb4isuYjznBby++xVv2F6wDkuFSN/qrp4BTPEWeY4zAc3GAV4Acst7XwrhrZONoY4C4crHEe50bhIm8CctWYppGvonIZTuZxbhkuZslmMiyjwl7q4RsnXQBFWCpr0Vo/DOk0THcKK1IAAAAASUVORK5CYII=";
    const CssCopyBtnI = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABN2lDQ1BBZG9iZSBSR0IgKDE5OTgpAAAokZWPv0rDUBSHvxtFxaFWCOLgcCdRUGzVwYxJW4ogWKtDkq1JQ5ViEm6uf/oQjm4dXNx9AidHwUHxCXwDxamDQ4QMBYvf9J3fORzOAaNi152GUYbzWKt205Gu58vZF2aYAoBOmKV2q3UAECdxxBjf7wiA10277jTG+38yH6ZKAyNguxtlIYgK0L/SqQYxBMygn2oQD4CpTto1EE9AqZf7G1AKcv8ASsr1fBBfgNlzPR+MOcAMcl8BTB1da4Bakg7UWe9Uy6plWdLuJkEkjweZjs4zuR+HiUoT1dFRF8jvA2AxH2w3HblWtay99X/+PRHX82Vun0cIQCw9F1lBeKEuf1UYO5PrYsdwGQ7vYXpUZLs3cLcBC7dFtlqF8hY8Dn8AwMZP/fNTP8gAAAAJcEhZcwAAAHYAAAB2AU57JggAAAZvaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzE0MiA3OS4xNjA5MjQsIDIwMTcvMDcvMTMtMDE6MDY6MzkgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE4IChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjUtMDEtMzFUMTY6NTk6NTYrMDE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI1LTAxLTMxVDE3OjAyOjI0KzAxOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDI1LTAxLTMxVDE3OjAyOjI0KzAxOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDowMGZiMWU2ZC1kMjgyLTJlNGItOWJkYi0zOWI1YjdiMzk4ODEiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo3MWM0ZTBmNy0xOTk3LTVmNDUtOGZjOS1hZDA4OTY2N2IyYzgiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4MmQwZjExMy01NGYxLTI4NDItYjNhMy1lMTZlNTM0OWRkNmYiPiA8cGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8cmRmOkJhZz4gPHJkZjpsaT5hZG9iZTpkb2NpZDpwaG90b3Nob3A6YmM2N2M1MDEtMjlhOC0wMDQ3LWIyM2MtODI4OTQ0MDFlYWVhPC9yZGY6bGk+IDwvcmRmOkJhZz4gPC9waG90b3Nob3A6RG9jdW1lbnRBbmNlc3RvcnM+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ODJkMGYxMTMtNTRmMS0yODQyLWIzYTMtZTE2ZTUzNDlkZDZmIiBzdEV2dDp3aGVuPSIyMDI1LTAxLTMxVDE2OjU5OjU2KzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjAwZmIxZTZkLWQyODItMmU0Yi05YmRiLTM5YjViN2IzOTg4MSIgc3RFdnQ6d2hlbj0iMjAyNS0wMS0zMVQxNzowMjoyNCswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PjXwy5UAAADzSURBVDiNpdIxTsNAEIXhzxYdRKJNxwlSQuMDpAAKTkBPlxwA5wAp6bhDJBLJUKSjgXQ5AV1aBEptCg+SsUJkxU8aaVa7+8+bnU2WxWyEHD3/6xNXeG1upHF5gGRPnKJAtgvQw8ee6r862QVJW1yElxpkXt84agkY1vLyEAd1TboC8q6AP2oCMrxFZOhjpep7FesRviJGzUec4r6WP2Kr+gu3ARjjWjX6m6aDczxHXGCB43Bwh02An7De1cK7amTDaKOPh3CwxWWcG4SLcRMwVo1pEvkmKpfhZBHn1uFimiyLWRkVDlKKb5x1AeRhqaxFa/0Atks1aHio/ngAAAAASUVORK5CYII=";

    const config = loadConfig();
    const blockedUsers = JSON.parse(GM_getValue("blockedUsers", '["ID1", "ID2"]'));
    const allowedPaths = ['/ranobe', '/animes', '/mangas'];

    function аnimPage() {
      return window.location.href.includes("/animes");
    }

    const menuLabels = {
          CommCopyBtn: "Copy comment link button",
          UserIdCopyBtn: "Copy user ID button",
          UserCssCopyBtn: "Copy user CSS button",
          ClubCssCopyBtn: "Copy club CSS button",
          ImageIdCopyBtn: "Copy image code button",
          ShikiRating: "Shikimori rating filter",
          StudioFilter: "Studios filter",
          addChineseFilter:"Chinese filter",
          FriendsAVGscore: "Friends' average score",
          autoSpoiler: "Auto spoiler",
          HistoryHelper: "History helper",
          NotificationHelper:"Notification helper",
          hideNews: "Hides news",
          NoAgeLimits: "Custom age",
          checkScroll: "Auto Loader",
          BanCount:"Ban count",
          watchTime:"Watch time",
    };


    for (const key in config) {
      GM_registerMenuCommand(
        `${menuLabels[key] || key}: ${config[key] ? "✅ ON" : "❌ OFF"}`,
        () => {
          saveConfig(key, !config[key]);
          location.reload();
        }
      );
    }
    function saveConfig(key, value) {
      GM_setValue(key, value);
    }

    function loadConfig() {
      return {
        CommCopyBtn: GM_getValue("CommCopyBtn", true),
        UserIdCopyBtn: GM_getValue("UserIdCopyBtn", true),
        UserCssCopyBtn: GM_getValue("UserCssCopyBtn", true),
        ClubCssCopyBtn: GM_getValue("ClubCssCopyBtn", true),
        ImageIdCopyBtn: GM_getValue("ImageIdCopyBtn", true),
        StudioFilter: GM_getValue("StudioFilter", true),
        ShikiRating: GM_getValue("ShikiRating", true),
        addChineseFilter: GM_getValue("addChineseFilter", true),
        FriendsAVGscore: GM_getValue("FriendsAVGscore", true),
        autoSpoiler: GM_getValue("autoSpoiler", false),
        HistoryHelper: GM_getValue("HistoryHelper", true),
        NotificationHelper: GM_getValue("NotificationHelper", true),
        hideNews: GM_getValue("hideNews", true),
        NoAgeLimits: GM_getValue("NoAgeLimits", true),
        checkScroll: GM_getValue("checkScroll", true),
        BanCount: GM_getValue("BanCount", true),
        watchTime: GM_getValue("watchTime", true),
      };
    }


    function editBlockedUsers() {
      let currentUsers = GM_getValue("blockedUsers", '["ID1", "ID2"]');
      try {
        currentUsers = JSON.parse(currentUsers);
        if (!Array.isArray(currentUsers)) throw new Error();
      } catch (e) {
        currentUsers = ["ID1", "ID2"];
      }

      const newUsers = prompt("ID через запятую:",
        currentUsers.join(", ")
      );
      if (newUsers !== null) {
        const userArray = newUsers
          .split(",")
          .map((id) => id.trim())
          .filter((id) => id !== "");
        GM_setValue("blockedUsers", JSON.stringify(userArray));
        location.reload();
      }
    }

    GM_registerMenuCommand("blocked users list", editBlockedUsers);




    function hideNews(blockedUserIds) {
      document
        .querySelectorAll("article.b-news_wall-topic")
        .forEach((article) => {
          const userId = article.getAttribute("data-user_id");
          if (blockedUserIds.includes(userId)) {
            article.style.display = "none";
          }
        });
    }
    function NoAgeLimits() {
      const birthSelect = document.querySelector(".c-column.block_m .block select#user_birth_on_1i");
      if (!birthSelect) return;
      const selectedYear = birthSelect.value;
      let maxYear = 0;
      let minYear = Infinity;
      birthSelect.querySelectorAll("option").forEach((option) => {
        const year = parseInt(option.value, 10);
        if (!isNaN(year)) {
          if (year > maxYear) maxYear = year;
          if (year < minYear) minYear = year;
        }
      });

      birthSelect.innerHTML = "";

      for (let year = maxYear; year >= 1; year--) {
        const option = document.createElement("option");
        option.value = year;
        option.textContent = year;
        if (year == selectedYear) {
          option.selected = true;
        }
        birthSelect.appendChild(option);
      }
    }
    async function FriendsAVGscore() {
        document.querySelectorAll(".b-animes-menu .block").forEach((block) => {
          let subheadline = block.querySelector(".subheadline.m5");
          if (!subheadline || !subheadline.textContent.includes("У друзей")) return;
    
          if (subheadline.textContent.includes("|")) return;
    
          let scores = [];
          block.querySelectorAll(".friend-rate .status").forEach((status) => {
            let match = status.textContent.match(/–\s*(\d+)/);
            if (match) {
              let score = parseInt(match[1], 10);
              scores.push(score);
            }
          });
          if (scores.length > 0) {
            // console.log(scores);
            let averageScore = (
              scores.reduce((a, b) => a + b, 0) / scores.length
            ).toFixed(1);
            subheadline.textContent += ` | ${averageScore}`;
          }
        });
    }
    function BanCount() {
        if (!window.location.pathname.endsWith('/moderation')) {
          return;
      }
    
      let banCount = document.querySelectorAll('.b-ban').length;
      let headline = document.querySelector('.subheadline.m5');
      if (headline) {
          headline.textContent = `История банов - ${banCount}`;
      }
    }

//CopyBtns//CopyBtns//CopyBtns//CopyBtns//CopyBtns//CopyBtns//CopyBtns//CopyBtns//CopyBtns//CopyBtns//CopyBtns//CopyBtns//CopyBtns//CopyBtns//CopyBtns//CopyBtns//CopyBtns//CopyBtns//CopyBtns//CopyBtns
    function CommCopyBtn() {
      document.querySelectorAll(".b-comment").forEach((comment) => {
        if (comment.querySelector(".copy-comment-link")) return;

        let commentId = comment.id;
        if (!commentId) return;

        let commentLink = `https://shikimori.one/comments/${commentId}`;
        let button = document.createElement("span");
        button.classList.add("copy-comment-link");
        button.title = "Скопировать ссылку";
        button.style.backgroundImage = `url(${CopyBtnI})`;
        button.style.backgroundRepeat = "no-repeat";
        button.style.backgroundSize = "contain";
        button.style.width = "12px";
        button.style.height = "12px";
        button.style.cursor = "pointer";
        button.style.display = "inline-block";
        button.style.margin = "0 5px";
        button.style.verticalAlign = "middle";

        button.onmouseover = () =>
          (button.style.backgroundImage = `url(${CopyBtnSelI})`);
        button.onmouseout = () =>
          (button.style.backgroundImage = `url(${CopyBtnI})`);

        button.onclick = () => {
          navigator.clipboard
            .writeText(commentLink)
            .then(() => {
              button.style.transform = "scale(1.1)";
              setTimeout(() => (button.style.transform = "scale(1)"), 200);
            })
            .catch((err) => console.error(err));
        };

        let mainControls = comment.querySelector(".main-controls");
        if (mainControls) {
          mainControls.appendChild(button);
        }
      });
    }
    function UserIdCopyBtn() {
      document.querySelectorAll(".avatar").forEach((avatar) => {
        if (avatar.querySelector(".copy-profile-id")) return;
    
        let profileHead = avatar.closest(".profile-head");
        if (!profileHead) return;
    
        let userId = profileHead.dataset.userId;
        if (!userId) return;
    
        let profileActions = avatar.querySelector(".profile-actions");
        if (!profileActions) return;
    
        let button = document.createElement("a");
        button.classList.add("copy-profile-id", "b-tooltipped");
        button.title = "Скопировать ID";
        button.dataset.direction = "top";
        button.style.backgroundImage = `url(${CopyBtnI})`;
        button.style.backgroundRepeat = "no-repeat";
        button.style.backgroundSize = "contain";
        button.style.width = "16px";
        button.style.height = "16px";
        button.style.cursor = "pointer";
        button.style.display = "flex";
        button.style.alignItems = "center";
        button.style.justifyContent = "center";
        button.style.margin = "10px";
        button.style.textAlign = "center";
        button.style.zIndex = "9999";
    
        button.onmouseover = () =>
          (button.style.backgroundImage = `url(${CopyBtnSelI})`);
        button.onmouseout = () =>
          (button.style.backgroundImage = `url(${CopyBtnI})`);
    
        button.onclick = () => {
          navigator.clipboard
            .writeText(userId)
            .then(() => {
              button.style.transform = "scale(1.1)";
              setTimeout(() => (button.style.transform = "scale(1)"), 200);
            })
            .catch((err) => console.error(err));
        };
    
        let newDiv = document.createElement("div");
        newDiv.classList.add("profile-actions");
        newDiv.style.textAlign = "center";
        newDiv.appendChild(button);
        profileActions.parentNode.insertBefore(newDiv, profileActions.nextSibling);
      });
    }
    
    function ImageIdCopyBtn() {
        document.querySelectorAll(".b-image").forEach((imageWrapper) => {
          if (imageWrapper.querySelector(".copy-image-id-button")) return;
  
          let imageData = imageWrapper.getAttribute("data-attrs");
          if (!imageData) return;
  
          try {
            let imageId = JSON.parse(imageData).id;
            if (!imageId) return;
  
            let button = document.createElement("span");
            button.classList.add("copy-image-id-button");
            button.title = "Скопировать код изображения";
            button.style.backgroundImage = `url(${CopyBtnI})`;
            button.style.backgroundRepeat = "no-repeat";
            button.style.backgroundSize = "contain";
            button.style.width = "16px";
            button.style.height = "16px";
            button.style.cursor = "pointer";
            button.style.position = "absolute";
            button.style.top = "5px";
            button.style.right = "5px";
            button.style.zIndex = "10";
  
            button.onmouseover = () =>
              (button.style.backgroundImage = `url(${CopyBtnSelI})`);
            button.onmouseout = () =>
              (button.style.backgroundImage = `url(${CopyBtnI})`);
  
            button.onclick = (event) => {
              event.stopPropagation();
              event.preventDefault();
  
              let formattedText = `[image=${imageId}]`;
              navigator.clipboard
                .writeText(formattedText)
                .then(() => {
                  button.style.transform = "scale(1.1)";
                  setTimeout(() => (button.style.transform = "scale(1)"), 200);
                })
                .catch((err) => console.error(err));
            };
  
            imageWrapper.style.position = "relative";
            imageWrapper.appendChild(button);
          } catch (e) {
            console.error(e);
          }
        });
    }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


//CssCopyBtn//CssCopyBtn//CssCopyBtn//CssCopyBtn//CssCopyBtn//CssCopyBtn//CssCopyBtn//CssCopyBtn//CssCopyBtn//CssCopyBtn//CssCopyBtn//CssCopyBtn//CssCopyBtn//CssCopyBtn//CssCopyBtn//CssCopyBtn//CssCopyBtn
    async function UserCssCopyBtn() {
    document.querySelectorAll(".avatar").forEach((avatar) => {
      if (avatar.querySelector(".copy-profile-css")) return;

      let profileActions = avatar.querySelector(".profile-actions");
      if (!profileActions) return;

      let img = avatar.querySelector("img");
      if (!img || !img.src) return;

      let match = img.src.match(/\/(\d+)\.png/);
      if (!match) return;
      let userId = match[1];

      let button = document.createElement("a");
      button.classList.add("copy-profile-css", "b-tooltipped");
      button.title = "Скопировать CSS";
      button.dataset.direction = "top";
      button.style.backgroundImage = `url(${CssCopyBtnI})`;
      button.style.backgroundRepeat = "no-repeat";
      button.style.backgroundSize = "contain";
      button.style.width = "16px";
      button.style.height = "16px";
      button.style.cursor = "pointer";
      button.style.display = "flex";
      button.style.alignItems = "center";
      button.style.justifyContent = "center";
      button.style.margin = "10px";
      button.style.textAlign = "center";
      button.style.zIndex = "9999";

      button.onmouseover = () =>
        (button.style.backgroundImage = `url(${CssCopyBtnSelI})`);
      button.onmouseout = () =>
        (button.style.backgroundImage = `url(${CssCopyBtnI})`);

      button.onclick = async () => {
        try {
          const userResponse = await fetch(`https://shikimori.one/api/users/${userId}`);
          const userData = await userResponse.json();
          const styleId = userData.style_id;

          if (!styleId) throw new Error("no styleId");

          const styleResponse = await fetch(`https://shikimori.one/api/styles/${styleId}`);
          const styleData = await styleResponse.json();

          await navigator.clipboard.writeText(styleData.compiled_css);

          button.style.transform = "scale(1.1)";
          setTimeout(() => (button.style.transform = "scale(1)"), 200);
        } catch (err) {
          console.error(err);
        }
      };

      let idCopyButton = avatar.querySelector(".copy-profile-id");
      if (idCopyButton) {
        idCopyButton.parentNode.style.display = "flex";
        idCopyButton.parentNode.style.alignItems = "center";
        idCopyButton.parentNode.appendChild(button);
      } else {
        let newDiv = document.createElement("div");
        newDiv.classList.add("profile-actions");
        newDiv.style.textAlign = "center";
        newDiv.style.display = "flex";
        newDiv.style.alignItems = "center";
        newDiv.appendChild(button);
        profileActions.parentNode.insertBefore(
          newDiv,
          profileActions.nextSibling
        );
      }
    });
    }
    async function ClubCssCopyBtn() {
    document.querySelectorAll(".b-clubs-menu").forEach((menu) => {
      let button = document.createElement("a");
      button.classList.add("copy-club-css", "b-tooltipped");
      button.title = "Скопировать CSS клуба";
      button.dataset.direction = "top";
      button.style.backgroundImage = `url(${CssCopyBtnI})`;
      button.style.backgroundRepeat = "no-repeat";
      button.style.backgroundSize = "contain";
      button.style.width = "16px";
      button.style.height = "16px";
      button.style.cursor = "pointer";
      button.style.display = "inline-block";
      button.style.textAlign = "center";
      button.style.position = "absolute";
      button.style.top = "-30px";

      button.style.left = "50%";
      button.style.transform = "translateX(-50%)";
      button.style.zIndex = "9999";

      button.onmouseover = () =>
        (button.style.backgroundImage = `url(${CssCopyBtnSelI})`);
      button.onmouseout = () =>
        (button.style.backgroundImage = `url(${CssCopyBtnI})`);

      menu.prepend(button);

      menu.querySelectorAll(".b-menu_logo").forEach((logo) => {
        if (logo.querySelector(".copy-club-css")) {
          return;
        }

        let img = logo.querySelector("img");
        if (!img || !img.src) {
          return;
        }

        let match = img.src.match(/\/(\d+)\.(png|jpg)/);
        if (!match) {
          return;
        }
        let clubId = match[1];
        button.onclick = async () => {
          try {
            const clubResponse = await fetch(`https://shikimori.one/api/clubs/${clubId}`);
            if (!clubResponse.ok) throw new Error(clubResponse.status);
            const clubData = await clubResponse.json();

            const styleId = clubData.style_id;
            if (!styleId) throw new Error("no styleId");

            const styleResponse = await fetch(`https://shikimori.one/api/styles/${styleId}`);
            if (!styleResponse.ok) throw new Error(styleResponse.status);
            const styleData = await styleResponse.json();

            if (!styleData.compiled_css) throw new Error("no styleData.compiled_css");

            await navigator.clipboard.writeText(styleData.compiled_css);

            button.style.transform = "scale(1.1)";
            setTimeout(() => (button.style.transform = "scale(1)"), 200);
          } catch (err) {
            console.error(err);
          }
        };
      });
    });
    }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


//helpers////helpers////helpers////helpers////helpers////helpers////helpers////helpers////helpers////helpers////helpers////helpers////helpers////helpers////helpers////helpers////helpers////helpers//
function helperBuilder({ itemSelector, checkboxClass, deleteButtonSelector, deleteMethod, deleteUrlAttr, buttonId, buttonText, buttonStyle, showOnHover, checkboxContainerSelector }) {
  if (!document.querySelector(deleteButtonSelector)) return;

  let button = null;
  let lastChecked = null;
  let isThrottled = false;

  document.querySelectorAll(itemSelector).forEach((item) => {
      if (item.querySelector(`.${checkboxClass}`)) return;

      const checkboxContainer = checkboxContainerSelector ? item.querySelector(checkboxContainerSelector) : item;
      if (!checkboxContainer) return;

      const checkbox = document.createElement("input");
      checkbox.type = "checkbox";
      checkbox.className = checkboxClass;
      checkbox.style.marginLeft = "8px";

      if (showOnHover) {
          checkbox.style.display = "none";
          item.addEventListener("mouseenter", () => {
              checkbox.style.display = "inline-block";
          });
          item.addEventListener("mouseleave", () => {
              if (!checkbox.checked) {
                  checkbox.style.display = "none";
              }
          });
      }

      checkbox.addEventListener("click", (event) => {
          shiftSelect(event, checkbox, checkboxClass, itemSelector);
          updateHighlight(checkbox, itemSelector);
      });

      checkboxContainer.prepend(checkbox);
  });

  function shiftSelect(event, checkbox, checkboxClass, itemSelector) {
      if (event.shiftKey && lastChecked) {
          const checkboxes = [...document.querySelectorAll(`.${checkboxClass}`)];
          const start = checkboxes.indexOf(lastChecked);
          const end = checkboxes.indexOf(checkbox);
          checkboxes.slice(Math.min(start, end), Math.max(start, end) + 1).forEach(cb => {
              cb.checked = lastChecked.checked;
              updateHighlight(cb, itemSelector);
          });
      }
      lastChecked = checkbox;
      updateDeleteButton(checkboxClass, itemSelector);
  }

  function updateHighlight(checkbox, itemSelector) {
      const item = checkbox.closest(itemSelector);
      item.style.backgroundColor = checkbox.checked ? "#D0E8FF" : "";
  }

  function updateDeleteButton(checkboxClass, itemSelector) {
      const selectedItems = document.querySelectorAll(`.${checkboxClass}:checked`);
      if (selectedItems.length > 0) {
          if (!button) {
              button = document.createElement("button");
              button.id = buttonId;
              button.textContent = buttonText;
              Object.assign(button.style, buttonStyle);
              button.addEventListener("click", () => deleteSelected(checkboxClass, itemSelector, deleteButtonSelector, deleteMethod, deleteUrlAttr));
              document.body.appendChild(button);
          }
      } else {
          if (button) {
              button.remove();
              button = null;
          }
      }
  }

  async function deleteSelected(checkboxClass, itemSelector, deleteButtonSelector, deleteMethod, deleteUrlAttr) {
      if (isThrottled) return;
      
      const tokenElement = document.querySelector('meta[name="csrf-token"]');
      const csrfToken = tokenElement ? tokenElement.content : null;
      if (!csrfToken) return;

      let selectedItems = document.querySelectorAll(`.${checkboxClass}:checked`);

      for (const checkbox of selectedItems) {
          const item = checkbox.closest(itemSelector);
          const deleteButton = item.querySelector(deleteButtonSelector);
          if (deleteButton) {
              item.style.backgroundColor = "#FFB3B3";
              item.style.transition = "background-color 0.3s ease";

              const deleteUrl = deleteButton.getAttribute(deleteUrlAttr);
              if (deleteUrl) {
                  try {
                      const response = await fetch(deleteUrl, {
                          method: deleteMethod,
                          credentials: "include",
                          headers: {
                              "User-Agent": navigator.userAgent,
                              "X-CSRF-Token": csrfToken,
                              "Content-Type": "application/x-www-form-urlencoded"
                          },
                          body: new URLSearchParams({
                              _method: "delete",
                              authenticity_token: csrfToken
                          })
                      });

                      if (response.ok) {
                          await new Promise(resolve => setTimeout(resolve, 300));
                          item.remove();
                      } else if (response.status === 429) {
                          console.warn("status 429: таймаут 10с");
                          item.style.backgroundColor = "#FFFF99";
                          isThrottled = true;
                          setTimeout(() => {
                              isThrottled = false;
                              deleteSelected(checkboxClass, itemSelector, deleteButtonSelector, deleteMethod, deleteUrlAttr);
                          }, 10000);
                          return;
                      }
                  } catch (error) {
                      // console.error("err del", item.id, error);
                  }
              }
          }
          selectedItems = document.querySelectorAll(`.${checkboxClass}:checked`);
      }

      if (button) {
          button.remove();
          button = null;
      }
  }
}


    function NotificationHelper() {
        helperBuilder({
          itemSelector: ".b-message, .b-dialog",
          checkboxClass: "notification-checkbox",
          deleteButtonSelector: ".item-delete-confirm",
          deleteMethod: "DELETE",
          deleteUrlAttr: "action",
          buttonId: "delete-selected-notifications",
          buttonText: "Удалить выбранные",
          buttonStyle: {
            position: "fixed",
            bottom: "20px",
            right: "20px",
            padding: "10px",
            background: "red",
            color: "white",
            border: "none",
            cursor: "pointer",
            zIndex: "1000"
          },
          showOnHover: true,
          checkboxContainerSelector: "aside.buttons div.main-controls"
        });
    }
    function HistoryHelper() {
        helperBuilder({
          itemSelector: ".b-user_history-line",
          checkboxClass: "history-checkbox",
          deleteButtonSelector: ".destroy",
          deleteMethod: "POST",
          deleteUrlAttr: "href",
          buttonId: "del-selected",
          buttonText: "Удалить выбранные",
          buttonStyle: {
            position: "fixed",
            bottom: "20px",
            right: "20px",
            padding: "10px",
            background: "red",
            color: "white",
            border: "none",
            cursor: "pointer",
            zIndex: "1000"
          },
          showOnHover: false,
          checkboxContainerSelector: null
        });
    }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


//Filters////Filters////Filters////Filters////Filters////Filters////Filters////Filters////Filters////Filters////Filters////Filters////Filters////Filters////Filters////Filters////Filters////Filters//
async function StudioFilter() {
      if (!аnimPage()) {
        return;
      }
      const hiddenBlocks = document.querySelectorAll(".block.hidden");
      let filterBlock = null;

      hiddenBlocks.forEach((block) => {
        if (block.querySelector(".subheadline.m5")?.textContent.includes("Студия")) {
          filterBlock = block;
        }
      });

      if (!filterBlock) {
        return;
      }

      let studioList = filterBlock.querySelector(".b-block_list.studios.anime-params");
      if (!studioList) {
        studioList = document.createElement("ul");
        studioList.className = "b-block_list studios anime-params";
        filterBlock.appendChild(studioList);
      }

      try {
        const response = await fetch("https://shikimori.one/api/studios", {
          headers: {
            "User-Agent": "Mozilla/5.0",
          },
        });

        if (!response.ok) {
          throw new Error(response.status);
        }

        const studios = await response.json();
        const realStudios = studios.filter((studio) => studio.real);
        // spoiler
        const spoilerContainer = document.createElement("div");
        spoilerContainer.className = "b-spoiler";

        const spoilerLabel = document.createElement("label");
        spoilerLabel.textContent = "Показать список";
        spoilerLabel.style.cursor = "pointer";

        const spoilerContent = document.createElement("div");
        spoilerContent.className = "content only-show";
        spoilerContent.style.display = "none";

        const spoilerInner = document.createElement("div");
        spoilerInner.className = "inner";

        spoilerInner.appendChild(studioList);
        spoilerContent.appendChild(spoilerInner);
        spoilerContainer.appendChild(spoilerLabel);
        spoilerContainer.appendChild(spoilerContent);

        filterBlock.appendChild(spoilerContainer);

        // ev
        spoilerLabel.addEventListener("click", () => {
          spoilerLabel.style.display = "none";
          spoilerContent.style.display = "block";
          spoilerContainer.dispatchEvent(new Event("spoiler:open"));
        });

        realStudios.forEach((studio) => {
          const studioItem = document.createElement("li");
          studioItem.dataset.field = "studio";
          studioItem.dataset.value = `${studio.id}-${studio.filtered_name}`;

          const checkbox = document.createElement("input");
          checkbox.type = "checkbox";

          studioItem.appendChild(checkbox);
          studioItem.appendChild(document.createTextNode(` ${studio.name}`));
          studioList.appendChild(studioItem);
        });

        filterBlock.classList.remove("hidden");
      } catch (error) {
        console.error(error);
      }
}
//Chinese FILTER////Chinese FILTER////Chinese FILTER////Chinese FILTER////Chinese FILTER////Chinese FILTER////Chinese FILTER////Chinese FILTER////Chinese FILTER////Chinese FILTER////Chinese FILTER////Chinese FILTER////Chinese FILTER////Chinese FILTER////Chinese FILTER////Chinese FILTER////Chinese FILTER////Chinese FILTER////Chinese FILTER////Chinese FILTER////Chinese FILTER//
const ChineseAnimeId = [44074,40434,50399,49413,49701,44070,56752,37208,38450,51039,40730,45556,56523,50407,37822,56524,40211,49571,55809,44412,57067,52684,40784,37078,55655,54029,40435,49574,51335,59150,59306,40080,58689,51836,44218,42640,49587,41611,59077,41923,37150,37932,58509,58143,38409,50207,58930,33926,38436,57183,54846,37936,49570,47405,59939,50403,44196,53859,55993,49200,38990,55745,60541,44068,41221,54035,55151,51769,41219,37924,59001,56960,54285,50667,57663,51390,39959,39178,42266,33443,51038,56215,48791,50537,36561,50401,37176,54123,40111,59245,38917,55733,51898,57442,33446,42956,42238,53367,40735,58448,55684,58555,54444,55692,57097,58744,57264,49759,59389,45558,33350,44388,41918,57995,51289,44067,44406,38491,49742,38410,38435,41409,59953,55303,33209,50274,50444,48965,49386,45599,36522,42290,50114,56471,35015,50240,10259,51203,55740,38740,53450,38250,36184,49409,56717,60420,55821,58079,54974,36160,49573,39676,39024,49847,58797,36823,54014,59385,40734,36910,54875,54437,53905,49275,44212,44069,40991,38741,35333,42106,56764,48890,59916,36545,50629,41528,42284,51287,50404,45196,44221,39675,42985,52949,38528,49599,38533,36824,44061,44090,59398,37618,40005,41094,40732,35626,58523,52890,42206,31678,37175,48537,41224,48941,53449,37164,959,33758,37937,48962,44064,52178,47614,49569,56963,42187,51280,36491,52765,57469,50429,38467,50462,44065,960,51333,48684,44408,41884,57422,39912,51334,52522,49448,27825,5854,10629,50581,40909,56766,49559,48000,33605,59012,34300,52769,55790,59178,50544,51195,38220,51861,31499,41785,42898,33969,50925,53477,37292,56216,50433,60089,48845,37396,57594,44389,40966,58551,44411,58711,40100,48956,58476,49572,38918,41051,42455,56774,36775,55130,50647,40733,15905,42950,41916,51288,44071,36848,42454,42267,49305,32094,52771,56716,57371,56765,42176,37886,35044,51191,50105,41215,48867,49750,48369,48964,56787,47044,56439,37184,39419,38489,41511,57699,32230,40885,40062,34009,41220,37185,49398,49915,38742,42359,40969,50400,51791,39080,36732,40806,41210,39191,50432,45042,41223,57613,53448,51727,49274,42209,57351,50501,40979,11835,44513,52105,48374,48481,54881,55072,52680,57512,49098,56981,33019,50271,49873,38490,44097,59179,42949,38536,44410,59433,54772,36148,55186,58681,51941,39936,29936,50538,6902,33421,54945,31838,37207,50898,29089,32323,50230,51196,51645,40994,55864,55762,55693,59327,39188,45654,54124,58779,58057,36318,51385,51549,55694,49718,57865,2578,48759,43626,47612,37293,51291,49380,50421,57520,31427,40151,50446,51517,36661,57656,44047,37209,48480,40208,37294,50280,39116,52623,39141,55731,44570,42966,56695,32534,51207,32543,55829,53919,59182,33305,50378,48875,51726,36790,48914,57575,48694,56930,50521,37928,50633,57096,41913,50217,58055,55009,51457,39767,37894,50443,41917,11841,56958,42302,50575,48097,54737,38325,41503,51197,58056,57513,55014,6855,36791,36588,50411,51860,19781,37895,55578,51915,47795,13755,35204,60247,40233,50441,42794,39823,44390,41915,37887,49841,36993,40823,53852,58012,42151,57877,29087,44062,16756,48942,37737,42947,40638,54997,54018,38556,52101,50445,36290,30412,50588,54631,55015,44078,29935,49620,35757,42268,51198,9950,37563,41093,51383,55192,39720,37938,50439,33396,49432,53476,50657,39231,40835,39760,53473,33704,41286,39572,19687,36291,51735,37564,36455,42291,42149,31233,49757,9952,34525,50571,8783,48543,44213,50398,36185,8999,36571,37598,37179,42319,57996,315,33739,36423,53618,40876,50431,28673,9818,56579,44072,49952,45557,33925,37740,55732,41802,51490,38412,51131,9558,5496,37152,54973,54021,7477,35215,39421,52221,32751,37641,44233,37090,42285,41080,29910,34903,56342,33195,31150,36345,33759,55739,35650,39223,33531,39736,51746,33271,56207,36397,37044,51864,54261,39298,50202,50406,36544,51000,51520,9817,9806,33193,37661,45600,51863,37643,57759,5129,33278,33038,42784,50644,55355,38535,50539,40568,29603,9416,49208,33760,49170,30156,44073,38690,50810,40194,47403,7752,32936,45195,51397,36644,42132,36425,54646,42148,39678,27811,50430,42158,51681,33562,55093,33339,50565,36429,46821,9417,10149,39022,33764,37620,34675,51183,38379,50849,38688,51492,37300,37619,38413,35643,33702,41920,36762,42082,38677,36226,33357,9947,25149,29937,32890,42444,34410,51190,54648,30096,33194,9822,36427,37642,34129,33757,33309,37291,51623,44627,32809,33266,37896,24603,34669,41632,34602,50636,30166,37181,37888,42740,23915,38341,38285,37180,44075,37177,41078,6861,38689,9951,38378,50604,30058,38534,30097,35642,30098,46924,49652,39264,34940,31965,52650,31299,42443,36666,37058,33755,40117,30519,29876,51825,36996,16506,33279,30886,6156,30095,37392,50021,46639,34511,42641,36722,38347,37391,36245,32818,33775,33761,37736,54534,37186,21129,32820,27503,30099,45607,48979,32807,31348,9869,30247,55362,21081,31698,37390,54340,32819,33258,32808,18489,18491,9973,36440,42178,35921,5889,38346,34510,31972,33985,30463,35623,25173,32889,29623,36164,33771,33883,20713,9521,32933,33508,29857,36932,33801,35432,35379,29961,43660,43260,43663,38919,50603,43391,45838,43494,46902,43797,43272,6150,44530,44529,45835,46567,45837,36015,45845,45839,45843,45844,49796,43450,52182,44417,45718,44413,44427,44424,44421,44422,44426,47759,44416,44423,44415,56820,44419,44414,44425,44418,44420,43913,43216,51558,41415,44370,43844,43893,47507,43954,48910,45459,47231,49143,57930,46145,46252,59876,51392,46217,32796,32797,43838,38484,52625,46934,60289,54895,53676,50920,43676,60248,46426,46949,47512,47980,33196,47547,43573,59246,52698,36619,44100,60561,44560,60207,47465,47466,46078,43796,44597,47559,47952,55656,40621,48117,56927,51821,59434,58490,59915,48009,57878,51405,56560,59354,45441,46307,52772,52841,45612,48899,43892,56040,43496,43231,45442,56339,59225,45443,43238,43866,43595,43273,49065,46659,45440,43284,45548,43662,45539,45538,45532,45535,45080,45540,45549,45551,45534,45884,45537,45552,45536,45541,56335,45547,45696,45983,45698,54268,48078,45697,43360,48084,43345,43249,46356,47899,49970,60821,44014,53856,46711,53226,59998,52714,57455,52838,52840,52597,52634,57454,45416,15111,33772,33773,44178,42948,44642,45040,48121,43497,44615,44634,48043,35138,48873,43283,43948,54684,48260,46963,47468,45712,43511,44700,45276,45285,55541,39189,43673,46706,46504,51261,31892,51262,9956,31893,33753,38246,37228,43405,53030,43889,46283,45371,45378,45379,45376,42070,44350,45861,45381,45374,45380,45784,45787,45788,45786,44301,47960,47480,52705,51936,50300,45707,46213,57449,52869,59762,46663,60855,60766,46665,44371,59063,43872,45830,46662,46676,46673,46677,46674,48022,46667,46666,47554,46661,55530,45364,47951,51877,60137,47949,50957,43374,47947,43594,46040,39190,46277,42461,45271,47948,45998,46391,46940,19839,50842,43805,50194,51834,43455,51880,44518,44520,44521,44522,44523,44525,43370,9948,45866,42952,47292,43222,34248,51879,47485,56771,31701,48844,45921,46380,60418,56773,59927,42456,45297,56373,44288,43217,60249,56585,56586,43901,60233,51881,46225,43582,47471,47472,43898,51356,51357,43401,44368,43999,43984,43997,43985,43988,43986,43987,47475,44000,43989,47470,43992,43998,47474,44001,47473,49079,43996,44004,44003,43994,44005,43983,52257,43990,43995,43982,43991,39192,44002,43993,53066,46409,59351,59353,59352,59557,46041,51938,51939,44096,43403,58068,60517,60143,47982,60374,45729,56795,49078,48101,43533,43400,60171,54224,43380,43970,42463,43857,60794,43606,43800,43670,57928,43239,43646,43373,37225,43378,43827,48045,60416,43508,57015,40091,43248,40092,60235,42372,42373,43822,43548,44479,59151,44486,59152,45418,43569,44181,43680,45954,54736,59993,45706,59593,43235,44504,43368,46448,45717,43461,45112,54033,44174,58001,56157,43233,44503,59624,59242,43951,43393,60711,46328,31700,45938,44018,43534,45941,47514,47060,60712,43341,45776,60710,43607,47590,54388,44767,44768,45044,43657,48120,43498,59018,46787,47184,59386,45713,57657,51862,43343,53573,43286,47186,60066,45279,45272,45284,43220,43490,43520,60772,47599,43280,47185,47188,47187,46705,43896,51992,45869,47348,45920,45522,51937,45899,49069,47281,43342,43214,45812,43928,45293,43926,54065,47676,45461,43208,58325,52019,48016,46259,43922,52653,43929,43923,43924,56799,43925,47987,43927,43937,43939,43936,43934,43931,43933,43938,43930,43935,47674,43611,47675,51216,45462,45463,45309,42815,43596,30140,45291,47282,45302,45264,45299,45290,45306,45305,47802,47804,45255,45259,45258,45274,45254,45281,45282,46284,45267,45286,45287,33630,45265,45257,45270,37149,42460,47803,47805,33670,48033,45472,45860,58754,37102,37097,43679,37099,46298,37101,32821,44135,37098,40439,34677,47106,37100,34676,44138,48039,48040,44136,48100,44140,60451,44137,40440,48126,43804,37219,43409,32269,44596,60457,48026,48090,44763,32270,44764,43832,44762,44758,44760,60878,57461,60879,43624,60881,60887,43851,60888,43619,60889,60882,60883,60880,60884,60885,60886,58557,48024,49965,48092,46536,57060,52187,46535,48116,44671,43845,46350,38069,60890,60891,50794,60787,52130,43669,43816,43218,43265,43232,57389,55589,46116,46255,46247,46249,45905,57416,43263,43605,43346,58375,58376,43634,60453,48087,45182,47236,46721,43674,57933,43806,59450,59451,60705,33763,33762,46903,60452,32920,46310,46758,48118,43617,44101,45903,56486,56372,36843,58487,56968,58924,47927,60545,43637,43407,45858,52519,46293,43276,43577,43491,52585,43625,56969,45894,47991,51601,47642,45468,47560,46393,56246,52652,49204,46468,46375,58494,52696,42513,52629,45677,50321,38557,42468,42979,48035,52849,43359,36428,43463,43542,59765,43386,45716,43242,48852,43464,47640,47643,48851,9903,60529,44673,43502,56589,38911,44450,43649,45289,43817,43308,43592,45452,43333,47330,43515,45456,53031,47007,47728,45769,50233,44009,49139,44007,44011,44012,45688,44013,44008,48113,44010,45854,52870,43666,43856,49118,49985,58556,58559,45156,43891,50458,38125,47214,40182,45011,47008,43244,46316,57836,47058,57837,38126,38124,38131,38135,38140,38136,38117,38128,38122,38138,38132,47986,38129,39798,41635,48058,38118,47757,38119,38127,43639,38123,44353,38134,38133,38120,38137,57459,57317,47131,46154,43819,43858,43852,43912,43818,43526,46638,43677,43888,57866,47650,60297,46440,44840,45868,46458,53382,43656,57468,45689,45187,45069,59634,46260,43267,42765,45681,60435,42766,45682,47775,43665,43570,59969,43519,43861,46256,44079,44228,45690,47963,46657,47965,56970,52584,43830,57440,44006,43583,45965,45679,52704,56321,46243,46658,42033,57464,50296,50297,43226,43389,43357,45761,43650,43808,47838,44399,47954,52855,42146,46371,42147,42144,46295,43897,47964,45133,47889,33267,47651,45169,47070,46318,45780,59938,44452,47890,60415,48041,41942,45482,43224,49277,39679,47063,47367,48073,45388,45702,55563,34724,48421,53206,57906,53055,43382,52770,57418,58897,57233,59087,51596,53709,60442,56144,44104,44109,43977,43916,53498,44103,44110,44105,44108,59084,44111,44112,43979,44114,44123,44118,44122,44117,44116,44119,44115,44121,43826,43943,58554,58198,59696,52692,46309,45911,46630,46241,57226,58876,43261,43541,59380,45493,46390,55542,60434,51278,47766,47797,50295,58898,46142,57743,57384,47936,47787,35364,35365,52628,53067,57463,42263,45102,41416,42264,45417,45103,43354,45058,43799,48130,52062,52063,48027,45351,46005,43678,45519,45684,43809,45263,45517,45520,44674,45521,45262,45304,45283,37187,43019,43552,43213,43848,46376,46695,56371,44543,44544,44545,43643,43516,43512,43236,43501,43537,43539,43623,43488,43613,43614,44385,48754,46704,47283,43371,44531,43593,43404,43798,43821,44571,45204,48059,47234,42320,56796,52401,56797,32823,43493,35956,45908,43262,31205,43258,47579,43364,43392,48107,43671,45973,43828,44565,49355,44618,45821,45826,45828,45825,43196,45017,43546,43894,43895,45455,46308,45451,45453,45827,45454,50249,43622,45043,51563,50797,46324,43514,47274,59410,43911,56041,45728,56559,30051,9821,9819,43841,51210,35910,59181,30052,50841,43616,43316,43314,43313,59156,47022,44176,45878,43237,59241,59237,43586,43810,43347,43348,42447,49144,44302,52292,33600,33601,42446,42448,42969,44303,44434,42332,59951,43259,46172,56338,44182,44187,54949,44185,44184,42485,42834,43411,44847,44846,51873,47769,60690,43850,43381,44667,44679,57458,44506,44507,44508,44509,59244,59243,33602,33603,60450,33604,45904,56320,44165,43672,30349,30343,43871,48050,44162,44163,48023,44164,44160,44161,48017,56333,48093,48112,48129,45444,45445,45447,43291,51361,43406,45790,43279,56806,43277,45036,33599,45348,47756,46348,46299,47944,33583,56769,47128,43372,43499,49961,57460,51035,45406,47374,48094,35071,45915,60822,47143,43587,60823,43543,60824,37927,60826,40088,60827,46727,56987,54931,60544,56756,43853,51532,60856,43274,54773,43227,44533,44536,44538,51968,44540,44532,44539,44535,44537,45222,38729,51964,51897,43642,45221,45223,44632,46228,43636,43849,44676,43402,42922,45820,43667,45770,44664,45824,45829,47239,52850,48032,54779,43540,43245,43578,43638,39023,43907,43615,49992,43412,37566,50299,45815,45115,39230,45078,35913,44132,41509,44133,48089,42333,60454,40223,46694,35912,47978,46827,44366,44369,45994,43661,43518,44628,52251,42331,43843,42835,43282,51993,46860,45661,56317,56318,47626,60311,52493,46859,51153,46857,54402,54403,45660,59041,54404,45662,56728,56730,47620,47627,44159,57306,47624,57307,52699,60576,52689,59379,56772,44154,44155,44156,47621,44158,44153,44157,44144,44145,44146,44148,44149,44147,44151,44152,43975,60526,60513,47800,49920,31691,53840,52180,51496,42183,43807,43228,43252,43253,60436,43544,43269,43489,43918,47646,47648,47649,42330,49133,47275,47647,56576,46447,53589,59653,47989,59236,58493,52735,39410,43651,59183,52691,52368,45394,44889,47816,45384,45400,45386,45385,45393,45396,45389,45390,45395,45391,45399,45387,45392,47814,47815,45398,47819,45397,59694,44287,52654,46728,38121,42445,43875,46640,43834,47996,43868,47577,40249,54662,49549,43366,53726,53727,53728,43801,44016,48031,52610,48114,48014,45526,45527,45531,44699,44015,42761,45528,45529,45530,42760,45246,58323,57931,48015,52495,48062,47525,43652,56336,43794,43659,52627,48123,58295,43365,47566,57801,45523,57286,59180,52836,52494,45206,59098,47567,59262,58869,55657,45525,45703,47025,60554,59620,59621,43836,43863,43264,52695,56798,60515,60516,43644,43212,43864,60257,43509,46305,43579,43362,55531,30267,47267,52651,43361,46865,46867,46870,45458,46872,46871,46868,44924,33703,44925,43597,35691,45862,46864,41417,38312,46866,47606,46869,47608,44033,44741,9868,44032,48751,48749,59383,59384,44947,47604,47607,30060,48750,48102,46698,60848,51760,51758,51759,52265,44620,56334,59381,55226,43824,43384,43564,40484,57462,59024,39677,45705,43410,45781,56319,43915,47438,47971,48110,43278,59693,46150,43831,43221,43383,43803,43881,43882,43883,43884,43885,43887,45035,43225,43581,43281,9955,43250,43390,43275,47218,47219,43584,45047,45847,45846,44517,43681,43379,43309,44177,47576,45013,45018,45015,45020,45023,45022,45021,45019,45014,45016,47955,48077,43920,50050,48005,59032,43287,39754,47611,46588,43319,43320,52626,48109,43795,38398,47451,56807,43839,46322,47509,57629,59877,47450,47240,43820,43376,43219,43668,47730,52835,47464,52633,45460,52713,59875,53624,44441,45448,44447,44449,57417,47731,45978,46907,41079,41081,44440,44444,52631,44446,44445,44448,59366,50343,43640,47462,45975,47548,45997,43648,52479,44744,46276,43449,43454,47279,52706,45704,51274,43375,46279,42967,33671,43865,46157,47225,33792,41494,45365,43620,43859,47023,60797,46767,52624,59967,46392,55856,40273,9949,52523,52583,52753,53575,44294,44298,54061,60557,58048,56315,47866,60032,44293,44300,44297,44296,44295,55746,57219,43653,43396,59391,56337,53251,53249,60818,59368,59367,43271,52917,47122,60234,44534,42457,42458,49116,42464,43243,43495,43854,43914,33706,42465,43246,43664,43647,45816,48072,43266,48096,45079,44282,44283,44285,44286,44280,59042,57078,44278,44279,52060,45524,43580,43958,45687,52716,47723,48128,43545,45347,52632,43215,44743,45344,45345,49814,47270,55738,42466,47061,52655,43842,60691,43462,42329,43469,49908,58086,47235,47940,60851,49907,33756,52712,45350,50572,45916,50293,50294,45404,39130,56323,39138,39129,39140,33465,43675,43860,39133,43363,43369,39121,39132,39136,39139,39122,39123,39137,43837,45774,39124,39125,45773,39126,39127,39135,39131,39128,49205,46910,44639,43658,43270,43846,59695,60246,45834,35641,43536,43503,43525,43632,30268,43367,43399,44742,42550,44606,43772,44053,43394,43840,48866,45699,43203,43358,45893,47573,48076,44374,38537,43513,43867,41475,43906,43908,43510,43612,48003,43395,48004,45683,43571,9902,45764,38538,45756,45765,45762,45763,45755,45766,45757,43241,45759,43847,47776,48013,45758,48002,45760,44625,56590,56578,50025,51382,57480,59977,58322,56322,47572,52715,52697,59043,57439,57929,60558,57372,59291,58537,54312,58696,57314,56273,58751,55585,55586,58859,59301,49490,51665,50422,58145,43020,58144,56994,10132,14359,54944,49616,51824,35442,53027,34500,33272,30534,52844,60582,60583,60586,60589,60590,60591,60611,51974,48502,50235,51903,43600,41912,46925,43434,50405,60828,60849,50440,60877,53447,51389,40632,58134,51387,51152,41919,42293,60191,49818,49774,49717,53205,49567,49566,60279,53029,53028,54287,49558,60426,59662,59631,44076,44060,48874,49984,43321,48868,56729,60560,48536,60562,60563,60565,60566,60567,60568,60569,60570,60571,60572,60574,50234,60577,60578,60579];
// айди с клуба https://shikimori.one/clubs/3810
    let ChinesefilterActive = false;
    function addChineseFilter() {
  const categoryContainer = document.querySelector(".b-block_list.kinds.anime-params");
  if (!categoryContainer) return;

  const filterItem = document.createElement("li");
  filterItem.setAttribute("data-field", "custom-filter");
  filterItem.innerHTML = `
    <input id="filterAnimeCheckbox" autocomplete="off" type="checkbox" ${ChinesefilterActive ? "checked" : ""}>
    <label for="filterAnimeCheckbox">Без китайщины</label>
  `;

  categoryContainer.appendChild(filterItem);

  document.getElementById("filterAnimeCheckbox").addEventListener("change", function () {
    ChinesefilterActive = this.checked;
    applyChineseFilter();
  });

  if (ChinesefilterActive) applyChineseFilter();
    }

    function applyChineseFilter() {
  document.querySelectorAll("article.c-anime").forEach((article) => {
    const animeId = parseInt(article.id, 10);
    if (ChinesefilterActive && ChineseAnimeId.includes(animeId)) {
      // console.log(`Китайщина - ${animeId}`);
      article.remove();
    }
  });
    }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    function ShikiRating() {
    const filtersContainer = document.querySelector(".b-block_list.orders.anime-params.subcontent");
    if (!filtersContainer) return;

    const ShikiSort = document.createElement("li");
    ShikiSort.setAttribute("data-field", "order");
    ShikiSort.setAttribute("data-value", "score_2");

    ShikiSort.innerHTML = `По рейтингу (Шикимори)`;

    const referenceElement = filtersContainer.querySelector('li[data-field="order"][data-value="ranked"]');

    if (referenceElement) {
      filtersContainer.insertBefore(ShikiSort, referenceElement.nextSibling);
    } else {
      filtersContainer.appendChild(ShikiSort);
    }
    }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


//AUTO SPOILER//AUTO SPOILER//AUTO SPOILER//AUTO SPOILER//AUTO SPOILER//AUTO SPOILER//AUTO SPOILER//AUTO SPOILER//AUTO SPOILER//AUTO SPOILER//AUTO SPOILER//AUTO SPOILER//AUTO SPOILER//AUTO SPOILER//AUTO SPOILER
    function autoSpoiler() {
      function spoiler(images) {
        const spoilerDiv = document.createElement("div");
        spoilerDiv.className = "b-spoiler_block";
        spoilerDiv.dataset.dynamic = "spoiler_block";

        const spoilerText = document.createElement("span");
        spoilerText.tabIndex = 0;
        spoilerText.textContent = "Image";
        spoilerText.addEventListener("click", () =>
          spoilerDiv.classList.toggle("is-opened")
        );

        const imagesContainer = document.createElement("div");
        images.forEach((img) => imagesContainer.appendChild(img));

        spoilerDiv.append(spoilerText, imagesContainer);
        return spoilerDiv;
      }

      function group(comment) {
        const body = comment.querySelector(".body");
        let images = [];
        Array.from(body.childNodes).forEach((node) => {
          if (
            node.nodeType === Node.ELEMENT_NODE &&
            node.classList.contains("b-image")
          ) {
            images.push(node);
          } else if (images.length > 0) {
            body.insertBefore(spoiler(images), node);
            images = [];
          }
        });
        if (images.length > 0) body.appendChild(spoiler(images));
      }

      function processComments() {
        document.querySelectorAll(".b-comment").forEach(group);
      }

      processComments();
    }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


//AUTO LOADER////AUTO LOADER////AUTO LOADER////AUTO LOADER////AUTO LOADER////AUTO LOADER////AUTO LOADER////AUTO LOADER////AUTO LOADER////AUTO LOADER////AUTO LOADER//
    let isLoading = false;
    let currentPage = 15;
    let currentUrl = "";
    function updatePagination() {
      const currentSpans = document.querySelectorAll(".pagination .link-current");
      if (currentSpans.length > 0) {
        currentSpans.forEach((span) => {
          span.textContent = `1-${currentPage + 1}`;
        });
      }
    }
    function loadNextPage() {
      if (isLoading) return;

      const nextButton = document.querySelector(".b-postloader.collapsed a.next");
      if (!nextButton) return;

      if (currentUrl && currentUrl !== nextButton.href) {
        currentPage = 15;
      }
      currentUrl = nextButton.href;
      const urlObj = new URL(nextButton.href);
      urlObj.pathname = urlObj.pathname.replace(/\/page\/\d+/,`/page/${currentPage + 1}.json`);
      let nextPageUrl = urlObj.toString();

      console.debug("Loading next page: ", nextPageUrl);
      isLoading = true;

      GM_xmlhttpRequest({
        method: "GET",
        url: nextPageUrl,
        headers: {
          Accept: "application/json, text/plain, */*",
          "X-Requested-With": "XMLHttpRequest",
        },
        onload: function (response) {
          if (response.status === 200) {
            try {
              const data = JSON.parse(response.responseText);
              if (data.content) {
                const tempContainer = document.createElement("div");
                tempContainer.innerHTML = data.content;
                const entries = tempContainer.querySelectorAll(
                  ".cc-entries article"
                );
                appendNewContent(entries);
                updatePagination();
                currentPage++;
              }
            } catch (e) {
              console.error(e);
            }
          } else {
            console.error(response.status);
          }
          isLoading = false;
        },
        onerror: function (error) {
          console.error(error);
          isLoading = false;
        },
      });
    }
    function appendNewContent(entries) {
      const containers = document.querySelectorAll(".cc-entries");
      if (containers.length === 0) return;
      const container = containers[containers.length - 1];
      const existingIds = new Set(
        [...container.querySelectorAll("article")].map((el) => el.id)
      );
      entries.forEach((entry) => {
        if (!existingIds.has(entry.id)) {
          container.appendChild(entry);
        }
      });
    }
    function checkScroll() {
      const nextButton = document.querySelector(
        ".b-postloader.collapsed a.next"
      );
      if (!nextButton || !nextButton.href.match(/\/page\/16(\?|$)/)) return;

      if (
        window.innerHeight + window.scrollY >=
        document.documentElement.scrollHeight - 300
      ) {
        loadNextPage();
      }
    }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


//Watch TIME//Watch TIME//Watch TIME//Watch TIME//Watch TIME//Watch TIME//Watch TIME//Watch TIME//Watch TIME//Watch TIME//Watch TIME//Watch TIME//Watch TIME//Watch TIME//Watch TIME//Watch TIME//Watch TIME//Watch TIME//Watch TIME//Watch TIME//Watch TIME
    async function watchTime() {
    if (!аnimPage()) {
      return;
    }
    try {
      const episodesElement = elementFinder(document, "Эпизоды");
      const durationElement = elementFinder(document, "Длительность эпизода");

      if (!episodesElement || episodesElement.textContent.trim() === "") {
        return;
      }

      let episodes = episodesElement.textContent.trim();
      const duration = durationElement? durationElement.textContent.trim(): "Неизвестно";

      const duratonM = parseDur(duration);
      if (duratonM && episodes !== "Неизвестно") {
        const totalTime = parseInt(episodes) * duratonM;

        if (!document.querySelector(".time-block")) {
          const timeBlock = document.createElement("div");
          timeBlock.classList.add("line", "time-block");
          timeBlock.innerHTML = `
                    <div class="key">Время просмотра:</div>
                    <div class="value"><span>${formatTime(
                      totalTime
                    )}</span></div>
                `;

          if (durationElement && durationElement.parentNode) {
            durationElement.parentNode.parentNode.appendChild(timeBlock);
          }
        }
      }
    } catch (error) {
    //   console.error(error);
    }
    }
    function elementFinder(doc, keyText) {
    const lines = doc.querySelectorAll(".b-entry-info .line-container .line");
    for (let line of lines) {
      const key = line.querySelector(".key");
      if (key && key.textContent.includes(keyText)) {
        return line.querySelector(".value");
      }
    }
    return null;
    }
    function parseDur(durationText) {
    const hoursMatch = /(\d+)\s*час/.exec(durationText);
    const minsMatch = /(\d+)\s*мин/.exec(durationText);

    return (hoursMatch ? parseInt(hoursMatch[1]) * 60 : 0) +
           (minsMatch ? parseInt(minsMatch[1]) : 0);
    }
    function rotEbal(number, one, two, five) {
  const n1 = Math.abs(number) % 10;
  if (number > 10 && number < 20) return five;
  if (n1 > 1 && n1 < 5) return two;
  if (n1 === 1) return one;
  return five;
    }
    function formatTime(totalMins, zero = false) {
    const days = Math.floor(totalMins / (24 * 60));
    const hours = Math.floor((totalMins % (24 * 60)) / 60);
    const mins = totalMins % 60;

    const dayText = rotEbal(days, "день", "дня", "дней");
    const hourText = rotEbal(hours, "час", "часа", "часов");
    const minsText = rotEbal(mins, "минута", "минуты", "минут");

    if (zero) {
      return `${days} ${dayText}, ${hours} ${hourText}, ${mins} ${minsText}`;
    } else {
      let result = "";
      if (days > 0) result += `${days} ${dayText}, `;
      if (hours > 0 || days > 0) result += `${hours} ${hourText}, `;
      result += `${mins} ${minsText}`;
      return result.trim();
    }
    }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


    function domObserver () {
      const observer = new MutationObserver(() => {
        if (config.CommCopyBtn) CommCopyBtn();
        if (config.HistoryHelper) HistoryHelper();
        if (config.NotificationHelper) NotificationHelper();
        if (config.autoSpoiler) autoSpoiler();
        if (config.hideNews) hideNews(blockedUsers);
        if (config.ImageIdCopyBtn) ImageIdCopyBtn();
        if (ChinesefilterActive) applyChineseFilter();
      });
      observer.observe(document.body, { childList: true, subtree: true });
    }

    function ready(fn) {
      document.addEventListener("page:load", fn);
      document.addEventListener("turbolinks:load", fn);
      if (document.readyState !== "loading") {
        fn();
      } else {
        document.addEventListener("DOMContentLoaded", fn);
      }
    }

    ready(() => {
      if (config.StudioFilter) StudioFilter();
      if (config.CommCopyBtn) CommCopyBtn();
      if (config.UserIdCopyBtn) UserIdCopyBtn();
      if (config.HistoryHelper) HistoryHelper();
      if (config.NotificationHelper) NotificationHelper();
      if (config.UserCssCopyBtn) UserCssCopyBtn();
      if (config.ClubCssCopyBtn) ClubCssCopyBtn();
      if (config.FriendsAVGscore) FriendsAVGscore();
      if (config.autoSpoiler) autoSpoiler();
      if (config.ShikiRating) ShikiRating();
      if (config.hideNews) hideNews(blockedUsers);
      if (config.NoAgeLimits) NoAgeLimits();
      if (config.ImageIdCopyBtn) ImageIdCopyBtn();
      if (config.checkScroll && allowedPaths.some(path => location.pathname.startsWith(path))) {window.addEventListener('scroll', checkScroll);checkScroll();}
      if (config.addChineseFilter) addChineseFilter();
      if (config.BanCount) BanCount();
      if (config.watchTime) watchTime();

      domObserver ();
    });


  })();