Chortowod / Shiki Fav Star

// ==UserScript==
// @name         Shiki Fav Star
// @author       Chortowod (https://openuserjs.org/scripts/Chortowod)
// @namespace    http://shikimori.one/
// @version      1.3.6
// @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/*
// @license      MIT
// @grant        none
// @copyright    2023, 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; }
`);