Gelbooru X to unfavorite

Press hotkey "x" to unfavorite gelbooru post

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

You will need to install an extension such as Tampermonkey to install this script.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name         Gelbooru X to unfavorite
// @namespace    http://tampermonkey.net/
// @version      2025-04-30
// @description  Press hotkey "x" to unfavorite gelbooru post
// @author       rainbrain
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// @match       https://gelbooru.com/*
// @license     MIT
// ==/UserScript==

var isKeyPressed = {
    x: false, // ASCII code for 'a'
    // ... Other keys to check for custom key combinations
};

document.body.addEventListener(
    "mousemove",
    ({ target }) => {
        if (target.parentNode.nodeName !== "A") return;
        window.lastHoveredLink = target.parentNode.href;
    },
    false
);

function getid(u) {
    const urlParams = new URLSearchParams(u);
    const postid = urlParams.get("id");
    return postid;
}

function delFav(id) {                     // opposite action: unfavorite
    if (!id) return;
    fetch(`/index.php?page=favorites&s=delete&id=${id}`, {
        credentials: "include"
    });
}

document.onkeydown = (keyDownEvent) => {
    isKeyPressed[keyDownEvent.key] = true;
    if (isKeyPressed["x"]) {
        const queryString = window.location.search;
        let postid = getid(queryString);
        if (postid == null) {
            postid = getid(window.lastHoveredLink);
        }
        delFav(postid);
    }
};