PageSourceSearch

https://www.signem.cat/app_support/avisoSinCookies/avisoSinCookies.js?v=5

js signem.cat collected 2026-09-27 02:47:36 UTC 10,654 bytes, 261 lines download raw bytes

1/*
2Aviso de navegacion sin cookies.
3
4Cuando el visitante rechaza las cookies en el selector de PD Cookie Consent, la
5libreria bloquea scripts e iframes de terceros (mapas, videos, reCAPTCHA,
6analitica), asi que partes de la web dejan de funcionar sin que el visitante
7sepa por que. Este script muestra una barra fija superior explicandolo, con un
8boton que reabre el selector de cookies.
9
10Como decide si mostrarse: lee la cookie "pd_cc" que escribe PD Cookie Consent.
11  - sin cookie                                 -> el selector no ha arrancado: no
12  - showModal === true                         -> el modal esta abierto: no
13  - accepted === true                          -> acepto todo: no
14  - queda algun servicio con actived !== true  -> si
15
16El boton no llama a ninguna API de la libreria: le basta con la clase
17"pdcc-open-modal", que PD Cookie Consent atiende con un handler delegado en
18document, asi que funciona aunque el aviso se pinte despues de cargarla.
19
20El aviso se puede cerrar y reaparece en la siguiente pagina. No se guarda nada
21en cookie ni en storage: sin consentimiento no se almacena nada en el cliente.
22*/
23(function () {
24    'use strict';
25
26    var ID_AVISO = 'mobAvisoCookies';
27    var COOKIE = 'pd_cc';
28
29    // Cabeceras fijas habituales de los temas: si estan ancladas arriba hay que
30    // bajarlas el alto del aviso para no taparlas.
31    var SELECTORES_CABECERA = 'header, .header, #header, .navbar, .navbar-fixed-top, .fixed-top, .sticky-top, #headerFixed, .headerFixed';
32
33    var TEXTOS = {
34        es: {
35            aviso: 'Estás navegando con las cookies rechazadas: algunos contenidos, como mapas, vídeos o formularios, pueden no funcionar.',
36            boton: 'Revisar cookies',
37            cerrar: 'Cerrar aviso'
38        },
39        ca: {
40            aviso: 'Estàs navegant amb les cookies rebutjades: alguns continguts, com ara mapes, vídeos o formularis, poden no funcionar.',
41            boton: 'Revisar cookies',
42            cerrar: 'Tancar avís'
43        },
44        en: {
45            aviso: 'You are browsing with cookies rejected: some content, such as maps, videos or forms, may not work.',
46            boton: 'Review cookies',
47            cerrar: 'Close notice'
48        },
49        eu: {
50            aviso: 'Cookieak baztertuta nabigatzen ari zara: eduki batzuk (mapak, bideoak, inprimakiak) agian ez dira behar bezala kargatuko.',
51            boton: 'Cookieak berrikusi',
52            cerrar: 'Oharra itxi'
53        },
54        gl: {
55            aviso: 'Estás navegando coas cookies rexeitadas: algúns contidos, como mapas, vídeos ou formularios, poden non funcionar.',
56            boton: 'Revisar cookies',
57            cerrar: 'Pechar aviso'
58        }
59    };
60
61    function textos() {
62        var lang = (document.documentElement.lang || 'es').toLowerCase();
63        if (lang.indexOf('-') !== -1) lang = lang.split('-')[0];
64        return TEXTOS[lang] || TEXTOS.es;
65    }
66
67    // Mismo parseo que usa PD Cookie Consent para su propia cookie.
68    function estadoCookies() {
69        var partes = decodeURIComponent(document.cookie).split(';');
70        for (var i = 0; i < partes.length; i++) {
71            var parte = partes[i];
72            while (parte.charAt(0) === ' ') parte = parte.substring(1);
73            if (parte.indexOf(COOKIE + '=') === 0) {
74                try {
75                    return JSON.parse(parte.substring(COOKIE.length + 1));
76                } catch (e) {
77                    return null;
78                }
79            }
80        }
81        return null;
82    }
83
84    // No se listan en el aviso: solo deciden si queda algo bloqueado.
85    function serviciosBloqueados(estado) {
86        var nombres = [];
87        if (!estado || !estado.blockList || !estado.blockList.length) return nombres;
88        for (var i = 0; i < estado.blockList.length; i++) {
89            var item = estado.blockList[i];
90            if (!item || item.actived === true) continue;
91            if (item.visible === false) continue;
92            var nombre = typeof item.name === 'string' ? item.name.trim() : '';
93            if (nombre && nombres.indexOf(nombre) === -1) nombres.push(nombre);
94        }
95        return nombres;
96    }
97
98    function debeMostrarse(estado) {
99        if (!estado) return false;
100        if (estado.showModal === true) return false;
101        if (estado.accepted === true) return false;
102        return serviciosBloqueados(estado).length > 0;
103    }
104
105    // El alto del aviso empuja el contenido: padding en el body y desplazamiento
106    // de las cabeceras que esten fijadas a top: 0.
107    var layout = { paddingOriginal: null, paddingBase: null, cabecerasMovidas: [] };
108
109    // Descartado por el visitante en esta pagina: no se vuelve a pintar aqui.
110    var descartado = false;
111    var ajustaAlto = null;
112
113    function aplicaDesplazamiento(alto) {
114        var body = document.body;
115        if (layout.paddingOriginal === null) {
116            layout.paddingOriginal = body.style.paddingTop || '';
117            layout.paddingBase = parseFloat(window.getComputedStyle(body).paddingTop) || 0;
118        }
119        body.style.paddingTop = (layout.paddingBase + alto) + 'px';
120
121        if (layout.cabecerasMovidas.length) {
122            for (var m = 0; m < layout.cabecerasMovidas.length; m++) {
123                layout.cabecerasMovidas[m].el.style.top = alto + 'px';
124            }
125            return;
126        }
127
128        var candidatos = document.querySelectorAll(SELECTORES_CABECERA);
129        for (var i = 0; i < candidatos.length; i++) {
130            var el = candidatos[i];
131            var estilo = window.getComputedStyle(el);
132            if (estilo.position !== 'fixed') continue;
133            if ((parseFloat(estilo.top) || 0) !== 0) continue;
134            layout.cabecerasMovidas.push({ el: el, topOriginal: el.style.top || '' });
135            el.style.top = alto + 'px';
136        }
137    }
138
139    function revierteDesplazamiento() {
140        if (layout.paddingOriginal !== null) {
141            document.body.style.paddingTop = layout.paddingOriginal;
142            layout.paddingOriginal = null;
143            layout.paddingBase = null;
144        }
145        for (var i = 0; i < layout.cabecerasMovidas.length; i++) {
146            layout.cabecerasMovidas[i].el.style.top = layout.cabecerasMovidas[i].topOriginal;
147        }
148        layout.cabecerasMovidas = [];
149    }
150
151    function pinta() {
152        var t = textos();
153
154        var aviso = document.createElement('div');
155        aviso.id = ID_AVISO;
156        aviso.setAttribute('role', 'region');
157        aviso.setAttribute('aria-label', t.aviso);
158
159        var inner = document.createElement('div');
160        inner.className = 'mobAvisoCookies-inner';
161
162        var icono = document.createElement('span');
163        icono.className = 'mobAvisoCookies-icono';
164        icono.setAttribute('aria-hidden', 'true');
165        icono.appendChild(document.createTextNode('!'));
166
167        var texto = document.createElement('p');
168        texto.className = 'mobAvisoCookies-texto';
169        texto.appendChild(document.createTextNode(t.aviso));
170
171        // La clase pdcc-open-modal es lo que hace que PD Cookie Consent reabra el
172        // selector; sin hijos dentro del enlace, porque su handler mira el target
173        // del click.
174        var boton = document.createElement('a');
175        boton.className = 'mobAvisoCookies-btn pdcc-open-modal';
176        boton.setAttribute('href', '#');
177        boton.appendChild(document.createTextNode(t.boton));
178
179        var cerrar = document.createElement('button');
180        cerrar.className = 'mobAvisoCookies-cerrar';
181        cerrar.setAttribute('type', 'button');
182        cerrar.setAttribute('aria-label', t.cerrar);
183        cerrar.setAttribute('title', t.cerrar);
184        cerrar.innerHTML = '&times;';
185
186        inner.appendChild(icono);
187        inner.appendChild(texto);
188        inner.appendChild(boton);
189        inner.appendChild(cerrar);
190        aviso.appendChild(inner);
191        document.body.insertBefore(aviso, document.body.firstChild);
192
193        ajustaAlto = function () {
194            if (!aviso.parentNode) return;
195            aplicaDesplazamiento(aviso.offsetHeight);
196        };
197
198        cerrar.addEventListener('click', function () {
199            descartado = true;
200            quita();
201        });
202
203        ajustaAlto();
204        window.addEventListener('resize', ajustaAlto);
205    }
206
207    function quita() {
208        var aviso = document.getElementById(ID_AVISO);
209        if (ajustaAlto) {
210            window.removeEventListener('resize', ajustaAlto);
211            ajustaAlto = null;
212        }
213        revierteDesplazamiento();
214        if (aviso && aviso.parentNode) aviso.parentNode.removeChild(aviso);
215    }
216
217    // Se llama al cargar y cada vez que el visitante toca el selector de cookies.
218    function refresca() {
219        // Con el selector abierto no se toca nada: tapa la pagina entera y
220        // quitar o poner el aviso solo provocaria saltos de layout.
221        if (document.getElementById('pdcc-modal-bg')) return;
222
223        var estado = estadoCookies();
224        if (!debeMostrarse(estado)) {
225            if (document.getElementById(ID_AVISO)) quita();
226            return;
227        }
228        if (descartado || document.getElementById(ID_AVISO)) return;
229        pinta();
230    }
231
232    function init() {
233        // En un iframe (previsualizaciones de landings, embebidos) no pinta nada.
234        try {
235            if (window.top !== window.self) return;
236        } catch (e) {
237            return;
238        }
239        refresca();
240
241        // PD Cookie Consent solo recarga la pagina al aceptar o al guardar la
242        // configuracion. El boton "Rechazar" (#pdcc-modal-reject) y la X del modal
243        // se limitan a cerrarlo en la misma pagina, asi que sin reevaluar aqui el
244        // aviso no apareceria hasta la siguiente. El setTimeout deja correr antes
245        // el handler de la libreria, que es quien actualiza la cookie.
246        document.addEventListener('click', function (e) {
247            var destino = e.target;
248            if (!destino) return;
249            var id = destino.id || '';
250            var clases = typeof destino.className === 'string' ? destino.className : '';
251            if (id.indexOf('pdcc') !== 0 && clases.indexOf('pdcc') === -1) return;
252            window.setTimeout(refresca, 0);
253        }, false);
254    }
255
256    if (document.readyState === 'loading') {
257        document.addEventListener('DOMContentLoaded', init);
258    } else {
259        init();
260    }
261})();

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.