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
As of
// ==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);
}
})();