NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Shiki Fav Star
// @author Chortowod (https://openuserjs.org/scripts/Chortowod)
// @namespace http://shikimori.one/
// @version 1.3.8
// @description Показывает сердечко под именем перса, по нажатию на которое открывается окно с редактированием профиля и копируется в буфер обмена ID перса (с запятой перед); также копирует ID по нажатию на аватарку перса
// @author Chortowod
// @match http://shikimori.org/*
// @match https://shikimori.org/*
// @match http://shikimori.one/*
// @match https://shikimori.one/*
// @match http://shikimori.me/*
// @match https://shikimori.me/*
// @match *://shiki.one/*
// @match *://shikimori.io/*
// @license MIT
// @grant none
// @copyright 2026, Chortowod
// @require https://gist.githubusercontent.com/arantius/3123124/raw/grant-none-shim.js
// @updateURL https://openuserjs.org/meta/Chortowod/Shiki_Fav_Star.meta.js
// @downloadURL https://openuserjs.org/install/Chortowod/Shiki_Fav_Star.user.js
// ==/UserScript==
// проверяем, находимся ли мы на странице с персами
function CheckCharacters() {
if (location.href.includes("characters")) myFavStar();
}
function myFavStar() {
// если элементы уже созданы, то привязываем событие клика
// (а то оно исчезает, если посмотреть арты, например, и вернуться обратно)
// и скипаем функцию
if (document.getElementById('my-fav'))
{
document.getElementById('my-fav').addEventListener ("click", clickToCopyAndOpen);
document.getElementById('copy-my').addEventListener ("click", clickToCopy);
return;
}
// копировать ID по клику на картинке перса
var copy = document.querySelector(".c-image");
if (!copy) { console.log('Shiki Fav Star: скрипт не работает на побочных страницах персонажа.'); return; }
copy.setAttribute('id', 'copy-my');
copy.addEventListener ("click", clickToCopy);
// создать "сердечко"
var newFav = document.createElement("a");
newFav.id = 'my-fav';
newFav.classList.add("b-subposter-action", "edit");
//newFav.textContent = "❤";
newFav.title = "Добавить в гарем";
// прилепить "сердечко" справа от имени перса
var rateContainer = document.querySelector(".b-subposter-actions");
rateContainer.appendChild(newFav);
// добавитьб функцию по клику мыши
newFav.addEventListener ("click", clickToCopyAndOpen);
}
function clickToCopyAndOpen() {
var dummy = document.createElement("textarea"); //элемент для манипулирования с копированием
document.body.appendChild(dummy);
var favN = location.href; //скопировать в переменную текущую адресную строку
favN = favN.substring(32, favN.indexOf('-')); //обрезать строку от 32 символа до "-", т.е. оставить только ID перса
dummy.value = "," + favN; // добавить запятую для облегченной вставки
dummy.select();
document.execCommand("copy");
var redirectTo = document.getElementsByClassName('submenu-triangle')[1].getAttribute("href") + "/edit/profile";
window.open(redirectTo, "_self");
}
function clickToCopy() {
var dummy = document.createElement("textarea"); //элемент для манипулирования с копированием
document.body.appendChild(dummy);
var favN = location.href; //скопировать в переменную текущую адресную строку
favN = favN.substring(32, favN.indexOf('-')); //обрезать строку от 32 символа до "-", т.е. оставить только ID перса
dummy.value = favN;
dummy.select();
document.execCommand("copy");
document.body.removeChild(dummy);
}
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);
}
ready(CheckCharacters);
GM_addStyle(`
#my-fav:hover { cursor: pointer; }
#my-fav:before { content: '❤'; font-size: 20px; }
`);