PageSourceSearch

https://serviceportal.stendal.de/res/modules/gccookiemessage/js/gccookiemessage.js?v=v26.8.11

js stendal.de collected 2026-10-03 17:43:26 UTC 4,789 bytes, 133 lines download raw bytes

1var Gccookiemessage = {
2    init: function (options) {
3        this.cookieName = options.cookieName || 'gccookiemessage';
4        this.messageTimeout = options.messageTimeout || 365;
5        this.dialog = document.getElementById(this.cookieName);
6
7        if (!this.dialog) return;
8
9        this.preventEscapeClose();
10        this.checkCookieMessage();
11
12        var self = this;
13        GeoCMS.Content.Core.alternateDocumentReady(function () {
14            self.setCookieOptionCheck();
15            self.setContainerEventListeners();
16            self.setImpressumTrigger();
17            self.setDatenschutzTrigger();
18        });
19    },
20
21    preventEscapeClose: function () {
22        if (this.dialog) {
23            this.dialog.addEventListener('cancel', function (event) {
24                event.preventDefault();
25            });
26            this.dialog.addEventListener('keydown', function (event) {
27                if (event.key === 'Escape') {
28                    event.preventDefault();
29                }
30            });
31        }
32    },
33
34    setCookieMessageModalState: function (isOpen) {
35        document.body.classList.toggle('gccookiemessage-modal-open', !!isOpen);
36    },
37
38    setCookieMessageCookie: function () {
39        let currentDate = new Date();
40        let stopDate = new Date(currentDate.getTime() + 1000 * 60 * 60 * 24 * this.messageTimeout);
41        localStorage.setItem(this.cookieName + '_okay', 1);
42        localStorage.setItem(this.cookieName + '_expires', stopDate.toJSON());
43        this.setCookieMessageModalState(false);
44    },
45
46    checkCookieMessage: function () {
47        let currentDate = new Date();
48        let currentDateStr = currentDate.toJSON();
49        let storageDateStr = localStorage.getItem(this.cookieName + '_expires');
50
51        if (storageDateStr && storageDateStr > currentDateStr) {
52            this.setCookieMessageModalState(false);
53            this.dialog.remove();
54        } else {
55            if (typeof this.dialog.showModal === 'function') {
56                this.dialog.showModal();
57            } else {
58                this.dialog.style.display = 'block';
59            }
60            this.setCookieMessageModalState(true);
61        }
62    },
63
64    setCookieOptionCheck: function () {
65        this.dialog.querySelectorAll('.option-element-dialog').forEach(function (element) {
66            let option = element.getAttribute('data-option-name');
67            if (option) {
68                let option_on = element.getAttribute('data-option-on') || 1;
69                let current = localStorage.getItem(option);
70                if (current && current === option_on) {
71                    element.checked = true;
72                } else {
73                    element.checked = false;
74                }
75            }
76        });
77    },
78
79    clickHandler: function (element) {
80        let option = element.getAttribute('data-option-name');
81        let option_on = element.getAttribute('data-option-on') || 1;
82        let current = localStorage.getItem(option);
83        if (current && current == option_on) {
84            localStorage.removeItem(option);
85        } else if (!current || current !== option_on) {
86            localStorage.setItem(option, option_on);
87        }
88        element.checked = !element.checked;
89    },
90
91    setContainerEventListeners: function () {
92        var self = this;
93        this.dialog.querySelectorAll('.option-card').forEach(function (element) {
94            if (element.hasAttribute("data-click")) {
95                let checkbox = element.querySelector('.option-element-dialog');
96                element.addEventListener('click', function (event) {
97                    event.preventDefault();
98                    self.clickHandler(checkbox);
99                });
100            }
101        });
102    },
103
104    setImpressumTrigger: function () {
105        let triggerButton = document.getElementById('trigger_impressum');
106        if (!triggerButton || triggerButton.dataset.bound === '1') {
107            return;
108        }
109
110        triggerButton.dataset.bound = '1';
111        triggerButton.addEventListener('click', function () {
112            let remoteButton = document.getElementById('portal_infofooter_impressum');
113            if (remoteButton) {
114                remoteButton.click();
115            }
116        });
117    },
118
119    setDatenschutzTrigger: function () {
120        let triggerButton = document.getElementById('trigger_datenschutz');
121        if (!triggerButton || triggerButton.dataset.bound === '1') {
122            return;
123        }
124
125        triggerButton.dataset.bound = '1';
126        triggerButton.addEventListener('click', function () {
127            let remoteButton = document.getElementById('portal_infofooter_datenschutz');
128            if (remoteButton) {
129                remoteButton.click();
130            }
131        });
132    }
133};

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.