PageSourceSearch

https://www.esylux.com/_assets/581ae7819742031f221bb47d76589cd6/JavaScripts/esylux.search.js?1771425373

js esylux.com collected 2026-10-04 13:23:30 UTC 7,822 bytes, 211 lines download raw bytes

1(function($) {
2    'use strict';
3
4    $(document).ready(function() {
5        // Alle Filter-Checkboxen initial deaktivieren
6        disableAllFilterCheckboxes();
7
8        // Lazy Load: Nicht geladene Kategorien automatisch nachladen
9        loadPendingCategories();
10
11        // Handle "Load more results" button click
12        $(document).on('click', '.load-more-results', function(e) {
13            e.preventDefault();
14
15            var $button = $(this);
16            var tag = $button.data('tag');
17            var page = $button.data('page');
18            var $facet = $button.closest('.facet[data-tag="' + tag + '"]');
19            var $resultContainer = $facet.find('.result-container');
20            var $resultsContainer = $('#kesearch_results');
21            var searchword = $resultsContainer.data('searchword') || '';
22            var loadingText = $resultsContainer.data('loading-text') || 'Loading...';
23            var errorText = $resultsContainer.data('error-text') || 'Error loading results';
24
25            // Disable button and show loading state
26            $button.prop('disabled', true);
27            var originalText = $button.text();
28            $button.text(loadingText);
29
30            // Make Ajax request
31            $.ajax({
32                url: window.location.pathname + '?type=1759771881',
33                type: 'GET',
34                dataType: 'json',
35                data: {
36                    'tx_kesearch_pi1[tag]': tag,
37                    'tx_kesearch_pi1[page]': page,
38                    'tx_kesearch_pi1[sword]': searchword
39                },
40                success: function(response) {
41                    if (response.error) {
42                        console.error('Error loading more results:', response.error);
43                        alert(errorText);
44                        return;
45                    }
46
47                    // Append new results
48                    $resultContainer.append(response.html);
49
50                    // Update button state
51                    if (response.hasMore) {
52                        // More results available, update page number
53                        $button.data('page', response.page + 1);
54                        $button.prop('disabled', false);
55                        $button.text(originalText);
56                    } else {
57                        // No more results, remove button
58                        $button.closest('.load-more-wrapper').remove();
59                    }
60                },
61                error: function(xhr, status, error) {
62                    console.error('Ajax error:', status, error);
63                    alert(errorText);
64                    $button.prop('disabled', false);
65                    $button.text(originalText);
66                }
67            });
68        });
69    });
70
71    /**
72     * Deaktiviert alle Filter-Checkboxen beim Start der Suche
73     */
74    function disableAllFilterCheckboxes() {
75        $('.filters input[data-facet]').each(function() {
76            var $checkbox = $(this);
77            $checkbox.prop('disabled', true);
78            $checkbox.prop('checked', false);
79            var $label = $('label[for="' + $checkbox.attr('id') + '"]');
80            $label.addClass('disabled');
81        });
82    }
83
84    /**
85     * Lädt alle Kategorien, die noch nicht geladen wurden
86     */
87    function loadPendingCategories() {
88        var $resultsContainer = $('#kesearch_results');
89        var searchword = $resultsContainer.data('searchword') || '';
90        var $pendingFacets = $('.facet[data-loaded="false"]');
91
92        if ($pendingFacets.length === 0) {
93            return;
94        }
95
96        if (searchword === '') {
97            $('.facet[data-loaded="false"]').hide();
98            return;
99        }
100
101        showSpinner();
102
103        // Kategorien sequenziell laden (um Server nicht zu überlasten)
104        var loadNext = function(index) {
105            if (index >= $pendingFacets.length) {
106                hideSpinner();
107                // Prüfen ob in allen Kategorien keine Treffer gefunden wurden
108                if ($('.facet:visible').length === 0) {
109                    $resultsContainer.find('.no-results-message').show();
110                }
111                return;
112            }
113
114            var $facet = $($pendingFacets[index]);
115            var tag = $facet.data('tag');
116
117            loadCategory(tag, searchword, $facet, function() {
118                // Nächste Kategorie laden
119                loadNext(index + 1);
120            });
121        };
122
123        // Starte mit der ersten nicht geladenen Kategorie
124        loadNext(0);
125    }
126
127    /**
128     * Lädt eine einzelne Kategorie per AJAX
129     */
130    function loadCategory(tag, searchword, $facet, callback) {
131        var $resultContainer = $facet.find('.result-container');
132        var $resultsContainer = $('#kesearch_results');
133        var errorText = $resultsContainer.data('error-text') || 'Error loading results';
134        var loadMoreText = $resultsContainer.data('load-more-text') || 'Load more';
135
136        $.ajax({
137            url: window.location.pathname + '?type=1759771882',
138            type: 'GET',
139            dataType: 'json',
140            data: {
141                'tx_kesearch_pi1[tag]': tag,
142                'tx_kesearch_pi1[sword]': searchword
143            },
144            success: function(response) {
145                if (response.error) {
146                    console.error('Error loading category:', response.error);
147                    $facet.remove();
148                    if (callback) callback();
149                    return;
150                }
151
152                if (!response.hasResults) {
153                    // Keine Ergebnisse - Facet entfernen (bleibt unsichtbar)
154                    $facet.remove();
155                } else {
156                    // Ergebnisse einfügen
157                    $resultContainer.html(response.html);
158                    $facet.attr('data-loaded', 'true');
159
160                    // "Mehr laden" Button hinzufügen falls nötig
161                    if (response.hasMore) {
162                        var $loadMoreWrapper = $('<div class="load-more-wrapper">' +
163                            '<button class="btn btn-primary load-more-results" data-tag="' + tag + '" data-page="2">' +
164                            loadMoreText +
165                            '</button></div>');
166                        $facet.append($loadMoreWrapper);
167                    }
168
169                    // Facet anzeigen (war initial versteckt)
170                    $facet.show();
171
172                    // Checkbox aktivieren und anhaken
173                    enableFilterCheckbox(response.tag);
174                }
175
176                if (callback) callback();
177            },
178            error: function(xhr, status, error) {
179                console.error('Ajax error:', status, error);
180                $facet.remove();
181                if (callback) callback();
182            }
183        });
184    }
185
186    /**
187     * Aktiviert die Filter-Checkbox für einen Bereich mit Ergebnissen
188     * Berücksichtigt die Produkt-Bereiche (productsautomation, productslightning, etc.)
189     * die alle von der Checkbox mit data-facet="products" gesteuert werden
190     */
191    function showSpinner() {
192        $('.searchlistProcessing').show();
193    }
194
195    function hideSpinner() {
196        $('.searchlistProcessing').hide();
197    }
198
199    function enableFilterCheckbox(tag) {
200        // Produkt-Bereiche werden von der "products" Checkbox gesteuert
201        var facetName = tag.startsWith('products') ? 'products' : tag;
202
203        var $checkbox = $('.filters input[data-facet="' + facetName + '"]');
204        if ($checkbox.length) {
205            $checkbox.prop('disabled', false);
206            // $checkbox.prop('checked', true);
207            var $label = $('label[for="' + $checkbox.attr('id') + '"]');
208            $label.removeClass('disabled');
209        }
210    }
211})(jQuery);

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.