/* Kombobox: ein bleibt im Formular stehen (unsichtbar): * Wert, Name und das Ändern-Ereignis bleiben dieselben, jeder Code, der bisher * mit dem – dieses Skript * ersetzt nichts, wenn es nicht läuft. */ (function () { 'use strict'; let naechsteId = 0; /* Die Einträge eines stehen. */ function modellAus(select) { const gruppen = []; let offeneGruppe = null; Array.from(select.children).forEach(function (kind) { if (kind.tagName === 'OPTGROUP') { gruppen.push({ label: kind.label, optionen: Array.from(kind.children).map(eintragAus) }); offeneGruppe = null; return; } if (kind.tagName !== 'OPTION') { return; } if (!offeneGruppe) { offeneGruppe = { label: null, optionen: [] }; gruppen.push(offeneGruppe); } offeneGruppe.optionen.push(eintragAus(kind)); }); return gruppen; } function eintragAus(option) { return { wert: option.value, text: option.textContent.trim() }; } function passt(text, filter) { return text.toLocaleLowerCase().indexOf(filter.toLocaleLowerCase()) !== -1; } /** * Baut die Kombobox um `select` herum auf. Ein zweiter Aufruf für dasselbe * auch * täte. */ function oeffnenUndFokussieren() { synchronisieren(); rendern(''); offenAnzeigen(); eingabe.focus(); eingabe.select(); } // Ungefiltert, wie ein wird beim Laden der Seite umgebaut – ohne // dass die einbindende Ansicht dafür eigenen Code braucht. document.querySelectorAll('select[data-kombobox]').forEach(verbessern); })();