PageSourceSearch

https://www.praxisgemeinschaft-ottensen.de/js/2ClickIframePrivacy.js

js praxisgemeinschaft-ottensen.de collected 2026-10-06 16:36:20 UTC 6,724 bytes, 164 lines download raw bytes

1/*!
2 * 2Click-Iframe-Privacy v0.3.0
3 * https://github.com/01-Scripts/2Click-Iframe-Privacy
4 * 
5 * Licensed MIT © 2018-2019 Michael Lorer - https://www.01-scripts.de/
6 */
7
8 var _2ClickIframePrivacy = new function() {
9
10    var config = {
11        enableCookies: true,
12        useSessionCookie: true,
13        cookieNamespace: '_2ClickIPEnable-',
14        showContentLabel: 'Inhalt anzeigen',
15        rememberChoiceLabel: 'Auswahl merken',
16        privacyPolicyLabel: 'Datenschutzerklärung',
17        privacyPolicyUrl: false
18    };
19    
20    this.types = new Array(
21        {
22            type: 'video',
23            description: 'Zum Aktivieren des Videos bitte auf den Link klicken. Durch das Aktivieren von eingebetteten Videos werden Daten an den jeweiligen Anbieter übermittelt. Weitere Informationen können unserer Datenschutzerklärung entnommen werden.<br />'
24        },
25        {
26            type: 'map',
27            description: 'Zum Aktivieren der eingebetteten Karte von Google Maps bitte auf den Link klicken. Durch das Aktivieren werden Daten an Google übermittelt. Weitere Informationen können unserer <a href="Datenschutz.php">Datenschutzerklärung</a> entnommen werden.<br><br>'
28        },
29        {
30            type: 'calendar',
31            description: 'Zum Aktivieren des eingebetteten Kalenders bitte auf den Link klicken. Durch das Aktivieren werden Daten an den jeweiligen Anbieter übermittelt. Weitere Informationen können unserer Datenschutzerklärung entnommen werden.<br />'
32        }
33    );
34
35    function setCookie(name, value, days) {
36        var d = new Date;
37        d.setTime(d.getTime() + 24*60*60*1000*days);
38        document.cookie = name + "=" + value + ";path=/;expires=" + d.toGMTString();
39    }
40
41    function setSessionCookie(name, value) {
42        document.cookie = name + "=" + value + ";path=/";
43    }
44
45    function getCookie(name) {
46        var v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');
47        return v ? v[2] : null;
48    }
49
50    // Create <div>-element within the respective iframe to display the defined data-security message and get consent for loading the iframe content.
51    function wrap(el, wrapper, type, text) {
52        el.parentNode.insertBefore(wrapper, el);
53        wrapper.className = 'privacy-msg privacy-'+type+'-msg';
54        wrapper.style.width = el.clientWidth+'px';
55        wrapper.style.height = el.clientHeight+'px';
56        wrapper.innerHTML = text +'<a href="#foo" onclick="_2ClickIframePrivacy.EnableContent(\''+ type +'\'); return false;" class="button">'+config.showContentLabel+'</a>';
57        if(config.enableCookies){
58            wrapper.innerHTML = wrapper.innerHTML + '<br /><input type="checkbox" name="remind-\''+ type +'\'" /> <label>'+config.rememberChoiceLabel+'</label>';
59        }
60        if(config.privacyPolicyUrl){
61            wrapper.innerHTML = wrapper.innerHTML + '<br /><a href="'+config.privacyPolicyUrl+'">'+config.privacyPolicyLabel+'</a>';
62        }
63        wrapper.innerHTML = '<p>' + wrapper.innerHTML + '</p>';
64        wrapper.appendChild(el);
65    }
66
67    this.EnableContent = function (type){
68        var i;
69
70        // Cookies globally enabled by config?
71        if(config.enableCookies){
72            var remind = false;
73            var x = document.querySelectorAll('div.privacy-'+type+'-msg p input');
74            // Check if any checkbox for the selected class was checked. If so a cookie will be set
75            for (i = 0; i < x.length; i++) {
76                if(x[i].checked == true){
77                    remind = true;
78                }
79            }
80
81            if(remind){
82                if(config.useSessionCookie){
83                    setSessionCookie(config.cookieNamespace+type, '1');
84                }
85                else{
86                    setCookie(config.cookieNamespace+type, '1', 30);
87                }
88            }
89        }
90
91        var x = document.querySelectorAll('div.privacy-'+type+'-msg p');
92        for (i = 0; i < x.length; i++) {
93            x[i].parentNode.removeChild(x[i]);
94        }
95
96        x = document.querySelectorAll('div.privacy-'+type+'-msg');
97        for (i = 0; i < x.length; i++) {
98            var parent = x[i].parentNode;
99
100            // Move all children out of the element
101            while (x[i].firstChild) parent.insertBefore(x[i].firstChild, x[i]);
102
103            // Remove the empty element
104            parent.removeChild(x[i]);
105        }
106
107        x = document.querySelectorAll('iframe[data-2click-type="'+type+'"]');
108        for (i = 0; i < x.length; i++) {
109            x[i].src = x[i].getAttribute("data-src");
110        }
111
112        // If available, execute the callback that is defined for the currently active type
113        for (i = 0; i < this.types.length; i++) {
114            if(this.types[i].type == type && this.types[i].callback) {
115                window[this.types[i].callback]();
116            }
117        }
118    }
119
120    this.init = function (Userconfig) {
121        // Read UserConfiguration:
122        if (typeof Userconfig.enableCookies !== 'undefined') {
123            config.enableCookies = Userconfig.enableCookies;
124        }
125        if (typeof Userconfig.useSessionCookie !== 'undefined') {
126            config.useSessionCookie = Userconfig.useSessionCookie;
127        }
128        if (typeof Userconfig.cookieNamespace !== 'undefined') {
129            config.cookieNamespace = Userconfig.cookieNamespace;
130        }
131        if (typeof Userconfig.privacyPolicyUrl !== 'undefined') {
132            config.privacyPolicyUrl = Userconfig.privacyPolicyUrl;
133        }
134        if (typeof Userconfig.showContentLabel !== 'undefined') {
135            config.showContentLabel = Userconfig.showContentLabel;
136        }
137        if (typeof Userconfig.rememberChoiceLabel !== 'undefined') {
138            config.rememberChoiceLabel = Userconfig.rememberChoiceLabel;
139        }
140        if (typeof Userconfig.privacyPolicyLabel !== 'undefined') {
141            config.privacyPolicyLabel = Userconfig.privacyPolicyLabel;
142        }
143
144        if (Array.isArray(Userconfig.CustomTypes)) {
145            this.types = Userconfig.CustomTypes;
146        }
147
148        for (i = 0; i < this.types.length; i++) {
149            var selector = document.querySelectorAll('iframe[data-2click-type="'+this.types[i].type+'"]');
150
151            var x;
152            if(!getCookie(config.cookieNamespace+this.types[i].type)){
153                for (x = 0; x < selector.length; x++) {
154                    wrap(selector[x], document.createElement('div'), this.types[i].type, this.types[i].description);
155                }
156            }else{
157                for (x = 0; x < selector.length; x++) {
158                    selector[x].src = selector[x].getAttribute("data-src");
159                }
160            }
161        }
162
163    };
164}

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.