PageSourceSearch

https://www.governo.it/sites/all/modules/eu_cookie_compliance/js/eu_cookie_compliance.js?tixwfm

js governo.it collected 2026-09-24 08:27:48 UTC 20,465 bytes, 506 lines download raw bytes

1/**
2 * @file
3 * Cookie Compliance Javascript.
4 */
5
6(function ($) {
7  'use strict';
8  var euCookieComplianceBlockCookies;
9
10  Drupal.behaviors.eu_cookie_compliance_popup = {
11    attach: function (context, settings) {
12      $('body', context).once('eu-cookie-compliance', function () {
13        // If configured, check JSON callback to determine if in EU.
14        if (Drupal.settings.eu_cookie_compliance.popup_eu_only_js) {
15          if (Drupal.eu_cookie_compliance.showBanner()) {
16            var url = Drupal.settings.basePath + Drupal.settings.pathPrefix + 'eu-cookie-compliance-check';
17            var data = {};
18            $.getJSON(url, data, function (data) {
19              // If in the EU, show the compliance banner.
20              if (data.in_eu) {
21                Drupal.eu_cookie_compliance.execute();
22              }
23
24              // If not in EU, set an agreed cookie automatically.
25              else {
26                Drupal.eu_cookie_compliance.setStatus(2);
27              }
28            });
29          }
30        }
31
32        // Otherwise, fallback to standard behavior which is to render the banner.
33        else {
34          Drupal.eu_cookie_compliance.execute();
35        }
36      });
37    }
38  };
39
40  Drupal.eu_cookie_compliance = {};
41
42  Drupal.eu_cookie_compliance.execute = function () {
43    try {
44      if (!Drupal.settings.eu_cookie_compliance.popup_enabled) {
45        return;
46      }
47
48      if (!Drupal.eu_cookie_compliance.cookiesEnabled()) {
49        return;
50      }
51
52      Drupal.eu_cookie_compliance.updateCheck();
53      var status = Drupal.eu_cookie_compliance.getCurrentStatus();
54      if ((status === 0 && Drupal.settings.eu_cookie_compliance.method === 'default') || status === null) {
55        if (!Drupal.settings.eu_cookie_compliance.disagree_do_not_show_popup || status === null) {
56          // Detect mobile here and use mobile_popup_html_info, if we have a mobile device.
57          if (window.matchMedia('(max-width: ' + Drupal.settings.eu_cookie_compliance.mobile_breakpoint + 'px)').matches && Drupal.settings.eu_cookie_compliance.use_mobile_message) {
58            Drupal.eu_cookie_compliance.createPopup(Drupal.settings.eu_cookie_compliance.mobile_popup_html_info);
59          }
60          else {
61            Drupal.eu_cookie_compliance.createPopup(Drupal.settings.eu_cookie_compliance.popup_html_info);
62          }
63
64          Drupal.eu_cookie_compliance.attachAgreeEvents();
65        }
66      }
67      else if (status === 1 && Drupal.settings.eu_cookie_compliance.popup_agreed_enabled) {
68        Drupal.eu_cookie_compliance.createPopup(Drupal.settings.eu_cookie_compliance.popup_html_agreed);
69        Drupal.eu_cookie_compliance.attachHideEvents();
70      }
71      else if (status === 2 && Drupal.settings.eu_cookie_compliance.withdraw_enabled) {
72        Drupal.eu_cookie_compliance.createWithdrawBanner(Drupal.settings.eu_cookie_compliance.withdraw_markup);
73        Drupal.eu_cookie_compliance.attachWithdrawEvents();
74      }
75    }
76    catch (e) {
77    }
78  };
79
80  Drupal.eu_cookie_compliance.createWithdrawBanner = function (html) {
81    var $html = $('<div></div>').html(html);
82    var $banner = $('.eu-cookie-withdraw-banner', $html);
83    $html.attr('id', 'sliding-popup');
84    $html.addClass('eu-cookie-withdraw-wrapper');
85
86    if (!Drupal.settings.eu_cookie_compliance.popup_use_bare_css) {
87      $banner.height(Drupal.settings.eu_cookie_compliance.popup_height)
88          .width(Drupal.settings.eu_cookie_compliance.popup_width);
89    }
90    $html.hide();
91    var height = 0;
92    if (Drupal.settings.eu_cookie_compliance.popup_position) {
93      $html.prependTo('body');
94      height = $html.outerHeight();
95
96      $html.show()
97          .addClass('sliding-popup-top')
98          .addClass('clearfix')
99          .css({ top: -1 * height });
100      // For some reason, the tab outerHeight is -10 if we don't use a timeout
101      // function to reveal the tab.
102      setTimeout(function () {
103        $html.animate({ top: -1 * height }, Drupal.settings.eu_cookie_compliance.popup_delay, null, function () {
104          $html.trigger('eu_cookie_compliance_popup_open');
105        });
106      }.bind($html, height), 0);
107    }
108    else {
109      if (Drupal.settings.eu_cookie_compliance.better_support_for_screen_readers) {
110        $html.prependTo('body');
111      }
112      else {
113        $html.appendTo('body');
114      }
115      height = $html.outerHeight();
116      $html.show()
117          .addClass('sliding-popup-bottom')
118          .css({ bottom: -1 * height });
119      // For some reason, the tab outerHeight is -10 if we don't use a timeout
120      // function to reveal the tab.
121      setTimeout(function () {
122        $html.animate({ bottom: -1 * height }, Drupal.settings.eu_cookie_compliance.popup_delay, null, function () {
123          $html.trigger('eu_cookie_compliance_popup_open');
124        });
125      }.bind($html, height), 0);
126    }
127  };
128
129  Drupal.eu_cookie_compliance.toggleWithdrawBanner = function () {
130    var $wrapper = $('#sliding-popup');
131    var $tab = $('.eu-cookie-withdraw-tab');
132    var $bannerIsShowing = Drupal.settings.eu_cookie_compliance.popup_position ? parseInt($wrapper.css('top')) === 0 : parseInt($wrapper.css('bottom')) === 0;
133    var topBottom = (Drupal.settings.eu_cookie_compliance.popup_position ? 'top' : 'bottom');
134    var height = $wrapper.outerHeight();
135    if (Drupal.settings.eu_cookie_compliance.popup_position) {
136      if ($bannerIsShowing) {
137        $wrapper.animate({'top' : -1 * height}, Drupal.settings.eu_cookie_compliance.popup_delay);
138      }
139      else {
140        $wrapper.animate({'top' : 0}, Drupal.settings.eu_cookie_compliance.popup_delay);
141      }
142    }
143    else {
144      if ($bannerIsShowing) {
145        $wrapper.animate({'bottom' : -1 * height}, Drupal.settings.eu_cookie_compliance.popup_delay);
146      }
147      else {
148        $wrapper.animate({'bottom' : 0}, Drupal.settings.eu_cookie_compliance.popup_delay);
149      }
150    }
151  };
152
153  Drupal.eu_cookie_compliance.createPopup = function (html) {
154    // This fixes a problem with jQuery 1.9.
155    var $popup = $('<div></div>').html(html);
156    $popup.attr('id', 'sliding-popup');
157    if (!Drupal.settings.eu_cookie_compliance.popup_use_bare_css) {
158      $popup.height(Drupal.settings.eu_cookie_compliance.popup_height)
159          .width(Drupal.settings.eu_cookie_compliance.popup_width);
160    }
161
162    $popup.hide();
163    var height = 0;
164    if (Drupal.settings.eu_cookie_compliance.popup_position) {
165      $popup.prependTo('body');
166      height = $popup.outerHeight();
167      $popup.show()
168        .attr({ 'class': 'sliding-popup-top clearfix' })
169        .css({ top: -1 * height })
170        .animate({ top: 0 }, Drupal.settings.eu_cookie_compliance.popup_delay, null, function () {
171          $popup.trigger('eu_cookie_compliance_popup_open');
172        });
173    }
174    else {
175      if (Drupal.settings.eu_cookie_compliance.better_support_for_screen_readers) {
176        $popup.prependTo('body');
177      }
178      else {
179        $popup.appendTo('body');
180      }
181
182      height = $popup.outerHeight();
183      $popup.show()
184        .attr({ 'class': 'sliding-popup-bottom' })
185        .css({ bottom: -1 * height })
186        .animate({ bottom: 0 }, Drupal.settings.eu_cookie_compliance.popup_delay, null, function () {
187          $popup.trigger('eu_cookie_compliance_popup_open');
188        });
189    }
190  };
191
192  Drupal.eu_cookie_compliance.attachAgreeEvents = function () {
193    var clickingConfirms = Drupal.settings.eu_cookie_compliance.popup_clicking_confirmation;
194    var scrollConfirms = Drupal.settings.eu_cookie_compliance.popup_scrolling_confirmation;
195
196    $('.agree-button').click(Drupal.eu_cookie_compliance.acceptAction);
197    $('.decline-button').click(Drupal.eu_cookie_compliance.declineAction);
198
199    if (clickingConfirms) {
200      $('a, input[type=submit], button[type=submit]').not('.popup-content *').bind('click.euCookieCompliance', Drupal.eu_cookie_compliance.acceptAction);
201    }
202
203    if (scrollConfirms) {
204      var alreadyScrolled = false;
205      var scrollHandler = function () {
206        if (alreadyScrolled) {
207          Drupal.eu_cookie_compliance.acceptAction();
208          $(window).off('scroll', scrollHandler);
209        }
210        else {
211          alreadyScrolled = true;
212        }
213      };
214
215      $(window).bind('scroll', scrollHandler);
216    }
217
218    $('.find-more-button').not('.find-more-button-processed').addClass('find-more-button-processed').click(Drupal.eu_cookie_compliance.moreInfoAction);
219  };
220
221  Drupal.eu_cookie_compliance.attachHideEvents = function () {
222    var popupHideAgreed = Drupal.settings.eu_cookie_compliance.popup_hide_agreed;
223    var clickingConfirms = Drupal.settings.eu_cookie_compliance.popup_clicking_confirmation;
224    $('.hide-popup-button').click(function () {
225      Drupal.eu_cookie_compliance.changeStatus(2);
226    }
227    );
228    if (clickingConfirms) {
229      $('a, input[type=submit], button[type=submit]').unbind('click.euCookieCompliance');
230    }
231
232    if (popupHideAgreed) {
233      $('a, input[type=submit], button[type=submit]').bind('click.euCookieComplianceHideAgreed', function () {
234        Drupal.eu_cookie_compliance.changeStatus(2);
235      });
236    }
237
238    $('.find-more-button').not('.find-more-button-processed').addClass('find-more-button-processed').click(Drupal.eu_cookie_compliance.moreInfoAction);
239  };
240
241  Drupal.eu_cookie_compliance.attachWithdrawEvents = function () {
242    $('.eu-cookie-withdraw-button').click(Drupal.eu_cookie_compliance.withdrawAction);
243    $('.eu-cookie-withdraw-tab').click(Drupal.eu_cookie_compliance.toggleWithdrawBanner);
244  };
245
246  Drupal.eu_cookie_compliance.acceptAction = function () {
247    var agreedEnabled = Drupal.settings.eu_cookie_compliance.popup_agreed_enabled;
248    var nextStatus = 1;
249    if (!agreedEnabled) {
250      Drupal.eu_cookie_compliance.setStatus(1);
251      nextStatus = 2;
252    }
253
254    if (!euCookieComplianceHasLoadedScripts) {
255      euCookieComplianceLoadScripts();
256    }
257
258    if (typeof euCookieComplianceBlockCookies !== 'undefined') {
259      clearInterval(euCookieComplianceBlockCookies);
260    }
261
262    Drupal.eu_cookie_compliance.changeStatus(nextStatus);
263  };
264
265  Drupal.eu_cookie_compliance.declineAction = function () {
266    Drupal.eu_cookie_compliance.setStatus(0);
267    var popup = $('#sliding-popup');
268    if (popup.hasClass('sliding-popup-top')) {
269      popup.animate({ top: popup.outerHeight() * -1 }).trigger('eu_cookie_compliance_popup_close');
270    }
271    else {
272      popup.animate({ bottom: popup.outerHeight() * -1 }).trigger('eu_cookie_compliance_popup_close');
273    }
274  };
275
276  Drupal.eu_cookie_compliance.withdrawAction = function () {
277    Drupal.eu_cookie_compliance.setStatus(0);
278
279    location.reload();
280  };
281
282  Drupal.eu_cookie_compliance.moreInfoAction = function () {
283    if (Drupal.settings.eu_cookie_compliance.disagree_do_not_show_popup) {
284      Drupal.eu_cookie_compliance.setStatus(0);
285      $('#sliding-popup').trigger('eu_cookie_compliance_popup_close').remove();
286    }
287    else {
288      if (Drupal.settings.eu_cookie_compliance.popup_link_new_window) {
289        window.open(Drupal.settings.eu_cookie_compliance.popup_link);
290      }
291      else {
292        window.location.href = Drupal.settings.eu_cookie_compliance.popup_link;
293      }
294    }
295  };
296
297  Drupal.eu_cookie_compliance.getCurrentStatus = function () {
298    var cookieName = (typeof eu_cookie_compliance_cookie_name === 'undefined' || eu_cookie_compliance_cookie_name === '') ? 'cookie-agreed' : eu_cookie_compliance_cookie_name;
299    var value = $.cookie(cookieName);
300    value = parseInt(value);
301    if (isNaN(value)) {
302      value = null;
303    }
304
305    return value;
306  };
307
308  Drupal.eu_cookie_compliance.changeStatus = function (value) {
309    var status = Drupal.eu_cookie_compliance.getCurrentStatus();
310    var reloadPage = Drupal.settings.eu_cookie_compliance.reload_page;
311    if (status === value) {
312      return;
313    }
314
315    if (Drupal.settings.eu_cookie_compliance.popup_position) {
316      $('.sliding-popup-top').animate({ top: $('#sliding-popup').outerHeight() * -1 }, Drupal.settings.eu_cookie_compliance.popup_delay, function () {
317        if (status === null && !reloadPage) {
318          $('#sliding-popup').html(Drupal.settings.eu_cookie_compliance.popup_html_agreed).animate({ top: 0 }, Drupal.settings.eu_cookie_compliance.popup_delay);
319          Drupal.eu_cookie_compliance.attachHideEvents();
320        }
321        else if (status === 1) {
322          $('#sliding-popup').trigger('eu_cookie_compliance_popup_close').remove();
323        }
324      });
325    }
326    else {
327      $('.sliding-popup-bottom').animate({ bottom: $('#sliding-popup').outerHeight() * -1 }, Drupal.settings.eu_cookie_compliance.popup_delay, function () {
328        if (status === null && !reloadPage) {
329          $('#sliding-popup').html(Drupal.settings.eu_cookie_compliance.popup_html_agreed).animate({ bottom: 0 }, Drupal.settings.eu_cookie_compliance.popup_delay);
330          Drupal.eu_cookie_compliance.attachHideEvents();
331        }
332        else if (status === 1) {
333          $('#sliding-popup').trigger('eu_cookie_compliance_popup_close').remove();
334        }
335      });
336    }
337
338    if (reloadPage) {
339      location.reload();
340    }
341
342    if (value === 2 && Drupal.settings.eu_cookie_compliance.withdraw_enabled) {
343      Drupal.eu_cookie_compliance.createWithdrawBanner(Drupal.settings.eu_cookie_compliance.withdraw_markup);
344      Drupal.eu_cookie_compliance.attachWithdrawEvents();
345    }
346
347    Drupal.eu_cookie_compliance.setStatus(value);
348  };
349
350  Drupal.eu_cookie_compliance.setStatus = function (status) {
351    var date = new Date();
352    var domain = Drupal.settings.eu_cookie_compliance.domain ? Drupal.settings.eu_cookie_compliance.domain : '';
353    var path = Drupal.settings.basePath;
354    var cookieName = (typeof eu_cookie_compliance_cookie_name === 'undefined' || eu_cookie_compliance_cookie_name === '') ? 'cookie-agreed' : eu_cookie_compliance_cookie_name;
355    if (path.length > 1) {
356      var pathEnd = path.length - 1;
357      if (path.lastIndexOf('/') === pathEnd) {
358        path = path.substring(0, pathEnd);
359      }
360    }
361
362    var cookieSession = parseInt(Drupal.settings.eu_cookie_compliance.cookie_session);
363    if (cookieSession) {
364      $.cookie(cookieName, status, { path: path, domain: domain });
365    }
366    else {
367      var lifetime = parseInt(Drupal.settings.eu_cookie_compliance.cookie_lifetime);
368      date.setDate(date.getDate() + lifetime);
369      $.cookie(cookieName, status, { expires: date, path: path, domain: domain });
370    }
371    $(document).trigger('eu_cookie_compliance.changeStatus', [status]);
372
373    // Store consent if applicable.
374    if (Drupal.settings.eu_cookie_compliance.store_consent && ((status === 1 && Drupal.settings.eu_cookie_compliance.popup_agreed_enabled) || (status === 2  && !Drupal.settings.eu_cookie_compliance.popup_agreed_enabled))) {
375      var url = Drupal.settings.basePath + Drupal.settings.pathPrefix + 'eu-cookie-compliance/store_consent/banner';
376      $.post(url, {}, function (data) { });
377    }
378  };
379
380  Drupal.eu_cookie_compliance.hasAgreed = function () {
381    var status = Drupal.eu_cookie_compliance.getCurrentStatus();
382    return (status === 1 || status === 2);
383  };
384
385  Drupal.eu_cookie_compliance.showBanner = function () {
386    var showBanner = false;
387    var status = Drupal.eu_cookie_compliance.getCurrentStatus();
388    if ((status === 0 && Drupal.settings.eu_cookie_compliance.method === 'default') || status === null) {
389      if (!Drupal.settings.eu_cookie_compliance.disagree_do_not_show_popup || status === null) {
390        showBanner = true;
391      }
392    }
393    else if (status === 1 && Drupal.settings.eu_cookie_compliance.popup_agreed_enabled) {
394      showBanner = true;
395    }
396
397    return showBanner;
398  };
399
400  Drupal.eu_cookie_compliance.cookiesEnabled = function () {
401    var cookieEnabled = navigator.cookieEnabled;
402    if (typeof navigator.cookieEnabled === 'undefined' && !cookieEnabled) {
403      document.cookie = 'testCookie';
404      cookieEnabled = (document.cookie.indexOf('testCookie') !== -1);
405    }
406
407    return cookieEnabled;
408  };
409
410  // This code upgrades the cookie agreed status when upgrading for an old version.
411  Drupal.eu_cookie_compliance.updateCheck = function () {
412    var legacyCookie = 'cookie-agreed-' + Drupal.settings.eu_cookie_compliance.popup_language;
413    var domain = Drupal.settings.eu_cookie_compliance.domain ? Drupal.settings.eu_cookie_compliance.domain : '';
414    var path = Drupal.settings.basePath;
415    var cookie = $.cookie(legacyCookie);
416    var date = new Date();
417    var cookieName = (typeof eu_cookie_compliance_cookie_name === 'undefined' || eu_cookie_compliance_cookie_name === '') ? 'cookie-agreed' : eu_cookie_compliance_cookie_name;
418
419    // jQuery.cookie 1.0 (bundled with Drupal) returns null,
420    // jQuery.cookie 1.4.1 (bundled with some themes) returns undefined.
421    // We had a 1.4.1 related bug where the value was set to 'null' (string).
422    if (cookie !== undefined && cookie !== null && cookie !== 'null') {
423      date.setDate(date.getDate() + parseInt(Drupal.settings.eu_cookie_compliance.cookie_lifetime));
424      $.cookie(cookieName, cookie, { expires: date, path:  path, domain: domain });
425
426      // Use removeCookie if the function exists.
427      if (typeof $.removeCookie !== 'undefined') {
428        $.removeCookie(legacyCookie);
429      }
430      else {
431        $.cookie(legacyCookie, null, { path: path, domain: domain });
432      }
433    }
434  };
435
436  // Load blocked scripts if the user has agreed to being tracked.
437  var euCookieComplianceHasLoadedScripts = false;
438  $(function () {
439    if (Drupal.eu_cookie_compliance.hasAgreed()
440        || (Drupal.eu_cookie_compliance.getCurrentStatus() === null && Drupal.settings.eu_cookie_compliance.method !== 'opt_in')
441    ) {
442      euCookieComplianceLoadScripts();
443      euCookieComplianceHasLoadedScripts = true;
444    }
445  });
446
447  // Block cookies when the user hasn't agreed.
448  Drupal.behaviors.eu_cookie_compliance_popup_block_cookies = {
449    initialized: false,
450    attach: function (context, settings) {
451      if (!Drupal.behaviors.eu_cookie_compliance_popup_block_cookies.initialized && settings.eu_cookie_compliance) {
452        Drupal.behaviors.eu_cookie_compliance_popup_block_cookies.initialized = true;
453        if ((settings.eu_cookie_compliance.method === 'opt_in' && (Drupal.eu_cookie_compliance.getCurrentStatus() === null || !Drupal.eu_cookie_compliance.hasAgreed()))
454          || (settings.eu_cookie_compliance.method === 'opt_out' && !Drupal.eu_cookie_compliance.hasAgreed() && Drupal.eu_cookie_compliance.getCurrentStatus() !== null)
455        ) {
456          // Split the white-listed cookies.
457          var euCookieComplianceWhitelist = settings.eu_cookie_compliance.whitelisted_cookies.split(/\r\n|\n|\r/g);
458
459          // Add the EU Cookie Compliance cookie.
460          euCookieComplianceWhitelist.push((typeof settings.eu_cookie_compliance.cookie_name === 'undefined' || settings.eu_cookie_compliance.cookie_name === '') ? 'cookie-agreed' : settings.eu_cookie_compliance.cookie_name);
461          euCookieComplianceBlockCookies = setInterval(function () {
462            // Load all cookies from jQuery.
463            var cookies = $.cookie();
464
465            // Check each cookie and try to remove it if it's not white-listed.
466            for (var i in cookies) {
467              var remove = true;
468              var hostname = window.location.hostname;
469              var cookieRemoved = false;
470              var index = 0;
471
472              // Skip the PHP session cookie.
473              if (i.indexOf('SESS') === 0 || i.indexOf('SSESS') === 0) {
474                remove = false;
475              }
476
477              // Check if the cookie is white-listed.
478              for (var item in euCookieComplianceWhitelist) {
479                if (i === euCookieComplianceWhitelist[item]) {
480                  remove = false;
481                }
482              }
483
484              // Remove the cookie if it's not white-listed.
485              if (remove) {
486                while (!cookieRemoved && hostname !== '') {
487                  // Attempt to remove.
488                  cookieRemoved = $.removeCookie(i, { domain: '.' + hostname, path: '/' });
489                  if (!cookieRemoved) {
490                    cookieRemoved = $.removeCookie(i, { domain: hostname, path: '/' });
491                  }
492
493                  index = hostname.indexOf('.');
494
495                  // We can be on a sub-domain, so keep checking the main domain as well.
496                  hostname = (index === -1) ? '' : hostname.substring(index + 1);
497                }
498              }
499            }
500          }, 5000);
501        }
502      }
503    }
504  }
505
506})(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.