NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Shiki Highlighting
// @author Chortowod (https://openuserjs.org/users/Chortowod/scripts)
// @description Изменение цвета некоторых элементов (например, хронология и история) для наглядного понимания и лучшего(?) просмотра
// @namespace http://shikimori.me/
// @version 2.0.4
// @match *://shikimori.org/*
// @match *://shikimori.one/*
// @match *://shikimori.me/*
// @match *://shiki.one/*
// @match *://shikimori.io/*
// @icon https://www.google.com/s2/favicons?domain=shikimori.me
// @license MIT
// @require https://gist.githubusercontent.com/arantius/3123124/raw/grant-none-shim.js
// @updateURL https://openuserjs.org/meta/Chortowod/Shiki_Highlighting.meta.js
// @downloadURL https://openuserjs.org/install/Chortowod/Shiki_Highlighting.user.js
// @require https://gist.githubusercontent.com/Chortowod/814b010c68fc97e5f900df47bf79059c/raw/chtw_settings.js?v3
// @copyright 2026, Chortowod (https://openuserjs.org/users/Chortowod)
// ==/UserScript==
let settings = new ChtwSettings('chtwHighlight', '<a target="_blank" href="https://openuserjs.org/scripts/Chortowod/Shiki_Highlighting">Цвета тайтлов</a>');
let debug;
function initSettings() {
settings.createOption('isChronology', 'Хронология');
settings.createOption('isHistory', 'История');
settings.createOption('darkTheme', '', 'Переключить тему', 'submit', true);
settings.setOption('isDarkTheme', false);
// settings.createOption('defaultTr', 'Хронология [не в списке] кнопка', '#8f2929', 'color');
settings.createOption('completedBg', 'Хронология [просмотрено] фон', '#b4f5bf', 'color');
settings.createOption('completedTr', 'Хронология [просмотрено] кнопка', '#1aff42', 'color');
settings.createOption('plannedBg', 'Хронология [запланировано] фон', '#ffef7c', 'color');
settings.createOption('plannedTr', 'Хронология [запланировано] кнопка', '#ffc45a', 'color');
settings.createOption('onHoldBg', 'Хронология [отложено] фон', '#cfcfe9', 'color');
settings.createOption('onHoldTr', 'Хронология [отложено] кнопка', '#79bde7', 'color');
settings.createOption('watchingBg', 'Хронология [смотрю] фон', '#9bfbff', 'color');
settings.createOption('watchingTr', 'Хронология [смотрю] кнопка', '#00c5ff', 'color');
settings.createOption('droppedBg', 'Хронология [брошено] фон', '#e2e1e1', 'color');
settings.createOption('droppedTr', 'Хронология [брошено] кнопка', '#454545', 'color');
settings.createOption('rewatchingBg', 'Хронология [пересматриваю] фон', '#cae097', 'color');
settings.createOption('rewatchingTr', 'Хронология [пересматриваю] кнопка', '#a0c54b', 'color');
settings.createOption('added', 'История, добавлено', '#05b2ee', 'color');
settings.createOption('done', 'История, просмотрено', '#12d326', 'color');
settings.createOption('dropped', 'История, брошено', 'red', 'color');
settings.createOption('hold', 'История, отложено', '#ff7935', 'color');
// settings.createOption('watching', 'История, смотрю', '#34c34dfc', 'color');
settings.createOption('darkTheme', '', 'Переключить тему', 'submit', true);
debug = settings.getOption('isDebug');
$('#'+settings.getOptionID('darkTheme')).on('click', function () {
let textInfo = 'Цвета сброшены и переключены на '+(settings.getOption('isDarkTheme') ? 'светлую' : 'тёмную')+' тему. Перезагрузите страницу.';
if (settings.getOption('isDarkTheme')) {
// settings.setOptionForced('defaultTr', '#8f2929');
settings.setOptionForced('completedBg', '#b4f5bf');
settings.setOptionForced('completedTr', '#1aff42');
settings.setOptionForced('plannedBg', '#ffef7c');
settings.setOptionForced('plannedTr', '#ffc45a');
settings.setOptionForced('onHoldBg', '#cfcfe9');
settings.setOptionForced('onHoldTr', '#79bde7');
settings.setOptionForced('watchingBg', '#9bfbff');
settings.setOptionForced('watchingTr', '#00c5ff');
settings.setOptionForced('droppedBg', '#e2e1e1');
settings.setOptionForced('droppedTr', '#454545');
settings.setOptionForced('rewatchingBg', '#cae097');
settings.setOptionForced('rewatchingTr', '#a0c54b');
settings.setOptionForced('added', '#05b2ee');
settings.setOptionForced('done', '#12d326');
settings.setOptionForced('dropped', 'red');
settings.setOptionForced('hold', '#ff7935');
}
else {
// settings.setOptionForced('defaultTr', '#8f2929');
settings.setOptionForced('completedBg', '#091d0c');
settings.setOptionForced('completedTr', '#34c34d');
settings.setOptionForced('plannedBg', '#252002');
settings.setOptionForced('plannedTr', '#986407');
settings.setOptionForced('onHoldBg', '#111038');
settings.setOptionForced('onHoldTr', '#2d2df4');
settings.setOptionForced('watchingBg', '#005458');
settings.setOptionForced('watchingTr', '#00c5ff');
settings.setOptionForced('droppedBg', '#2d2d2d');
settings.setOptionForced('droppedTr', '#111111');
settings.setOptionForced('rewatchingBg', '#384b0b');
settings.setOptionForced('rewatchingTr', '#698d16');
settings.setOptionForced('added', '#04f1ff');
settings.setOptionForced('done', '#b2ff00');
settings.setOptionForced('dropped', '#ff2020');
settings.setOptionForced('hold', '#eb560b');
}
settings.setOptionForced('isDarkTheme', !settings.getOption('isDarkTheme'));
alert(textInfo);
});
}
function log (message) { debug&&console.log(message) }
// собственная подсветка тайтлов для наглядности
function hlChronology() {
if (!settings.getOption('isChronology'))
return;
let trigger = '.b-db_entry-variant-list_item > .info > .user_rate-container > .b-user_rate .b-add_to_list';
let parent = '.b-db_entry-variant-list_item';
let bc = 'background-color';
// $('.b-add_to_list.planned .trigger').css(bc, settings.getOption('defaultTr'));
$(trigger + ' .trigger').css({'margin-bottom':'6px', 'border':'none', 'border-radius':'5px'});
$(parent).css({'margin-bottom':'0px', 'border-radius':'18px'});
$(trigger + '.completed').parents(parent).css(bc, settings.getOption('completedBg'));
$(trigger + '.completed .trigger').css(bc, settings.getOption('completedTr'));
$(trigger + '.planned .edit-trigger').parents(parent).css(bc, settings.getOption('plannedBg'));
$(trigger + '.planned .trigger').css(bc, settings.getOption('plannedTr'));
$(trigger + '.on_hold .edit-trigger').parents(parent).css(bc, settings.getOption('onHoldBg'));
$(trigger + '.on_hold .trigger').css(bc, settings.getOption('onHoldTr'));
$(trigger + '.watching .edit-trigger').parents(parent).css(bc, settings.getOption('watchingBg'));
$(trigger + '.watching .trigger').css(bc, settings.getOption('watchingTr'));
$(trigger + '.dropped .edit-trigger').parents(parent).css(bc, settings.getOption('droppedBg'));
$(trigger + '.dropped .trigger').css(bc, settings.getOption('droppedTr'));
$(trigger + '.rewatching .edit-trigger').parents(parent).css(bc, settings.getOption('rewatchingBg'));
$(trigger + '.rewatching .trigger').css(bc, settings.getOption('rewatchingTr'));
}
function hlHistory() {
if (!$('.history-page').length || !settings.getOption('isHistory'))
return;
// $(".history-page span").children().children().css("color", settings.getOption('watching'));
$(".history-page span:contains('добавлено в список')").children().css("color", settings.getOption('added'));
$(".history-page span:contains('запланировано')").children().css("color", settings.getOption('added'));
$(".history-page span:contains('просмотрено'):not(:contains('эпиз'))").children().css("color", settings.getOption('done'));
$(".history-page span:contains('прочитано и оценено')").children().css("color", settings.getOption('done'));
$(".history-page span:contains('удалено')").children().css("color", settings.getOption('dropped'));
$(".history-page span:contains('брошено')").children().css("color", settings.getOption('dropped'));
$(".history-page span:contains('отложено')").children().css("color", settings.getOption('hold'));
$('.history-page .b-user_history-line > span > *').css('font-weight', 'bold');
}
function ready(fn) {
document.addEventListener('page:load', fn);
document.addEventListener('turbolinks:load', fn);
if (document.attachEvent ? document.readyState === "complete" : document.readyState !== "loading") fn();
else document.addEventListener('DOMContentLoaded', fn);
}
var observeDOM = (function(){
var MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
var eventListenerSupported = window.addEventListener;
return function(obj, callback){
if(MutationObserver){
// define a new observer
var obs = new MutationObserver(function(mutations, observer){
if(mutations[0].addedNodes.length || mutations[0].removedNodes.length)
callback();
});
// have the observer observe foo for changes in children
obs.observe(obj, { childList: true, subtree: true });
}
else if(eventListenerSupported){
obj.addEventListener('DOMNodeInserted', callback, false);
obj.addEventListener('DOMNodeRemoved', callback, false);
}
};
})();
observeDOM(document.querySelector('html'), hlHistory);
ready(initSettings);
ready(hlChronology);
ready(hlHistory);