Tab Renamer

Allows you to rename tabs

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         Tab Renamer
// @namespace    https://mkps.app
// @version      1.0.2
// @description  Allows you to rename tabs
// @tag          utilities
// @author       MK
// @license      MIT
// @match        *://*/*
// @icon         data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAFWSURBVHgBzZeBkYIwEEWXmyvgSqCEuw6wgrMDr4MrAVKCFagViBWoHVjClmAH+DNGBmOQhCzRP7MTJgn8l2QDgejFymgiVVWVo1ghvk1VjVCo58kBjPkekVtNjJh1IcQBnpg7IUQBPMy7ED/of/6g1yhHVPpCBECPHDE30zqj6wiHtBAB6Ez7Vim1CISIA7DXvGmadQBEHQXQl3CeELpO6YtRu8An27Ms+yvLcuPoyxSzDQO2mguCKOZFFGLeA0GjX8VjzG0IV5tXEsaYQ4zEPPY1Ds5ArDlZax4EMLX5U4AU5r0AqcydACnNHwBSm2vZ27BMae4CmFO4eKz5HQAeUKD4ojBxjPkdAJkTSkpzG6Agf7GEeQtgsj/3vIelzFsAfCx8k48lzVsAfC5/B/qdEUtpc61PUxaONkbs6Hp4POmfCJpANwA9un/EAcuxw4zU0iN9W10AY6HDaH6/FlEAAAAASUVORK5CYII=
// @grant        GM_registerMenuCommand
// ==/UserScript==

(() => {
	"use strict";

	let trueName = null;
	let userSetName = null;
	let skipEventCount = 0;

	function main() {
		GM_registerMenuCommand("Rename tab", renameTab);

		new MutationObserver(() => {
			if (skipEventCount > 0) {
				skipEventCount--;
			} else {
				pageChangedTitle();
			}
		}).observe(
			document.querySelector("title"),
			{subtree: true, characterData: true, childList: true}
		);
	}

	function renameTab() {
		let newName = prompt("Rename this tab", userSetName ?? "");
		resetTabName();
		if (newName) {
			trueName = document.title;
			userSetName = newName;
			changePageTitle(newName);
		}
	}

	function resetTabName() {
		if (trueName) {
			changePageTitle(trueName);
			trueName = null;
			userSetName = null;
		}
	}

	function pageChangedTitle() {
		if (trueName != null) {
			trueName = document.title;
			changePageTitle(userSetName);
		}
	}

	function changePageTitle(title) {
		skipEventCount++;
		document.title = title;
	}

	main();
})();