Gelbooru "Index" Button

Adds an "Index" button on post pages, allowing you to return to a search starting from the ID of the current post you're on

Verzia zo dňa 02.02.2025. Pozri najnovšiu verziu.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, Greasemonkey alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey alebo Userscripts.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie správcu používateľských skriptov.

(Už mám správcu používateľských skriptov, nechajte ma ho nainštalovať!)

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

(Už mám správcu používateľských štýlov, nechajte ma ho nainštalovať!)

// ==UserScript==
// @name         Gelbooru "Index" Button
// @namespace    https://gelbooru.com/
// @version      1.0
// @description  Adds an "Index" button on post pages, allowing you to return to a search starting from the ID of the current post you're on
// @match        https://gelbooru.com/index.php?page=post&s=view*
// @icon         https://gelbooru.com/favicon.ico
// @grant        none
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    if (location.hostname !== 'gelbooru.com') return;

    const url = new URL(window.location.href);
    const urlParams = url.searchParams;

    const currentId = urlParams.get('id');
    if (!currentId) return; // If no post ID, do nothing

    urlParams.delete('id');
    urlParams.set('s', 'list');

    const rawTags = urlParams.get('tags') || '';
    let decodedTags = decodeURIComponent(rawTags);

    const newIdSearch = 'id:=<' + currentId;

    const idSearchRegex = /id:=<\d+/i;
    if (idSearchRegex.test(decodedTags)) {
        decodedTags = decodedTags.replace(idSearchRegex, newIdSearch);
    } else {
        decodedTags = decodedTags.trim();
        if (decodedTags) decodedTags += ' ';
        decodedTags += newIdSearch;
    }

    urlParams.set('tags', decodedTags.trim());

    const finalUrl = `${url.origin}${url.pathname}?${urlParams.toString()}`;

    const box = document.createElement('div');
    box.className = 'alert alert-info';
    box.style.textAlign = 'center';
    box.style.margin = '10px 0px';
    box.style.padding = '10px';

    const indexLink = document.createElement('a');
    indexLink.textContent = 'Index';
    indexLink.href = finalUrl;

    box.appendChild(indexLink);

    const navContainers = document.querySelectorAll('.alert.alert-info');
    if (navContainers.length > 0) {
        navContainers[navContainers.length - 1].insertAdjacentElement('afterend', box);
    } else {
        const mainBody = document.querySelector('.mainBodyPadding');
        if (mainBody) mainBody.appendChild(box);
    }
})();