您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Přejmenování stránky na základě parcelního čísla, vlastníků nebo spravujícího subjektu a čísla LV, s možností nastavení vlastního formátu. Více vlastníků se zkrátí podle pravidla: 1–2 = jména, víc než 2 = počet+sufix (3–4_vlastnici, 5+_vlastniku).
// ==UserScript== // @name Katastry - download QoL // @namespace http://tampermonkey.net/ // @version 2.2 // @description Přejmenování stránky na základě parcelního čísla, vlastníků nebo spravujícího subjektu a čísla LV, s možností nastavení vlastního formátu. Více vlastníků se zkrátí podle pravidla: 1–2 = jména, víc než 2 = počet+sufix (3–4_vlastnici, 5+_vlastniku). // @author Teodor Tomáš // @match *://*/ZobrazObjekt.aspx* // @license GNU GPLv3 // @grant GM_getValue // @grant GM_setValue // @grant GM_registerMenuCommand // ==/UserScript== (function () { 'use strict'; console.log("Tampermonkey skript spuštěn."); // Výchozí formát názvu – dostupné placeholdery: {cisloLV}, {jmeno}, {parcelniCislo} const defaultFormat = "Informace o pozemku - LV{cisloLV} - {jmeno} - {parcelniCislo}"; let formatString = GM_getValue("formatString", defaultFormat); // Registrace menu příkazu pro nastavení vlastního formátu GM_registerMenuCommand("Nastavit formát názvu", function() { const newFormat = prompt("Zadejte formát názvu stránky.\nPoužijte placeholdery: {cisloLV}, {jmeno}, {parcelniCislo}", formatString); if (newFormat && newFormat.trim() !== "") { GM_setValue("formatString", newFormat); formatString = newFormat; alert("Nový formát uložen. Změny se projeví při další aktualizaci názvu stránky."); } }); // Funkce pro vyhledání textu a extrakci hodnoty za štítkem function getTextAfterLabel(labelText) { const labelElement = [...document.querySelectorAll('td.nazev')] .find(el => el.textContent.includes(labelText)); if (labelElement) { const valueElement = labelElement.nextElementSibling; return valueElement ? valueElement.textContent.trim() : null; } return null; } // Funkce pro úpravu jména (odstranění diakritiky, mezer, teček atd.) function processName(name) { if (!name) return null; name = name.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); // odstranění diakritiky name = name.replace(" a ", "_a_"); // SJ edit name = name.replace("s.r.o.", "_sro"); name = name.replace("a.s.", "_as"); name = name.replace(/\b\w/g, char => char.toUpperCase()); name = name.replace(/\s+/g, ""); // odstranění mezer name = name.replace(/\./g, ""); // odstranění teček name = name.replace("SJ", "SJ_"); // SJ edit return name; } // Funkce pro odstranění teček function removeDots(str) { return str ? str.replace(/\./g, "") : ""; } // Upravená funkce pro získání vlastníků z tabulky (sekce "Vlastnické právo") // Ignoruje řádky, kde TD má class="partnerSJM" function getOwners() { let owners = []; const table = document.querySelector("table.vlastnici"); if (!table) return null; const rows = table.querySelectorAll("tbody > tr"); let ownersStarted = false; for (let row of rows) { // pokud buňka partnerSJM existuje, přeskočíme tento řádek if (row.querySelector("td.partnerSJM")) { continue; } // Hledáme řádek s hlavičkou "Vlastnické právo" if (row.querySelector("th")) { if (row.textContent.includes("Vlastnické právo")) { ownersStarted = true; continue; } else if (ownersStarted) { // Když jsme již v sekci a narazíme na další hlavičku, sběr vlastníků končí break; } } if (ownersStarted) { const td = row.querySelector("td"); if (td) { let name = td.textContent.split(",")[0].trim(); name = processName(name); owners.push(name); } } } // Pokud je pouze jeden nebo dva vlastníci, vypíšeme jejich jména oddělená podtržítkem if (owners.length <= 2) { return owners.length > 0 ? owners.join("_") : null; } else { // Pokud je více než 2 vlastníků: // Pro 3-4 vlastníky použijeme formát: "3_vlastnici" (resp. "4_vlastnici") // Pro 5 a více vlastníků: "X_vlastniku" if (owners.length <= 4) { return owners.length + "_vlastnici"; } else { return owners.length + "_vlastniku"; } } } // Funkce pro získání subjektu spravujícího pozemek – hledá varianty: // "hospodař" (např. Právo hospodařit, Příslušnost hospodařit) a "správa nemovitostí" s "kraje" function getManagementSubject() { const thElements = document.querySelectorAll("table.vlastnici th"); for (let th of thElements) { const lowerText = th.textContent.toLowerCase(); if ( lowerText.includes("hospodař") || (lowerText.includes("správa nemovitostí") && lowerText.includes("kraje")) ) { const tr = th.closest("tr"); if (tr && tr.nextElementSibling) { const td = tr.nextElementSibling.querySelector("td"); if (td) return td.textContent.trim(); } } } return null; } // Extrakce parcelního čísla a čísla LV let parcelniCislo = getTextAfterLabel('Parcelní číslo:'); console.log("Parcelní číslo:", parcelniCislo); let cisloLV = getTextAfterLabel('Číslo LV:'); console.log("Číslo LV:", cisloLV); // Získání subjektu spravujícího pozemek (např. pozemek ve správě nebo hospodaření) let subject = getManagementSubject(); if (subject) { subject = subject.split(",")[0].trim(); subject = processName(subject); } console.log("Subjekt správy/hospodaření:", subject); // Získání vlastníků – pokud není nalezen subjekt, použijeme vlastníky let owners = getOwners(); console.log("Vlastníci:", owners); // Volba výsledného jména: pokud je definován subjekt (správa/hospodaření), použije se on, jinak vlastníci. let jmeno = subject ? subject : (owners ? owners : null); // Pokud máme všechny potřebné informace, sestavíme nový název stránky podle formátu if (parcelniCislo && cisloLV && jmeno) { parcelniCislo = removeDots(parcelniCislo); // Nahrazení lomítek podtržítky parcelniCislo = parcelniCislo.replace(/\//g, "_"); jmeno = removeDots(jmeno); cisloLV = removeDots(cisloLV); let novyNazev = formatString; novyNazev = novyNazev.replace("{cisloLV}", cisloLV) .replace("{jmeno}", jmeno) .replace("{parcelniCislo}", parcelniCislo); console.log("Nový název stránky:", novyNazev); document.title = novyNazev; } else { console.warn("Nepodařilo se získat všechny potřebné informace. Název stránky nebude změněn."); } })();