Änderungen von Dokument Glossar
Zuletzt geändert von Richard Kaden am 10.11.2025 14:47
Von Version 70.2
bearbeitet von Erik Hübner
am 10.11.2025 14:46
am 10.11.2025 14:46
Änderungskommentar:
Umbenannte Rückverlinkungen.
Auf Version 64.1
bearbeitet von Erik Hübner
am 24.10.2025 08:47
am 24.10.2025 08:47
Änderungskommentar:
Es gibt keinen Kommentar für diese Version
Zusammenfassung
-
Seiteneigenschaften (1 geändert, 0 hinzugefügt, 0 gelöscht)
-
Objekte (1 geändert, 0 hinzugefügt, 0 gelöscht)
Details
- Seiteneigenschaften
-
- Inhalt
-
... ... @@ -1,51 +1,45 @@ 1 1 {{html clean="false"}} 2 2 <div id="alpha-nav" style="margin-bottom: 10px; font-weight: bold;"> 3 - Filtern nach: 4 - <a href="#" id="all-link" onclick="filterTable('Alle' , this); return false;" style="margin: 0 5px; cursor: pointer;">Alle</a>5 - <a href="#" onclick="filterTable('A' , this); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-A">A</a>6 - <a href="#" onclick="filterTable('B' , this); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-B">B</a>7 - <a href="#" onclick="filterTable('C' , this); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-C">C</a>8 - <a href="#" onclick="filterTable('D' , this); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-D">D</a>9 - <a href="#" onclick="filterTable('E' , this); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-E">E</a>10 - <a href="#" onclick="filterTable('F' , this); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-F">F</a>11 - <a href="#" onclick="filterTable('G' , this); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-G">G</a>12 - <a href="#" onclick="filterTable('H' , this); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-H">H</a>13 - <a href="#" onclick="filterTable('I' , this); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-I">I</a>14 - <a href="#" onclick="filterTable('J' , this); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-J">J</a>15 - <a href="#" onclick="filterTable('K' , this); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-K">K</a>16 - <a href="#" onclick="filterTable('L' , this); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-L">L</a>17 - <a href="#" onclick="filterTable('M' , this); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-M">M</a>18 - <a href="#" onclick="filterTable('N' , this); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-N">N</a>19 - <a href="#" onclick="filterTable('O' , this); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-O">O</a>20 - <a href="#" onclick="filterTable('P' , this); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-P">P</a>21 - <a href="#" onclick="filterTable('Q' , this); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-Q">Q</a>22 - <a href="#" onclick="filterTable('R' , this); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-R">R</a>23 - <a href="#" onclick="filterTable('S' , this); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-S">S</a>24 - <a href="#" onclick="filterTable('T' , this); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-T">T</a>25 - <a href="#" onclick="filterTable('U' , this); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-U">U</a>26 - <a href="#" onclick="filterTable('V' , this); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-V">V</a>27 - <a href="#" onclick="filterTable('W' , this); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-W">W</a>28 - <a href="#" onclick="filterTable('X' , this); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-X">X</a>29 - <a href="#" onclick="filterTable('Y' , this); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-Y">Y</a>30 - <a href="#" onclick="filterTable('Z' , this); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-Z">Z</a>31 - <a href="#" onclick="filterTable('Ä' , this); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-Ä">Ä</a>32 - <a href="#" onclick="filterTable('Ö' , this); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-Ö">Ö</a>33 - <a href="#" onclick="filterTable('Ü' , this); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-Ü">Ü</a>3 + Filtern nach: 4 + <a href="#" id="all-link" onclick="filterTable('Alle'); return false;" style="margin: 0 5px; cursor: pointer;">Alle</a> 5 + <a href="#" onclick="filterTable('A'); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-A">A</a> 6 + <a href="#" onclick="filterTable('B'); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-B">B</a> 7 + <a href="#" onclick="filterTable('C'); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-C">C</a> 8 + <a href="#" onclick="filterTable('D'); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-D">D</a> 9 + <a href="#" onclick="filterTable('E'); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-E">E</a> 10 + <a href="#" onclick="filterTable('F'); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-F">F</a> 11 + <a href="#" onclick="filterTable('G'); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-G">G</a> 12 + <a href="#" onclick="filterTable('H'); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-H">H</a> 13 + <a href="#" onclick="filterTable('I'); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-I">I</a> 14 + <a href="#" onclick="filterTable('J'); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-J">J</a> 15 + <a href="#" onclick="filterTable('K'); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-K">K</a> 16 + <a href="#" onclick="filterTable('L'); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-L">L</a> 17 + <a href="#" onclick="filterTable('M'); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-M">M</a> 18 + <a href="#" onclick="filterTable('N'); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-N">N</a> 19 + <a href="#" onclick="filterTable('O'); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-O">O</a> 20 + <a href="#" onclick="filterTable('P'); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-P">P</a> 21 + <a href="#" onclick="filterTable('Q'); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-Q">Q</a> 22 + <a href="#" onclick="filterTable('R'); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-R">R</a> 23 + <a href="#" onclick="filterTable('S'); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-S">S</a> 24 + <a href="#" onclick="filterTable('T'); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-T">T</a> 25 + <a href="#" onclick="filterTable('U'); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-U">U</a> 26 + <a href="#" onclick="filterTable('V'); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-V">V</a> 27 + <a href="#" onclick="filterTable('W'); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-W">W</a> 28 + <a href="#" onclick="filterTable('X'); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-X">X</a> 29 + <a href="#" onclick="filterTable('Y'); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-Y">Y</a> 30 + <a href="#" onclick="filterTable('Z'); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-Z">Z</a> 31 + <a href="#" onclick="filterTable('Ä'); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-Ä">Ä</a> 32 + <a href="#" onclick="filterTable('Ö'); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-Ö">Ö</a> 33 + <a href="#" onclick="filterTable('Ü'); return false;" style="margin: 0 5px; cursor: pointer;" id="letter-Ü">Ü</a> 34 34 </div> 35 - 36 36 <style> 37 37 #alpha-nav a.disabled { 38 38 opacity: 0.5; 39 39 cursor: default; 40 40 text-decoration: none !important; 41 - pointer-events: none; 42 42 } 43 - .anchor-target { 44 - scroll-margin-top: 80px; 45 - } 46 46 </style> 47 47 {{/html}} 48 - 49 49 |**Begriff**|**Erklärung** 50 50 |{{id name="Abgebende Stelle"/}}Abgebende Stelle|Bezeichnung der Organisationseinheit, welche digitale Objekte an das Archiv übergibt. Die abgebende Stelle ist häufig identisch mit dem Produzenten. Synonym wird der Begriff "abliefernde Stelle" oder Registraturbildner verwendet. 51 51 |{{id name="Ablieferung"/}}Ablieferung|Gesamtmenge der (digitalen) Objekte, die innerhalb einer [[Übernahme>>||anchor="Ingest"]] vom Produzenten an das Archiv übergeben werden. ... ... @@ -68,8 +68,7 @@ 68 68 |{{id name="Archivinformationspaket"/}}Archivinformationspaket|//siehe [[Archival Information Package (AIP)>>||anchor="Archival Information Package (AIP)"]]Archival Information Package (AIP)// 69 69 |{{id name="Archivpaket"/}}Archivpaket|//siehe [[Archival Information Package (AIP)>>||anchor="Archival Information Package (AIP)"]]Archival Information Package (AIP)// 70 70 |{{id name="Archivspeicher"/}}Archivspeicher|//siehe [[Archival Storage>>||anchor="Archival Storage"]]// 71 -|{{id name="Archivwürdig"/}}Archivwürdig|"Archivwürdig sind Unterlagen, denen ein bleibender Wert für Gesetzgebung, Rechtsprechung, Regierung und Verwaltung, für Wissenschaft und Forschung oder für die Sicherung berechtigter Belange betroffener Personen und Institutionen oder Dritter zukommt." 72 -//[[SächsArchivG>>Startseite.abkuerzungsverzeichnis.WebHome||anchor="SächsArchivG"]] § 2, Abs. 3// 65 +|{{id name="Archivwürdig"/}}Archivwürdig|"Archivwürdig sind Unterlagen, denen ein bleibender Wert für Gesetzgebung, Rechtsprechung, Regierung und Verwaltung, für Wissenschaft und Forschung oder für die Sicherung berechtigter Belange betroffener Personen und Institutionen oder Dritter zukommt."\\//[[SächsArchivG>>Startseite.Abkürzungsverzeichnis||anchor="SächsArchivG"]] § 2, Abs. 3// 73 73 |{{id name="Audio Video Interleave (AVI)"/}}Audio Video Interleave (AVI)|Audio Video Interleave ist ein vom Softwarehersteller Microsoft definiertes Video-Containerformat, das von dem für Windows 3.1 eingeführten RIFF (Resource Interchange File Format) abgeleitet ist. 74 74 |{{id name="Aufbewahrungsfrist"/}}Aufbewahrungsfrist|Geltende Frist, die definiert, wie lange Unterlagen nach deren Schließen innerhalb der aktenführenden Stelle aufzubewahren sind. 75 75 |{{id name="Auslieferungsinformationspaket"/}}Auslieferungsinformationspaket|//siehe [[Dissemination Information Package (DIP)>>||anchor="Dissemination Information Package (DIP)"]]// ... ... @@ -96,7 +96,7 @@ 96 96 |{{id name="Digital Negative Format (DNG)"/}}Digital Negative Format (DNG)|Das Digital-Negative-Format (digitales Negativ) ist ein patentiertes, offenes, nicht-freies, verlustfreies Rohdatenformat, das für die Digitalfotografie entwickelt wurde. 97 97 |{{id name="Digitale Objektart"/}}Digitale Objektart|Gruppe von digitalen Objekten mit identischen Eigenschaften, z. B. E-Akten, Dateisammlungen. 98 98 |{{id name="Digitales Magazin"/}}Digitales Magazin|Ort und technische Systeme innerhalb eines Archivs zur dauerhaften Verwahrung und Erhaltung von digitalem Archivgut. 99 -|{{id name="Digitales Objekt"/}}Digitales Objekt|Nach [[Nestor>>Startseite. abkuerzungsverzeichnis.WebHome||anchor="NESTOR"]] definiert als "ein aus einer Reihe von Bitsequenzen zusammengesetztes Objekt". Somit kann all das als ein digitales Objekt bezeichnet werden, das mit Hilfe eines Computers gespeichert und verarbeitet werden kann.92 +|{{id name="Digitales Objekt"/}}Digitales Objekt|Nach [[Nestor>>Startseite.Abkürzungsverzeichnis||anchor="NESTOR"]] definiert als "ein aus einer Reihe von Bitsequenzen zusammengesetztes Objekt". Somit kann all das als ein digitales Objekt bezeichnet werden, das mit Hilfe eines Computers gespeichert und verarbeitet werden kann. 100 100 |{{id name="Dissemination Information Package (DIP)"/}}Dissemination Information Package (DIP)|Benutzerbezogene Sicht auf das Archivinformationspaket, das im Prozess der [[Benutzung>>||anchor="Benutzung"]] erzeugt und dem Nutzenden des Archivs vorgelegt wird (Auslieferungsinformationspaket = Nutzungspaket). 101 101 |{{id name="DOC/ DOCX"/}}DOC/ DOCX|Dateinamenerweiterung für Textverarbeitungsdokumente, meist ein proprietäres Microsoft Word-Format. 102 102 |{{id name="E-Akte"/}}E-Akte|Zusammenfassung sachlich zusammengehöriger oder verfahrensgleicher elektronisch geführter Dokumente und Vorgänge mit mit entsprechenden Metadaten, die bei der Erledigung eines Geschäftsvorfalls in einem Dokumentenmanagement- oder Vorgangsbearbeitungssystem entstehen. ... ... @@ -126,8 +126,7 @@ 126 126 |{{id name="Konvertierung"/}}Konvertierung|Wechsel des Dateiformats digitaler Unterlagen, bspw. mit Hilfe eines Formatkonverters. 127 127 |{{id name="Langzeitspeicher"/}}Langzeitspeicher|Komponente des Archivspeichers, welche für die dauerhafte Speicherung der Archivpakete eingesetzt wird. 128 128 |{{id name="Lesbarkeit"/}}Lesbarkeit|Möglichkeit zur Interpretation digitaler Unterlagen. 129 -|{{id name="LieSa"/}}Lifecycle eStudierendenakte (LieSa)|Das Projekt "Lifecycle eStudierendenakte – von der Digitalisierung bis zur Langzeitarchivierung" (kurz LieSa) zielt darauf ab, die Studierendendokumentation an der TU Chemnitz umfassend zu digitalisieren. Zudem verfolgt LieSa das Ziel, die digitale Langzeitarchivierung für die sächsischen Hochschulen rechtssicher und datenschutzkonform zu etablieren. Das Projekt wird als kooperatives Nachnutzungsprojekt auf Basis der Dachstrategie zur Digitalen Transformation im Hochschulbereich sowie eines Initiativbudgets des Sächsischen Staatsministeriums für Wissenschaft, Kultur und Tourismus gefördert. 130 -[[LieSa ~~~| Lifecycle eStudierendenakte>>https://www.tu-chemnitz.de/verwaltung/planung/liesa.php]] 122 +|{{id name="LieSa"/}}Lifecycle eStudierendenakte (LieSa)|Das Projekt "Lifecycle eStudierendenakte – von der Digitalisierung bis zur Langzeitarchivierung" (kurz LieSa) zielt darauf ab, die Studierendendokumentation an der TU Chemnitz umfassend zu digitalisieren. Zudem verfolgt LieSa das Ziel, die digitale Langzeitarchivierung für die sächsischen Hochschulen rechtssicher und datenschutzkonform zu etablieren. Das Projekt wird als kooperatives Nachnutzungsprojekt auf Basis der Dachstrategie zur Digitalen Transformation im Hochschulbereich sowie eines Initiativbudgets des Sächsischen Staatsministeriums für Wissenschaft, Kultur und Tourismus gefördert.\\[[LieSa | Lifecycle eStudierendenakte>>https://www.tu-chemnitz.de/verwaltung/planung/liesa.php]] 131 131 |{{id name="Magazinierung"/}}Magazinierung|//siehe [[Archivierung>>||anchor="Archivierung"]]// 132 132 |{{id name="Mapping"/}}Mapping|Verfahren, das Metadatenelemente einer Datenstruktur nach vorgegebenen Regeln in eine andere Datenstruktur überträgt. 133 133 |{{id name="Matroska"/}}Matroska (MKV)|Das Matroska-Format ist ein quelloffenes Containerformat, das in einer einzigen Datei eine nahezu unbegrenzte Anzahl von Video-, Audio- und Untertitelspuren sowie Metadaten speichern kann. Ähnlich wie eine russische Matrjoschka-Puppe vereint es verschiedene Medieninhalte und bietet im Gegensatz zu älteren Formaten wie AVI oder MOV eine hohe Flexibilität bei der Unterstützung verschiedener Codecs und Funktionen wie Kapitelmarkierungen, erweiterte Metadaten und die Fähigkeit, beschädigte Streams besser zu handhaben.
- XWiki.JavaScriptExtension[0]
-
- code
-
... ... @@ -1,117 +3,89 @@ 1 -let currentFilter = 'Alle'; 2 - 3 3 function initTableFilter() { 4 - const table = document.querySelector('table'); 5 - if (!table) return; 6 - 7 - const tbody = table.querySelector('tbody') || table; 8 - const rows = Array.from(table.querySelectorAll('tr')).slice(1); 9 - const availableLetters = new Set(); 10 - 11 - // Sortieren 12 - rows.sort((a, b) => { 13 - const textA = a.querySelector('td:first-child').textContent.trim().toUpperCase(); 14 - const textB = b.querySelector('td:first-child').textContent.trim().toUpperCase(); 2 + var table = document.querySelector('table'); // Erste Tabelle auf der Seite 3 + if (!table) return; // Fallback, falls keine Tabelle 4 + var tbody = table.querySelector('tbody') || table; // Fallback auf table, falls kein tbody 5 + var rows = Array.from(table.querySelectorAll('tr')).slice(1); // Alle Zeilen außer Header 6 + var availableLetters = new Set(); 7 + 8 + // Alphabetisch sortieren 9 + rows.sort(function(a, b) { 10 + var textA = a.querySelector('td:first-child').textContent.trim().toUpperCase(); 11 + var textB = b.querySelector('td:first-child').textContent.trim().toUpperCase(); 15 15 return textA.localeCompare(textB, 'de', { sensitivity: 'base' }); 16 16 }); 17 - rows.forEach(row => tbody.appendChild(row)); 18 - 19 - // Klassen & IDs 20 - rows.forEach(row => { 21 - const firstCell = row.querySelector('td:first-child'); 14 + 15 + // Sortierte Zeilen wieder in die Tabelle einfügen 16 + rows.forEach(function(row) { 17 + tbody.appendChild(row); 18 + }); 19 + 20 + // Klassen dynamisch zuweisen und Anfangsbuchstaben sammeln 21 + rows.forEach(function(row) { 22 + var firstCell = row.querySelector('td:first-child'); // Erste Spalte (Begriff) 22 22 if (firstCell && firstCell.textContent) { 23 - const text = firstCell.textContent.trim(); 24 - let firstChar = text.charAt(0).toUpperCase(); 25 - if (['Ä','Ö','Ü'].includes(firstChar)) firstChar = firstChar; 24 + var firstChar = firstCell.textContent.trim().charAt(0).toUpperCase(); 25 + // Umlaute handhaben 26 + if (firstChar === 'Ä') firstChar = 'Ä'; 27 + else if (firstChar === 'Ö') firstChar = 'Ö'; 28 + else if (firstChar === 'Ü') firstChar = 'Ü'; 26 26 row.classList.add('letter-' + firstChar); 27 27 availableLetters.add(firstChar); 28 - 29 - const idMatch = firstCell.innerHTML.match(/id\s*=\s*["']([^"']+)["']/); 30 - if (idMatch) { 31 - const anchorId = idMatch[1]; 32 - row.id = anchorId; 33 - firstCell.innerHTML = firstCell.innerHTML.replace(/id\s*=\s*["'][^"']+["']/, ''); 34 - firstCell.classList.add('anchor-target'); 35 - } 36 36 } 37 37 }); 38 - 39 - // Ausgrauen 40 - const letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ'.split(''); 41 - letters.forEach(letter => { 42 - const link = document.getElementById('letter-' + letter); 43 - if (link && !availableLetters.has(letter)) link.classList.add('disabled'); 44 - }); 45 - 46 - filterTable('Alle', document.getElementById('all-link')); 47 - 48 - // Anker-Links 49 - document.addEventListener('click', e => { 50 - if (e.target.tagName === 'A' && e.target.getAttribute('href')?.startsWith('#')) { 51 - const hash = e.target.getAttribute('href'); 52 - if (hash === '#') return; 53 - e.preventDefault(); 54 - handleAnchorClick(hash.substring(1)); 33 + 34 + // Buchstaben ohne Einträge ausgrauen 35 + var letters = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'Ä', 'Ö', 'Ü']; 36 + letters.forEach(function(letter) { 37 + var link = document.getElementById('letter-' + letter); 38 + if (link && !availableLetters.has(letter)) { 39 + link.classList.add('disabled'); 40 + link.style.pointerEvents = 'none'; // Klick deaktivieren 55 55 } 56 56 }); 57 - 58 - // Initialer Hash 59 - if (window.location.hash) { 60 - setTimeout(() => handleAnchorClick(window.location.hash.substring(1)), 300); 61 - } 43 + 44 + // Initial: Alle anzeigen und "Alle" highlighten 45 + filterTable('Alle', document.getElementById('all-link')); // "Alle" mit Link-Referenz aufrufen 62 62 } 63 63 64 64 function filterTable(letter, targetLink) { 65 - currentFilter = letter; 66 - const table = document.querySelector('table'); 49 + var table = document.querySelector('table'); 67 67 if (!table) return; 68 - const rows = table.querySelectorAll('tr'); 69 - 70 - rows.forEach((row, index) => { 71 - if (index === 0) { row.style.display = ''; return; } 72 - row.style.display = (letter === 'Alle' || row.classList.contains('letter-' + letter)) ? '' : 'none'; 51 + var rows = table.querySelectorAll('tr'); 52 + var visibleCount = 0; 53 + 54 + rows.forEach(function(row, index) { 55 + if (index === 0) { // Header immer sichtbar 56 + row.style.display = ''; 57 + return; 58 + } 59 + if (letter === 'Alle') { 60 + row.style.display = ''; 61 + visibleCount++; 62 + } else if (row.classList.contains('letter-' + letter)) { 63 + row.style.display = ''; 64 + visibleCount++; 65 + } else { 66 + row.style.display = 'none'; 67 + } 73 73 }); 74 - 75 - // Highlight Navigation 76 - document.querySelectorAll('#alpha-nav a').forEach(link => { 77 - link.style.fontWeight = 'normal'; 78 - link.style.color = 'inherit'; 69 + 70 + // Aktiven Buchstaben highlighten 71 + var links = document.querySelectorAll('#alpha-nav a'); 72 + links.forEach(function(link) { 73 + link.style.fontWeight = 'normal'; 74 + link.style.color = 'inherit'; 79 79 }); 80 - if (targetLink) { 81 - targetLink.style.fontWeight = 'bold'; 82 - targetLink.style.color = '#00597B'; 76 + // Highlight entweder über targetLink (Initialisierung) oder event.target (Klick) 77 + var linkToHighlight = targetLink || event.target; 78 + if (linkToHighlight) { 79 + linkToHighlight.style.fontWeight = 'bold'; 80 + linkToHighlight.style.color = '#00597B'; // Corporate Design: Dunkelblau 83 83 } 84 84 } 85 85 86 -// --- Stabiler Anker-Sprung --- 87 -function handleAnchorClick(targetId) { 88 - const targetRow = document.getElementById(targetId); 89 - if (!targetRow) return; 90 - 91 - const firstCell = targetRow.querySelector('td:first-child'); 92 - const text = firstCell.textContent.trim(); 93 - let firstChar = text.charAt(0).toUpperCase(); 94 - if (['Ä','Ö','Ü'].includes(firstChar)) firstChar = firstChar; 95 - 96 - // Filter ggf. anpassen 97 - if (targetRow.style.display === 'none' || currentFilter !== firstChar) { 98 - const link = document.getElementById('letter-' + firstChar); 99 - if (link && !link.classList.contains('disabled')) { 100 - filterTable(firstChar, link); 101 - } else if (currentFilter !== 'Alle') { 102 - filterTable('Alle', document.getElementById('all-link')); 103 - } 104 - } 105 - 106 - // Scrollen + Hervorheben (ohne Sprung zurück) 107 - setTimeout(() => { 108 - history.replaceState(null, '', '#' + targetId); // Hash stabilisieren 109 - targetRow.scrollIntoView({ behavior: 'smooth', block: 'center' }); 110 - targetRow.style.transition = 'background-color 0.6s'; 111 - targetRow.style.backgroundColor = '#e6f3ff'; 112 - setTimeout(() => { targetRow.style.backgroundColor = ''; }, 2000); 113 - }, 200); 84 +// Initialisierung nach Laden 85 +if (document.readyState === 'loading') { 86 + document.addEventListener('DOMContentLoaded', initTableFilter); 87 +} else { 88 + initTableFilter(); 114 114 } 115 - 116 -// Init aufrufen 117 -document.addEventListener('DOMContentLoaded', initTableFilter);