Lieber Besucher, herzlich willkommen bei: SpongeForum. Falls dies dein erster Besuch auf dieser Seite ist, lies bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert. Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang. Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.
lo, das skript ändert den begriff ja tatsächlich auch im freitext
| 
					 | 
				
					Quellcode | 
			
					1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192  | 
				
					// Konfiguration
const alterName = "Scheißhaufen";
const neuerName = "Krosso";
// **AGRESSIVER TITEL-FIX**
// Der Code, der den Titel sofort korrigiert.
if (document.title.includes(alterName)) {
    document.title = document.title.replaceAll(alterName, neuerName);
}
// Selektor für den Haupt-Content-Bereich zur Begrenzung der initialen Suche
const mainContentSelector = '#main';
// Selektoren für Elemente, die von der Textersetzung AUSGESCHLOSSEN werden müssen.
const EXCLUDE_SELECTORS = [
    '.thankStats',
    'a[id^="thankStatsLink-"]',
    '.messageInner .messageContent', 
    '.codeBox' 
];
/**
 * Prüft, ob ein Element oder einer seiner Vorfahren von der Ersetzung ausgeschlossen werden muss.
 */
function shouldExcludeNode(node) {
    if (node.nodeType !== 1) return false; 
    for (const selector of EXCLUDE_SELECTORS) {
        if (node.matches(selector) || node.closest(selector)) {
            return true;
        }
    }
    return false;
}
/**
 * Funktion, die einen DOM-Knoten und seine Kinder rekursiv nach Text durchsucht.
 */
function durchsucheUndErsetzeText(node) {
    if (node.nodeType === 3) { 
        if (node.nodeValue.includes(alterName)) {
            // Normale Ersetzung für alle Textknoten
            node.nodeValue = node.nodeValue.replaceAll(alterName, neuerName);
        }
    } else if (node.nodeType === 1) { 
        if (shouldExcludeNode(node)) {
            return;
        }
        const tag = node.tagName.toLowerCase();
        if (tag === 'script' || tag === 'style' || tag === 'textarea' || tag === 'input' || tag === 'pre' || tag === 'code') {
            return;
        }
        node.childNodes.forEach(durchsucheUndErsetzeText);
    }
}
// ----------------------------------------------------------------------
// NEUE FUNKTIONEN: Gezielte Ersetzung in Attributen und spezifischen WBB-Strukturen
// ----------------------------------------------------------------------
/**
 * Ersetzt den Namen in spezifischen HTML-Attributen und Profilüberschriften.
 */
function attributeErsetzen(parentNode) {
    const elementsToUpdate = parentNode.querySelectorAll(
        // Korrigiert Tooltips, Avatare, H3, H2 und H1 (Profil-Header)
        '[title*="' + alterName + '"], ' + 
        'img[alt*="' + alterName + '"], ' +
        '.profileContent > h3, ' +
        '.profileContent > h2, ' +
        '.profileContent > h1'
    );
    elementsToUpdate.forEach(element => {
        // Ändert den Title-Text (Tooltip)
        if (element.hasAttribute('title')) {
            element.title = element.title.replaceAll(alterName, neuerName);
        }
        if (element.hasAttribute('alt')) {
            element.alt = element.alt.replaceAll(alterName, neuerName);
        }
        // Textuelle Ersetzung für H1, H2 und H3
        if (element.tagName.toLowerCase() === 'h1' || element.tagName.toLowerCase() === 'h3' || element.tagName.toLowerCase() === 'h2') {
            element.textContent = element.textContent.replaceAll(alterName, neuerName);
        }
    });
}
/**
 * KORRIGIERT: Korrigiert den Namen in User-Links (Likes, PNs, Zitate).
 */
