PageSourceSearch

https://swh.de/assets/js/hws_custom--Zli_Sj.js

js swh.de collected 2026-09-24 11:20:46 UTC 10,945 bytes, 310 lines download raw bytes

1/**
2 * fuegt eine ausgewaehltes Element aus einem Dropdown der Tabelle hinzu. Danach
3 * im Dropdown verborgen, um Duplikate zu vermeiden. Das Dropdown Feld wird
4 * wieder zum Standard geaendert. Zu der Auswahl wird Richtwert und ein
5 * Loesch-Feld mitgegeben. Nach Erfolg wird eine Nachricht temporaer angezeigt.
6 * @see hws_deleteElement
7 *
8 * @param selectId Select des ausgewaehlten Elements
9 */
10
11window.hws_addElement = function (select) {
12    const selectedOption = select.options[select.selectedIndex];
13
14    const elementKey = selectedOption.getAttribute('data-key');
15    const elementName = selectedOption.getAttribute('data-name');
16    const elementSize = selectedOption.getAttribute('data-size');
17
18    $.ajax({
19        url: '/hws_bulk_waste_add_element',
20        type: 'POST',
21        dataType: 'json',
22        data: {
23            elementKey: elementKey,
24            elementName: elementName,
25            elementSize: elementSize,
26        },
27        async: true,
28        success: function (data) {
29            document.getElementById('element-rows').insertAdjacentHTML("beforeend", data);
30            selectedOption.disabled = true;
31
32            hws_updateBulkWasteCounter('add', elementSize);
33        },
34    });
35}
36
37/**
38 * Loescht ein Element aus der Tabelle. Dabei wird die komplette Zeile entfernt.
39 * Weiterhin wird der entfernte Gegenstand im Dropdown wieder eingeblendet. Nach
40 * Erfolg wird eine Nachricht temporaer angezeigt.
41 *
42 * @param button Loesch-Button in der Tabellenzeile
43 * @param key Index der Option, die hinzugefuegt wird
44 */
45window.hws_deleteElement = function (button, key) {
46    hws_updateBulkWasteCounter('substract', document.getElementById('vals-' +  key).getAttribute('data-total-amount'));
47
48    document.getElementById(key + '-input-row').remove();
49    document.getElementById(`${key}-option`).disabled = false;
50}
51
52/**
53 * Aktualisierung des ausgewählten Gegenstandes und der Gesamtmänge im Sperrmüllformular
54 *
55 * @param element
56 * @param singleItemValue
57 */
58window.hws_updateBulkWasteElement = function (element, singleItemValue){
59    let oldAmount = element.getAttribute('data-total-amount');
60    let newAmount = Number(Number(element.value) * Number(singleItemValue)).toFixed(1);
61
62    element.setAttribute('data-total-amount', newAmount);
63    hws_updateBulkWasteCounter('substract', oldAmount);
64    hws_updateBulkWasteCounter('add', newAmount);
65}
66
67/**
68 * Aktualisiert die Gesamtmemge im Sperrmüllforlular
69 *
70 * @param method add oder substract zum Addieren oder Subtrahieren des übergebenen Wertes
71 * @param amount wert um den die Anzeige angehoben oder abgesenkt werden soll
72 */
73window.hws_updateBulkWasteCounter = function (method, amount){
74    let totalAmountCounter = document.getElementById('total-amount-counter')
75    let totalAmount = totalAmountCounter.getAttribute('data-value');
76
77    switch (method){
78        case 'add':
79            totalAmount = Number(totalAmount) + Number(amount);
80            break;
81        case 'substract':
82            totalAmount = Number(totalAmount) - Number(amount);
83            break;
84        default:
85            break;
86    }
87
88    totalAmount = Number(totalAmount).toFixed(1);
89
90    totalAmountCounter.setAttribute('data-value', totalAmount);
91    totalAmountCounter.innerText = Number(totalAmount).toLocaleString();
92}
93/**
94 * Löscht die Hausnummern bei einer Änderung der Straße
95 *
96 * @param {string} streetInputId - ID des Eingabefeldes der Straße
97 * @param {string} houseNumberInputId - ID des Eingabefeldes der Hausnummer
98 * @param {string} datalistId - ID der Datalist
99 */
100window.clearHouseNumberOnStreetChange = function(streetInputId, houseNumberInputId, datalistId) {
101    document.getElementById(streetInputId)?.addEventListener("input", function() {
102        let houseNumberField = document.getElementById(houseNumberInputId);
103        let houseNumberDatalist = document.getElementById(datalistId);
104
105        if (houseNumberField) {
106            houseNumberField.value = '';
107            houseNumberField.classList.remove("is-valid", "is-invalid");
108        }
109
110        if (houseNumberDatalist) {
111            houseNumberDatalist.innerHTML = '';
112        }
113    });
114};
115
116/**
117 * Leert das Hausnummer-Feld bei einer Änderung der Straße (Alternative manuelle Methode)
118 */
119window.clearHouseNumberOnStreetChangeManual = function(houseNumberId, datalistID) {
120    const houseNumberField = document.getElementById(houseNumberId);
121    const datalist = document.getElementById(datalistID);
122
123    if (houseNumberField) {
124        houseNumberField.value = '';
125        houseNumberField.classList.remove("is-valid", "is-invalid");
126    }
127
128    if (datalist) {
129        datalist.innerHTML = '';
130    }
131};
132
133/**
134 * Füllt das angegebene Feld mit den Hausnummern Vorschlägen zur Straße
135 * aus dem Entsorgungskalender
136 *
137 * Verwendet in Waschmobil und Entsorgungskalender
138 *
139 * @param {HTMLInputElement} houseNumberField
140 * @param {HTMLInputElement} streetField
141 * @param {HTMLDataListElement} outputDatalist
142 */
143window.entsorgungskalenderAutocompleteHouseNumberToStreet = function (houseNumberField, streetField, outputDatalist) {
144    if (streetField.value.length > 0 && !valueInDatalist(houseNumberField.value, outputDatalist)) {
145        $.ajax({
146            url: '/hws_entsorgungskalender_autocomplete_housenumber',
147            type: 'POST',
148            dataType: 'json',
149            data: { street: streetField.value },
150            async: true,
151            success: function (data) {
152                outputDatalist.innerHTML = '';
153                data.forEach(function (number) {
154                    let option = document.createElement('option');
155                    option.value = number;
156                    outputDatalist.appendChild(option);
157                });
158            },
159            error: function (xhr, status, error) {
160                console.log("Fehler bei der AJAX-Anfrage für Hausnummern: ", error);
161            }
162        });
163    }
164};
165
166/**
167 * Füllt das angegebene Feld mit der Liste für Privat/Gewerbe zur Straße mit HNr
168 * aus dem Entsorgungskalender
169 *
170 * Verwendet in Waschmobil und Entsorgungskalender
171 *
172 * @param {HTMLInputElement} houseNumberField
173 * @param {HTMLInputElement} streetField
174 * @param outputSelect
175 * @param selectedItem
176 */
177window.entsorgungskalenderAutocompleteCustomerToStreet = function (houseNumberField, streetField, outputSelect, selectedItem = '') {
178    if (streetField.value.length > 0 && houseNumberField.value.length > 0) {
179        $.ajax({
180            url: '/hws_entsorgungskalender_autocomplete_customer',
181            type: 'POST',
182            dataType: 'json',
183            data: { street: streetField.value, number: houseNumberField.value },
184            async: true,
185            success: function (data) {
186                outputSelect.innerHTML = '';
187                data.forEach(function (kunde2){
188                    let option = document.createElement('option');
189                    option.text = kunde2;
190                    if (kunde2 === 'kein Gewerbe') {
191                        option.value = '';
192                    } else {
193                        option.value = kunde2;
194                    }
195                    if (kunde2 === selectedItem) {
196                        option.selected = true;
197                    }
198
199                    outputSelect.appendChild(option);
200                });
201                if(data.length > 0){
202                    outputSelect.removeAttribute('disabled');
203                } else {
204                    outputSelect.setAttribute('disabled', 'disabled')
205                }
206            },
207            error: function (xhr, status, error) {
208                console.log("Fehler bei der AJAX-Anfrage für Prívat/Gewerbe: ", error);
209            }
210        });
211    }
212};
213
214/**
215 * Waschmobil
216 * Einzel-Validierung per AJAX im Erinnerung- und Terminsuche-Formular
217 *
218 * @param element HTMLInputElement
219 * @param stackElements Object
220 */
221window.hwsWaschmobilValidate = function (element, stackElements = {}) {
222    const formType = element.form?.querySelector('input[name="formEmailMemory"]')?.value === 'send'
223        ? 'erinnerung'
224        : 'terminsuche';
225
226    $.ajax({
227        url: '/hws_waschmobil_validate',
228        type: 'POST',
229        dataType: 'json',
230        data: {
231            field: element.name,
232            value: element.value,
233            stack: JSON.stringify(stackElements),
234            formType: formType
235        },
236        success: function (data) {
237            const feedbackElement = document.getElementById(element.name + 'Feedback')
238                || document.getElementById(element.name + '-feedback');
239
240            const inputElements = document.getElementsByName(element.name);
241
242            inputElements.forEach(function (input) {
243                if (data !== '') {
244                    input.classList.add('is-invalid');
245                    input.classList.remove('is-valid');
246                } else {
247                    input.classList.remove('is-invalid');
248                    input.classList.add('is-valid');
249                }
250            });
251
252            if (feedbackElement) {
253                feedbackElement.innerText = data;
254                if (data !== '') {
255                    feedbackElement.classList.add('d-block');
256                } else {
257                    feedbackElement.classList.remove('d-block');
258                }
259            }
260        }
261    });
262};
263
264window.showDisposalYearPlan = function (openyear, closeyear) {
265    if (document.getElementById('disposal-plan-'+openyear).style.display === 'block') {
266        document.getElementById('disposal-plan-'+openyear).style.display = 'none';
267    } else {
268        document.getElementById('disposal-plan-'+openyear).style.display = 'block';
269    }
270    document.getElementById('disposal-plan-'+closeyear).style.display = 'none';
271
272}
273
274/**
275 * Anpassen des Charts der Besucheranzeige
276 *
277 * @param chartID
278 * @param datasetIndex
279 * @param labels
280 */
281window.hwsBesucheranzeigeChangeChart = function (chartID = '', datasetIndex = 0, labels = []){
282    chartHideAllDatasets(chartID);
283    chartShowDataset(chartID, datasetIndex);
284    chartSetLabels(chartID, labels);
285}
286
287/**
288 * Anpassen der Active Klasse der Buttons um den ausgewählten Tag zu highlighten
289 * und übergabe des Textes und der Frabe für die Auslastung des Wertstoffmarktes
290 *
291 * @param buttonParentID
292 * @param selectedButton
293 * @param visitorTextID
294 * @param visitorText
295 * @param visitorColor
296 */
297window.hwsBesucheranzeigeChangeView = function (buttonParentID = '', selectedButton, visitorTextID = '', visitorText = '', visitorColor = ''){
298    let buttonParent = document.getElementById(buttonParentID);
299
300    Array.from(buttonParent.getElementsByTagName('button')).forEach(function (element){
301        element.classList.remove('active');
302    });
303
304    selectedButton.classList.add('active');
305
306    let visitorElement = document.getElementById(visitorTextID);
307
308    visitorElement.innerText = visitorText;
309    visitorElement.className = visitorColor;
310}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.