Ísland.is Kennitala Fix (Safe)

Safely updates Kennitala without breaking layout or React styles.

// ==UserScript==
// @name         Ísland.is Kennitala Fix (Safe)
// @namespace    http://tampermonkey.net/
// @version      18.3
// @description  Safely updates Kennitala without breaking layout or React styles.
// @author       You
// @match        https://island.is/minarsidur/min-gogn/yfirlit
// @match        https://island.is/minarsidur/min-gogn/yfirlit/*
// @grant        none
// @license         MIT
// ==/UserScript==

(function () {
    'use strict';

    const oldKennitala = '250107-2770';
    const newKennitala = '250104-2770';

    // Replace text safely without breaking styles
    const replaceTextSafely = () => {
        const elements = document.querySelectorAll('p, span, div');
        elements.forEach((el) => {
            // Only touch text-containing elements, not containers
            if (el.childNodes.length === 1 && el.childNodes[0].nodeType === 3) {
                if (el.textContent.includes(oldKennitala)) {
                    el.textContent = el.textContent.replace(oldKennitala, newKennitala);
                }
            }
        });
    };

    // React hydration is async, wait for it
    const waitUntilReady = setInterval(() => {
        const bodyText = document.body.innerText || '';
        if (bodyText.includes(oldKennitala)) {
            replaceTextSafely();
            clearInterval(waitUntilReady);
        }
    }, 300);

    // Backup: use MutationObserver in case React re-renders later
    const observer = new MutationObserver(() => {
        replaceTextSafely();
    });

    observer.observe(document.body, {
        childList: true,
        subtree: true
    });
})();