function linkTextUndAttributeErsetzen(parentNode) {
    const likeSelectors = 'div[id^="thankUser-"] > p.smallFont a';
    const pnNotificationSelector = 'div#pmOutstandingNotifications a';
    const pnListAuthorSelector = '.columnAuthor a';
    const quoteAuthorSelector = '.quoteHeader h3 a';
    
    // NEU HINZUGEFÜGT: Selektor für die Empfängeranzeige in der PN-Ansicht
    const pnRecipientSelector = '.light.smallFont a'; // <-- DIES IST DIE ERGÄNZUNG
    
    // Kombinierter Selektor
    parentNode.querySelectorAll(`${likeSelectors}, ${pnNotificationSelector}, ${pnListAuthorSelector}, ${quoteAuthorSelector}, ${pnRecipientSelector}`).forEach(userLink => { // Selektor hier eingefügt!
        // 1. Textinhalt korrigieren (Der sichtbare Name)
        if (userLink.textContent.includes(alterName)) {
            userLink.textContent = userLink.textContent.replaceAll(alterName, neuerName);
        }
        // 2. href-Attribut korrigieren (Der Link zur Profilseite)
        if (userLink.href && userLink.href.includes(alterName)) {
            userLink.href = userLink.href.replaceAll(alterName, neuerName);
        }
    });
}
/**
 * **NEU:** Erzwingt die Korrektur der Edit-Meldung über innerHTML.
 */
function korrigiereEditNote(parentNode) {
    parentNode.querySelectorAll('.editNote').forEach(noteElement => {
        if (noteElement.innerHTML.includes(alterName)) {
            // Ersetzt den Text inkl. der Anführungszeichen »«
            noteElement.innerHTML = noteElement.innerHTML.replaceAll('»' + alterName + '«', '»' + neuerName + '«');
        }
    });
}
// ----------------------------------------------------------------------
// HAUPTAUSFÜHRUNG
// ----------------------------------------------------------------------
// 1. ERSÄTZEN: Aggressive Textersetzung (Original-Logik)
const mainContent = document.querySelector(mainContentSelector);
if (mainContent) {
    durchsucheUndErsetzeText(mainContent);
}
// 2. KORRIGIEREN: Gezielte Ersetzung in Attributen und Links
attributeErsetzen(document);
linkTextUndAttributeErsetzen(document); 
korrigiereEditNote(document); // <-- NEU: Korrigiert die Edit-Meldung bei Initialladung
// 3. FREIGEBEN: Entfernt die CSS-Blockade aus der styles.css und macht die Seite sichtbar.
document.body.style.setProperty('visibility', 'visible', 'important');
document.body.style.setProperty('opacity', '1', 'important');
// 4. DYNAMISCHE INHALTE: MutationObserver
new MutationObserver(mutations => {
    mutations.forEach(mutation => {
        if (mutation.type === 'childList') {
            mutation.addedNodes.forEach(node => {
                 // Beschränke die Suche auch bei neuen Knoten.
                 if (node.nodeType === 1) {
                     // Führe alle drei Ersetzungstypen auf dem neuen Knoten aus!
                     durchsucheUndErsetzeText(node);
                     attributeErsetzen(node);
                     // Spezieller Aufruf für dynamisch geladene Bereiche (Likes/PNs/Zitate)
                     // Hier muss nun auch der neue Selektor berücksichtigt werden, da das Element dynamisch geladen werden KÖNNTE.
                     if (node.matches('.thankStats') || node.closest('.thankStats') || 
                         node.matches('#pmOutstandingNotifications') || node.closest('#pmOutstandingNotifications') || 
                         node.matches('.columnAuthor') || node.closest('.columnAuthor') || 
                         node.matches('.quoteHeader') || node.closest('.quoteHeader') ||
                         node.matches('.light.smallFont') || node.closest('.light.smallFont')) { // <--- NEUE Bedingung hinzugefügt
                         
                         // Man könnte hier auch einfach `node` übergeben, aber der Selektor-Block ist so konsistenter zur alten Logik
                         linkTextUndAttributeErsetzen(node.closest('.thankStats') || node.closest('#pmOutstandingNotifications') || node.closest('.columnAuthor') || node.closest('.quoteHeader') || node.closest('.light.smallFont') || node);
                     }
                     
                     // **SONDERAUFRUF FÜR DIE EDIT-MELDUNG**
                     korrigiereEditNote(node); // <-- NEU: Korrigiert die Edit-Meldung, wenn sie dynamisch geladen wird.
                     
                     // Fallback für allgemeine Links, wenn keine spezielle Logik zutrifft
                     linkTextUndAttributeErsetzen(node);
                 }
            });
        }
    });
}).observe(document.body, {
    childList: true,
    subtree: true
});
				 | 
			
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Extramaster« (Gestern, 06:52)
1 Besucher