PageSourceSearch

https://www.roemerland.at/system/statV.1789655742/Javascript/gh_app.js

js roemerland.at collected 2026-10-08 17:15:49 UTC 6,621 bytes, 196 lines download raw bytes

1/**
2 * SCROLL BACK TO TOP BUTTON
3 * When the user scrolls down 40px from the top of the document, show Back-to-Top button
4 */
5if ($('#btn-back-to-top').length) {
6    $(window).on('scroll', function () {
7        var bodyScrollTop = $(document.body).scrollTop();
8        var docScrollTop = $(document.documentElement).scrollTop();
9
10        if (bodyScrollTop > 40 || docScrollTop > 40) {
11            $('#btn-back-to-top').show();
12        } else {
13            $('#btn-back-to-top').hide();
14        }
15    });
16}
17
18/**
19 * OPEN BROWSER PRINT
20 */
21$(document).on('click', '.function-print', function () {
22    window.print();
23    return false;
24});
25
26/**
27 * FILTER ELEMENTS
28 */
29$('#filter-group').on('submit', function (e) {
30    e.preventDefault();
31});
32
33$('#filter-button').on('click', function (e) {
34    e.preventDefault();
35    filterElements('#filter-text', 'filter-groupping', '#clearBtn');
36});
37
38// Clear filter
39$('#clearBtn').on('click', function (e) {
40    e.preventDefault();
41
42    // Empty input field and focus it
43    $('#filter-text').val('').focus();
44
45    // Show all results again
46    filterElements('#filter-text', 'filter-groupping', '#clearBtn');
47});
48
49function filterElements(filterTextField, dataId, clearButton) {
50    var lang = $('html').attr('lang');
51    var noResultMessage = lang === 'de'
52        ? "<p role='alert' class='js-filter-no-results'>Es konnten keine Ergebnisse zum gesuchten Begriff <strong id='js-filter-no-results-val'></strong> gefunden werden.</p>"
53        : "<p role='alert' class='js-filter-no-results'>No results for <strong id='js-filter-no-results-val'></strong>.</p>";
54
55    var groups = $(".js-filter-container[data-id='" + dataId + "'] [data-id='js-filter-group']");
56
57    var searchText = $(filterTextField).val().toLowerCase();
58
59    var firstGroupWithResults = null;
60    var containerHasResults = false;
61
62    groups.each(function () {
63        var $group = $(this);
64        var groupHasResults = false;
65
66        var letterRows = $group.find('.filter-group-section');
67
68        letterRows.each(function () {
69            var $letterRow = $(this);
70            var letterRowHasResults = false;
71
72            var filterResults = $letterRow.find('.overview-item');
73
74            filterResults.each(function () {
75                var $item = $(this);
76                var title = $item.find('.card-title-heading').text().toLowerCase();
77
78                if (searchText === '' || title.indexOf(searchText) !== -1) {
79                    $item.removeAttr('hidden');
80                    groupHasResults = true;
81                    containerHasResults = true;
82                    letterRowHasResults = true;
83                } else {
84                    $item.attr('hidden', 'hidden');
85                }
86            });
87
88            // Show/hide letter row if it does/doesn't have any results
89            if (!letterRowHasResults) {
90                $letterRow.attr('hidden', 'hidden');
91            } else {
92                $letterRow.removeAttr('hidden');
93            }
94        });
95
96        // Show/hide this group if it does/doesn't have any results
97        if (!groupHasResults) {
98            $group.attr('hidden', 'hidden');
99        } else {
100            $group.removeAttr('hidden');
101            if (!firstGroupWithResults) {
102                firstGroupWithResults = $group;
103            }
104        }
105    });
106
107    // Add/remove "no result" message
108    $('.js-filter-no-results').remove();
109    if (!containerHasResults) {
110        $(noResultMessage).insertAfter('.js-filter-container');
111        $('#js-filter-no-results-val').text($(filterTextField).val());
112    }
113
114    // Show/hide clear button
115    if ($(filterTextField).val() === '') {
116        $(clearButton).hide();
117    } else {
118        $(clearButton).show();
119    }
120
121    // Open the first section with visible results after filtering
122    // and close the others, to keep UX clean.
123    $(".card-collapse.content-collapse").each(function () {
124        var $section = $(this);
125        var hasVisibleItems = $section.find('.overview-item').filter(function () {
126            return !$(this).is('[hidden]');
127        }).length > 0;
128
129        var sectionId = $section.attr('id');
130        if (!sectionId) {
131            return;
132        }
133        var $headerButton = $(".card-collapse-heading button[data-toggle='collapse'][data-target='#" + sectionId + "'], " +
134            ".card-collapse-heading button[data-toggle='collapse'][href='#" + sectionId + "']");
135
136        if (hasVisibleItems && !firstGroupWithResults) {
137            firstGroupWithResults = $section.closest("[data-id='js-filter-group']");
138        }
139        if (!hasVisibleItems) {
140            $section.removeClass('show');
141            $section.attr('aria-expanded', 'false');
142            $headerButton.attr('aria-expanded', 'false');
143        }
144    });
145
146    // Now open the first section body (collapse div) that has results (if any)
147    if (firstGroupWithResults) {
148        var $firstSectionBody = firstGroupWithResults.find('.collapse').first();
149        var firstSectionId = $firstSectionBody.attr('id');
150        if (firstSectionId) {
151            var $firstHeaderButton = $(".card-collapse-heading button[data-toggle='collapse'][data-target='#" + firstSectionId + "'], " +
152                ".card-collapse-heading button[data-toggle='collapse'][href='#" + firstSectionId + "']");
153
154            $firstSectionBody.addClass('show');
155            $firstSectionBody.attr('aria-expanded', 'true');
156            $firstHeaderButton.attr('aria-expanded', 'true');
157            $firstHeaderButton.focus();
158        }
159    }
160}
161
162
163$(document).on('click', '[data-toggle="collapse"]', function (e) {
164    e.preventDefault();
165
166    var $trigger = $(this);
167
168    // Determine target selector (#id)
169    var targetSelector = $trigger.attr('data-target') || $trigger.attr('href');
170    if (!targetSelector) {
171        return;
172    }
173
174    // In case href="#content_block_0" style
175    if (targetSelector.indexOf('#') === -1 && this.hash) {
176        targetSelector = this.hash;
177    }
178
179    var $target = $(targetSelector);
180    if ($target.length === 0) {
181        return;
182    }
183
184    var isShown = $target.hasClass('show');
185
186    // Toggle show class
187    if (isShown) {
188        $target.removeClass('show');
189        $target.attr('aria-expanded', 'false');
190        $trigger.attr('aria-expanded', 'false');
191    } else {
192        $target.addClass('show');
193        $target.attr('aria-expanded', 'true');
194        $trigger.attr('aria-expanded', 'true');
195    }
196});

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.