PageSourceSearch

https://www.bsc.es/sites/all/modules/eu-cookie-compliance/js/eu_cookie_compliance.js?tm2sai

js bsc.es collected 2026-10-01 09:19:44 UTC 33,246 bytes, 732 lines download raw bytes

1/**
2 * @file
3 * Cookie Compliance Javascript.
4 *
5 * Statuses:
6 *  null: not yet agreed (or withdrawn), show popup
7 *  0: Disagreed
8 *  1: Agreed, show thank you banner
9 *  2: Agreed
10 */
11
12(function ($) {
13  'use strict';
14  var euCookieComplianceBlockCookies;
15
16  Drupal.behaviors.eu_cookie_compliance_popup = {
17    attach: function (context, settings) {
18      $('body', context).once('eu-cookie-compliance', function () {
19        // If configured, check JSON callback to determine if in EU.
20        if (Drupal.settings.eu_cookie_compliance.popup_eu_only_js) {
21          if (Drupal.eu_cookie_compliance.showBanner()) {
22            var url = Drupal.settings.basePath + Drupal.settings.pathPrefix + 'eu-cookie-compliance-check';
23            var data = {};
24            $.getJSON(url, data, function (data) {
25              // If in the EU, show the compliance banner.
26              if (data.in_eu) {
27                Drupal.eu_cookie_compliance.execute();
28              }
29
30              // If not in EU, set an agreed cookie automatically.
31              else {
32                Drupal.eu_cookie_compliance.setStatus(2);
33              }
34            });
35          }
36        }
37
38        // Otherwise, fallback to standard behavior which is to render the banner.
39        else {
40          Drupal.eu_cookie_compliance.execute();
41        }
42      });
43    }
44  };
45
46  Drupal.eu_cookie_compliance = {};
47
48  Drupal.eu_cookie_compliance.execute = function () {
49    try {
50      if (!Drupal.settings.eu_cookie_compliance.popup_enabled) {
51        return;
52      }
53
54      if (!Drupal.eu_cookie_compliance.cookiesEnabled()) {
55        return;
56      }
57
58      Drupal.eu_cookie_compliance.updateCheck();
59      var status = Drupal.eu_cookie_compliance.getCurrentStatus();
60      if ((status === 0 && Drupal.settings.eu_cookie_compliance.method === 'default') || status === null || (Drupal.settings.eu_cookie_compliance.withdraw_enabled && Drupal.settings.eu_cookie_compliance.withdraw_button_on_info_popup)) {
61        if (!Drupal.settings.eu_cookie_compliance.disagree_do_not_show_popup || status === null) {
62          // Detect mobile here and use mobile_popup_html_info, if we have a mobile device.
63          if (window.matchMedia('(max-width: ' + Drupal.settings.eu_cookie_compliance.mobile_breakpoint + 'px)').matches && Drupal.settings.eu_cookie_compliance.use_mobile_message) {
64            Drupal.eu_cookie_compliance.createPopup(Drupal.settings.eu_cookie_compliance.mobile_popup_html_info, (status !== null));
65          }
66          else {
67            Drupal.eu_cookie_compliance.createPopup(Drupal.settings.eu_cookie_compliance.popup_html_info, (status !== null));
68          }
69
70          Drupal.eu_cookie_compliance.initPopup();
71        }
72      }
73      if (status === 1 && Drupal.settings.eu_cookie_compliance.popup_agreed_enabled) {
74        // Thank you banner.
75        Drupal.eu_cookie_compliance.createPopup(Drupal.settings.eu_cookie_compliance.popup_html_agreed);
76        Drupal.eu_cookie_compliance.attachHideEvents();
77      }
78      else if (status === 2 && Drupal.settings.eu_cookie_compliance.withdraw_enabled) {
79        if (!Drupal.settings.eu_cookie_compliance.withdraw_button_on_info_popup) {
80          Drupal.eu_cookie_compliance.createWithdrawBanner(Drupal.settings.eu_cookie_compliance.withdraw_markup);
81        }
82        Drupal.eu_cookie_compliance.attachWithdrawEvents();
83      }
84    }
85    catch (e) {
86    }
87  };
88
89  Drupal.eu_cookie_compliance.initPopup = function() {
90    Drupal.eu_cookie_compliance.attachAgreeEvents();
91
92    if (Drupal.settings.eu_cookie_compliance.method === 'categories') {
93      var categories_checked = [];
94
95      if (Drupal.eu_cookie_compliance.getCurrentStatus() === null) {
96        if (Drupal.settings.eu_cookie_compliance.select_all_categories_by_default) {
97          categories_checked = Drupal.settings.eu_cookie_compliance.cookie_categories;
98        }
99      }
100      else {
101        categories_checked = Drupal.eu_cookie_compliance.getAcceptedCategories();
102      }
103      Drupal.eu_cookie_compliance.setPreferenceCheckboxes(categories_checked);
104      Drupal.eu_cookie_compliance.attachSavePreferencesEvents();
105    }
106
107    if (Drupal.settings.eu_cookie_compliance.withdraw_enabled && Drupal.settings.eu_cookie_compliance.withdraw_button_on_info_popup) {
108      Drupal.eu_cookie_compliance.attachWithdrawEvents();
109      var currentStatus = Drupal.eu_cookie_compliance.getCurrentStatus();
110      if (currentStatus === 1 || currentStatus === 2) {
111        $('.eu-cookie-withdraw-button').show();
112      }
113    }
114  }
115
116  Drupal.eu_cookie_compliance.createWithdrawBanner = function (html) {
117    var $html = $('<div></div>').html(html);
118    var $banner = $('.eu-cookie-withdraw-banner', $html);
119    $html.attr('id', 'sliding-popup');
120    $html.addClass('eu-cookie-withdraw-wrapper');
121
122    if (!Drupal.settings.eu_cookie_compliance.popup_use_bare_css) {
123      $banner.height(Drupal.settings.eu_cookie_compliance.popup_height)
124          .width(Drupal.settings.eu_cookie_compliance.popup_width);
125    }
126    $html.hide();
127    var height = 0;
128    if (Drupal.settings.eu_cookie_compliance.popup_position) {
129      $html.prependTo('body');
130      height = $html.outerHeight();
131
132      $html.show()
133          .addClass('sliding-popup-top')
134          .addClass('clearfix')
135          .css({ top: !Drupal.settings.eu_cookie_compliance.fixed_top_position ? -(parseInt($('body').css('padding-top')) + parseInt($('body').css('margin-top')) + height) : -1 * height });
136      // For some reason, the tab outerHeight is -10 if we don't use a timeout
137      // function to reveal the tab.
138      setTimeout(function () {
139        $html.animate({ top: !Drupal.settings.eu_cookie_compliance.fixed_top_position ? -(parseInt($('body').css('padding-top')) + parseInt($('body').css('margin-top')) + height) : -1 * height }, Drupal.settings.eu_cookie_compliance.popup_delay, null, function () {
140          $html.trigger('eu_cookie_compliance_popup_open');
141        });
142      }.bind($html, height), 0);
143    }
144    else {
145      if (Drupal.settings.eu_cookie_compliance.better_support_for_screen_readers) {
146        $html.prependTo('body');
147      }
148      else {
149        $html.appendTo('body');
150      }
151      height = $html.outerHeight();
152      $html.show()
153          .addClass('sliding-popup-bottom')
154          .css({ bottom: -1 * height });
155      // For some reason, the tab outerHeight is -10 if we don't use a timeout
156      // function to reveal the tab.
157      setTimeout(function () {
158        $html.animate({ bottom: -1 * height }, Drupal.settings.eu_cookie_compliance.popup_delay, null, function () {
159          $html.trigger('eu_cookie_compliance_popup_open');
160        });
161      }.bind($html, height), 0);
162    }
163  };
164
165  Drupal.eu_cookie_compliance.toggleWithdrawBanner = function () {
166    var $wrapper = $('#sliding-popup');
167    var $tab = $('.eu-cookie-withdraw-tab');
168    var topBottom = (Drupal.settings.eu_cookie_compliance.popup_position ? 'top' : 'bottom');
169    var height = $wrapper.outerHeight();
170    var $bannerIsShowing = Drupal.settings.eu_cookie_compliance.popup_position ? parseInt($wrapper.css('top')) === (!Drupal.settings.eu_cookie_compliance.fixed_top_position ? -(parseInt($('body').css('padding-top')) + parseInt($('body').css('margin-top'))) : 0) : parseInt($wrapper.css('bottom')) === 0;
171    if (Drupal.settings.eu_cookie_compliance.popup_position) {
172      if ($bannerIsShowing) {
173        $wrapper.animate({ top: !Drupal.settings.eu_cookie_compliance.fixed_top_position ? -(parseInt($('body').css('padding-top')) + parseInt($('body').css('margin-top')) + height) : -1 * height}, Drupal.settings.eu_cookie_compliance.popup_delay);
174      }
175      else {
176        $wrapper.animate({ top: !Drupal.settings.eu_cookie_compliance.fixed_top_position ? -(parseInt($('body').css('padding-top')) + parseInt($('body').css('margin-top'))) : 0}, Drupal.settings.eu_cookie_compliance.popup_delay);
177      }
178    }
179    else {
180      if ($bannerIsShowing) {
181        $wrapper.animate({'bottom' : -1 * height}, Drupal.settings.eu_cookie_compliance.popup_delay);
182      }
183      else {
184        $wrapper.animate({'bottom' : 0}, Drupal.settings.eu_cookie_compliance.popup_delay);
185      }
186    }
187  };
188
189  Drupal.eu_cookie_compliance.createPopup = function (html, closed) {
190    // This fixes a problem with jQuery 1.9.
191    var $popup = $('<div></div>').html(html);
192    $popup.attr('id', 'sliding-popup');
193    if (!Drupal.settings.eu_cookie_compliance.popup_use_bare_css) {
194      $popup.height(Drupal.settings.eu_cookie_compliance.popup_height)
195          .width(Drupal.settings.eu_cookie_compliance.popup_width);
196    }
197
198    $popup.hide();
199    var height = 0;
200    if (Drupal.settings.eu_cookie_compliance.popup_position) {
201      $popup.prependTo('body');
202      height = $popup.outerHeight();
203      $popup.show()
204        .attr({ 'class': 'sliding-popup-top clearfix' })
205        .css({ top: !Drupal.settings.eu_cookie_compliance.fixed_top_position ? -(parseInt($('body').css('padding-top')) + parseInt($('body').css('margin-top')) + height) : -1 * height });
206      if (closed !== true) {
207        $popup.animate({ top: !Drupal.settings.eu_cookie_compliance.fixed_top_position ? -(parseInt($('body').css('padding-top')) + parseInt($('body').css('margin-top'))) : 0 }, Drupal.settings.eu_cookie_compliance.popup_delay, null, function () {
208          $popup.trigger('eu_cookie_compliance_popup_open');
209        });
210      }
211    }
212    else {
213      if (Drupal.settings.eu_cookie_compliance.better_support_for_screen_readers) {
214        $popup.prependTo('body');
215      }
216      else {
217        $popup.appendTo('body');
218      }
219
220      height = $popup.outerHeight();
221      $popup.show()
222        .attr({ 'class': 'sliding-popup-bottom' })
223        .css({ bottom: -1 * height });
224      if (closed !== true) {
225        $popup.animate({bottom: 0}, Drupal.settings.eu_cookie_compliance.popup_delay, null, function () {
226          $popup.trigger('eu_cookie_compliance_popup_open');
227        });
228      }
229    }
230  };
231
232  Drupal.eu_cookie_compliance.attachAgreeEvents = function () {
233    var clickingConfirms = Drupal.settings.eu_cookie_compliance.popup_clicking_confirmation;
234    var scrollConfirms = Drupal.settings.eu_cookie_compliance.popup_scrolling_confirmation;
235
236    if (Drupal.settings.eu_cookie_compliance.method === 'categories' && Drupal.settings.eu_cookie_compliance.enable_save_preferences_button) {
237      // The agree button becomes an agree to all categories button when the 'save preferences' button is present.
238      $('.agree-button').click(Drupal.eu_cookie_compliance.acceptAllAction);
239    }
240    else {
241      $('.agree-button').click(Drupal.eu_cookie_compliance.acceptAction);
242    }
243    $('.decline-button').click(Drupal.eu_cookie_compliance.declineAction);
244
245    if (clickingConfirms) {
246      $('a, input[type=submit], button[type=submit]').not('.popup-content *').bind('click.euCookieCompliance', Drupal.eu_cookie_compliance.acceptAction);
247    }
248
249    if (scrollConfirms) {
250      var alreadyScrolled = false;
251      var scrollHandler = function () {
252        if (alreadyScrolled) {
253          Drupal.eu_cookie_compliance.acceptAction();
254          $(window).off('scroll', scrollHandler);
255        }
256        else {
257          alreadyScrolled = true;
258        }
259      };
260
261      $(window).bind('scroll', scrollHandler);
262    }
263
264    $('.find-more-button').not('.find-more-button-processed').addClass('find-more-button-processed').click(Drupal.eu_cookie_compliance.moreInfoAction);
265  };
266
267  Drupal.eu_cookie_compliance.attachSavePreferencesEvents = function () {
268    $('.eu-cookie-compliance-save-preferences-button').click(Drupal.eu_cookie_compliance.savePreferencesAction);
269  };
270
271  Drupal.eu_cookie_compliance.attachHideEvents = function () {
272    var popupHideAgreed = Drupal.settings.eu_cookie_compliance.popup_hide_agreed;
273    var clickingConfirms = Drupal.settings.eu_cookie_compliance.popup_clicking_confirmation;
274    $('.hide-popup-button').click(function () {
275      Drupal.eu_cookie_compliance.changeStatus(2);
276    }
277    );
278    if (clickingConfirms) {
279      $('a, input[type=submit], button[type=submit]').unbind('click.euCookieCompliance');
280    }
281
282    if (popupHideAgreed) {
283      $('a, input[type=submit], button[type=submit]').bind('click.euCookieComplianceHideAgreed', function () {
284        Drupal.eu_cookie_compliance.changeStatus(2);
285      });
286    }
287
288    $('.find-more-button').not('.find-more-button-processed').addClass('find-more-button-processed').click(Drupal.eu_cookie_compliance.moreInfoAction);
289  };
290
291  Drupal.eu_cookie_compliance.attachWithdrawEvents = function () {
292    $('.eu-cookie-withdraw-button').click(Drupal.eu_cookie_compliance.withdrawAction);
293    $('.eu-cookie-withdraw-tab').click(Drupal.eu_cookie_compliance.toggleWithdrawBanner);
294  };
295
296  Drupal.eu_cookie_compliance.acceptAction = function () {
297    var agreedEnabled = Drupal.settings.eu_cookie_compliance.popup_agreed_enabled;
298    var nextStatus = 1;
299    if (!agreedEnabled) {
300      Drupal.eu_cookie_compliance.setStatus(1);
301      nextStatus = 2;
302    }
303
304    if (!euCookieComplianceHasLoadedScripts && typeof euCookieComplianceLoadScripts === "function") {
305      euCookieComplianceLoadScripts();
306    }
307
308    if (typeof euCookieComplianceBlockCookies !== 'undefined') {
309      clearInterval(euCookieComplianceBlockCookies);
310    }
311
312    if (Drupal.settings.eu_cookie_compliance.method === 'categories') {
313      // Select Checked categories.
314      var categories = $("#eu-cookie-compliance-categories input:checkbox:checked").map(function(){
315        return $(this).val();
316      }).get();
317      Drupal.eu_cookie_compliance.setAcceptedCategories(categories);
318      // Load scripts for all categories.
319      Drupal.eu_cookie_compliance.loadCategoryScripts(categories);
320    }
321
322    Drupal.eu_cookie_compliance.changeStatus(nextStatus);
323  };
324
325  Drupal.eu_cookie_compliance.acceptAllAction = function () {
326    var allCategories = Drupal.settings.eu_cookie_compliance.cookie_categories;
327    Drupal.eu_cookie_compliance.setPreferenceCheckboxes(allCategories);
328    Drupal.eu_cookie_compliance.acceptAction();
329  }
330
331  Drupal.eu_cookie_compliance.savePreferencesAction = function () {
332    var categories = $("#eu-cookie-compliance-categories input:checkbox:checked").map(function(){
333      return $(this).val();
334    }).get();
335    var agreedEnabled = Drupal.settings.eu_cookie_compliance.popup_agreed_enabled;
336    var nextStatus = 1;
337    if (!agreedEnabled) {
338      Drupal.eu_cookie_compliance.setStatus(1);
339      nextStatus = 2;
340    }
341
342    Drupal.eu_cookie_compliance.setAcceptedCategories(categories);
343    if (!euCookieComplianceHasLoadedScripts && typeof euCookieComplianceLoadScripts === "function") {
344      euCookieComplianceLoadScripts();
345    }
346    Drupal.eu_cookie_compliance.loadCategoryScripts(categories);
347    Drupal.eu_cookie_compliance.changeStatus(nextStatus);
348  };
349
350  Drupal.eu_cookie_compliance.loadCategoryScripts = function(categories) {
351    for (var cat in categories) {
352      if (euCookieComplianceHasLoadedScriptsForCategory[cat] !== true && typeof euCookieComplianceLoadScripts === "function") {
353        euCookieComplianceLoadScripts(categories[cat]);
354        euCookieComplianceHasLoadedScriptsForCategory[cat] = true;
355      }
356    }
357  }
358
359  Drupal.eu_cookie_compliance.declineAction = function () {
360    Drupal.eu_cookie_compliance.setStatus(0);
361    var popup = $('#sliding-popup');
362    if (popup.hasClass('sliding-popup-top')) {
363      popup.animate({ top: !Drupal.settings.eu_cookie_compliance.fixed_top_position ? -(parseInt($('body').css('padding-top')) + parseInt($('body').css('margin-top')) + popup.outerHeight()) : popup.outerHeight() * -1 }, Drupal.settings.eu_cookie_compliance.popup_delay, null, function () {
364        popup.hide();
365      }).trigger('eu_cookie_compliance_popup_close');
366    }
367    else {
368      popup.animate({ bottom: popup.outerHeight() * -1 }, Drupal.settings.eu_cookie_compliance.popup_delay, null, function () {
369        popup.hide();
370      }).trigger('eu_cookie_compliance_popup_close');
371    }
372  };
373
374  Drupal.eu_cookie_compliance.withdrawAction = function () {
375    Drupal.eu_cookie_compliance.setStatus(0);
376    Drupal.eu_cookie_compliance.setAcceptedCategories([]);
377    location.reload();
378  };
379
380  Drupal.eu_cookie_compliance.moreInfoAction = function () {
381    if (Drupal.settings.eu_cookie_compliance.disagree_do_not_show_popup) {
382      Drupal.eu_cookie_compliance.setStatus(0);
383      if (Drupal.settings.eu_cookie_compliance.withdraw_enabled && Drupal.settings.eu_cookie_compliance.withdraw_button_on_info_popup) {
384        $('#sliding-popup .eu-cookie-compliance-banner').trigger('eu_cookie_compliance_popup_close').hide();
385      }
386      else {
387        $('#sliding-popup').trigger('eu_cookie_compliance_popup_close').remove();
388      }
389    }
390    else {
391      if (Drupal.settings.eu_cookie_compliance.popup_link_new_window) {
392        window.open(Drupal.settings.eu_cookie_compliance.popup_link);
393      }
394      else {
395        window.location.href = Drupal.settings.eu_cookie_compliance.popup_link;
396      }
397    }
398  };
399
400  Drupal.eu_cookie_compliance.getCurrentStatus = function () {
401    var cookieName = (typeof eu_cookie_compliance_cookie_name === 'undefined' || eu_cookie_compliance_cookie_name === '') ? 'cookie-agreed' : eu_cookie_compliance_cookie_name;
402    var value = $.cookie(cookieName);
403    value = parseInt(value);
404    if (isNaN(value)) {
405      value = null;
406    }
407
408    return value;
409  };
410
411  Drupal.eu_cookie_compliance.setPreferenceCheckboxes = function (categories) {
412    for (var i in categories) {
413      $("#eu-cookie-compliance-categories input:checkbox[value='" + categories[i] + "']").prop("checked", true);
414    }
415  }
416
417  Drupal.eu_cookie_compliance.getAcceptedCategories = function () {
418    var allCategories = Drupal.settings.eu_cookie_compliance.cookie_categories;
419    var cookieName = (typeof eu_cookie_compliance_cookie_name === 'undefined' || eu_cookie_compliance_cookie_name === '') ? 'cookie-agreed-categories' : Drupal.settings.eu_cookie_compliance.cookie_name + '-categories';
420    var value = $.cookie(cookieName);
421    var selectedCategories = [];
422
423    if (value !== null && typeof value !== 'undefined') {
424      value = JSON.parse(value);
425      selectedCategories = value;
426    }
427
428    if (Drupal.eu_cookie_compliance.fix_first_cookie_category && !$.inArray(allCategories[0], selectedCategories)) {
429      selectedCategories.push(allCategories[0]);
430    }
431
432    return selectedCategories;
433  };
434
435  Drupal.eu_cookie_compliance.changeStatus = function (value) {
436    var status = Drupal.eu_cookie_compliance.getCurrentStatus();
437    var reloadPage = Drupal.settings.eu_cookie_compliance.reload_page;
438    if (status === value) {
439      return;
440    }
441
442    if (Drupal.settings.eu_cookie_compliance.popup_position) {
443      $('.sliding-popup-top').animate({ top: !Drupal.settings.eu_cookie_compliance.fixed_top_position ? -(parseInt($('body').css('padding-top')) + parseInt($('body').css('margin-top')) + $('#sliding-popup').outerHeight()) : $('#sliding-popup').outerHeight() * -1 }, Drupal.settings.eu_cookie_compliance.popup_delay, function () {
444        if (value === 1 && status === null && !reloadPage) {
445          $('.sliding-popup-top').not('.eu-cookie-withdraw-wrapper').html(Drupal.settings.eu_cookie_compliance.popup_html_agreed).animate({ top: !Drupal.settings.eu_cookie_compliance.fixed_top_position ? -(parseInt($('body').css('padding-top')) + parseInt($('body').css('margin-top'))) : 0 }, Drupal.settings.eu_cookie_compliance.popup_delay);
446          Drupal.eu_cookie_compliance.attachHideEvents();
447        } else if (status === 1 && !(Drupal.settings.eu_cookie_compliance.withdraw_enabled && Drupal.settings.eu_cookie_compliance.withdraw_button_on_info_popup)) {
448          $('.sliding-popup-top').not('.eu-cookie-withdraw-wrapper').trigger('eu_cookie_compliance_popup_close').remove();
449        }
450        Drupal.eu_cookie_compliance.showWithdrawBanner(value);
451      });
452    }
453    else {
454      $('.sliding-popup-bottom').animate({ bottom: $('#sliding-popup').outerHeight() * -1 }, Drupal.settings.eu_cookie_compliance.popup_delay, function () {
455        if (value === 1 && status === null && !reloadPage) {
456          $('.sliding-popup-bottom').not('.eu-cookie-withdraw-wrapper').html(Drupal.settings.eu_cookie_compliance.popup_html_agreed).animate({ bottom: 0 }, Drupal.settings.eu_cookie_compliance.popup_delay);
457          Drupal.eu_cookie_compliance.attachHideEvents();
458        }
459        else if (status === 1) {
460          if (Drupal.settings.eu_cookie_compliance.withdraw_enabled && Drupal.settings.eu_cookie_compliance.withdraw_button_on_info_popup) {
461            // Restore popup content.
462            if (window.matchMedia('(max-width: ' + Drupal.settings.eu_cookie_compliance.mobile_breakpoint + 'px)').matches && Drupal.settings.eu_cookie_compliance.use_mobile_message) {
463              $('.sliding-popup-bottom').not('.eu-cookie-withdraw-wrapper').html(Drupal.settings.eu_cookie_compliance.mobile_popup_html_info);
464            } else {
465              $('.sliding-popup-bottom').not('.eu-cookie-withdraw-wrapper').html(Drupal.settings.eu_cookie_compliance.popup_html_info);
466            }
467            Drupal.eu_cookie_compliance.initPopup();
468          }
469          else {
470            $('.sliding-popup-bottom').not('.eu-cookie-withdraw-wrapper').trigger('eu_cookie_compliance_popup_close').remove();
471          }
472        }
473        Drupal.eu_cookie_compliance.showWithdrawBanner(value);
474      });
475    }
476
477    if (reloadPage) {
478      location.reload();
479    }
480
481    Drupal.eu_cookie_compliance.setStatus(value);
482  };
483
484  Drupal.eu_cookie_compliance.showWithdrawBanner = function (value) {
485    if (value === 2 && Drupal.settings.eu_cookie_compliance.withdraw_enabled) {
486      if (!Drupal.settings.eu_cookie_compliance.withdraw_button_on_info_popup) {
487        Drupal.eu_cookie_compliance.createWithdrawBanner(Drupal.settings.eu_cookie_compliance.withdraw_markup);
488      }
489      Drupal.eu_cookie_compliance.attachWithdrawEvents();
490    }
491  };
492
493  Drupal.eu_cookie_compliance.setStatus = function (status) {
494    var date = new Date();
495    var domain = Drupal.settings.eu_cookie_compliance.domain ? Drupal.settings.eu_cookie_compliance.domain : '';
496    var path = Drupal.settings.eu_cookie_compliance.domain_all_sites ? '/' : Drupal.settings.basePath;
497    var cookieName = (typeof eu_cookie_compliance_cookie_name === 'undefined' || eu_cookie_compliance_cookie_name === '') ? 'cookie-agreed' : eu_cookie_compliance_cookie_name;
498    if (path.length > 1) {
499      var pathEnd = path.length - 1;
500      if (path.lastIndexOf('/') === pathEnd) {
501        path = path.substring(0, pathEnd);
502      }
503    }
504
505    var cookieSession = parseInt(Drupal.settings.eu_cookie_compliance.cookie_session);
506    if (cookieSession) {
507      $.cookie(cookieName, status, { path: path, domain: domain });
508    }
509    else {
510      var lifetime = parseInt(Drupal.settings.eu_cookie_compliance.cookie_lifetime);
511      date.setDate(date.getDate() + lifetime);
512      $.cookie(cookieName, status, { expires: date, path: path, domain: domain });
513    }
514    $(document).trigger('eu_cookie_compliance.changeStatus', [status]);
515
516    // Store consent if applicable.
517    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))) {
518      var url = Drupal.settings.basePath + Drupal.settings.pathPrefix + 'eu-cookie-compliance/store_consent/banner';
519      $.post(url, {}, function (data) { });
520    }
521  };
522
523  Drupal.eu_cookie_compliance.setAcceptedCategories = function (categories) {
524    var date = new Date();
525    var domain = Drupal.settings.eu_cookie_compliance.domain ? Drupal.settings.eu_cookie_compliance.domain : '';
526    var path = Drupal.settings.eu_cookie_compliance.domain_all_sites ? '/' : Drupal.settings.basePath;
527    var cookieName = (typeof eu_cookie_compliance_cookie_name === 'undefined' || eu_cookie_compliance_cookie_name === '') ? 'cookie-agreed-categories' : Drupal.settings.eu_cookie_compliance.cookie_name + '-categories';
528    if (path.length > 1) {
529      var pathEnd = path.length - 1;
530      if (path.lastIndexOf('/') === pathEnd) {
531        path = path.substring(0, pathEnd);
532      }
533    }
534    var categoriesString = JSON.stringify(categories);
535    var cookie_session = parseInt(Drupal.settings.eu_cookie_compliance.cookie_session);
536    if (cookie_session) {
537      $.cookie(cookieName, categoriesString, { path: path, domain: domain });
538    } else {
539      var lifetime = parseInt(Drupal.settings.eu_cookie_compliance.cookie_lifetime);
540      date.setDate(date.getDate() + lifetime);
541      $.cookie(cookieName, categoriesString, { expires: date, path: path, domain: domain });
542    }
543    $(document).trigger('eu_cookie_compliance.changePreferences', [categories]);
544
545    // TODO: Store categories with consent if applicable?
546  };
547
548  Drupal.eu_cookie_compliance.hasAgreed = function (category) {
549    var status = Drupal.eu_cookie_compliance.getCurrentStatus();
550    var agreed = (status === 1 || status === 2);
551
552    if(category !== undefined && agreed) {
553      agreed = Drupal.eu_cookie_compliance.hasAgreedWithCategory(category);
554    }
555
556    return agreed;
557  };
558
559  Drupal.eu_cookie_compliance.hasAgreedWithCategory = function(category) {
560    var allCategories = Drupal.settings.eu_cookie_compliance.cookie_categories;
561    var agreedCategories = Drupal.eu_cookie_compliance.getAcceptedCategories();
562
563    if (Drupal.settings.eu_cookie_compliance.fix_first_cookie_category && category === allCategories[0]) {
564      return true;
565    }
566
567    return $.inArray(category, agreedCategories) !== -1;
568  };
569
570  Drupal.eu_cookie_compliance.showBanner = function () {
571    var showBanner = false;
572    var status = Drupal.eu_cookie_compliance.getCurrentStatus();
573    if ((status === 0 && Drupal.settings.eu_cookie_compliance.method === 'default') || status === null) {
574      if (!Drupal.settings.eu_cookie_compliance.disagree_do_not_show_popup || status === null) {
575        showBanner = true;
576      }
577    }
578    else if (status === 1 && Drupal.settings.eu_cookie_compliance.popup_agreed_enabled) {
579      showBanner = true;
580    }
581
582    return showBanner;
583  };
584
585  Drupal.eu_cookie_compliance.cookiesEnabled = function () {
586    var cookieEnabled = navigator.cookieEnabled;
587    if (typeof navigator.cookieEnabled === 'undefined' && !cookieEnabled) {
588      document.cookie = 'testCookie';
589      cookieEnabled = (document.cookie.indexOf('testCookie') !== -1);
590    }
591
592    return cookieEnabled;
593  };
594
595  Drupal.eu_cookie_compliance.isWhitelisted = function (cookieName) {
596    // Skip the PHP session cookie.
597    if (cookieName.indexOf('SESS') === 0 || cookieName.indexOf('SSESS') === 0) {
598      return true;
599    }
600    // Split the white-listed cookies.
601    var euCookieComplianceWhitelist = Drupal.settings.eu_cookie_compliance.whitelisted_cookies.split(/\r\n|\n|\r/g);
602
603    // Add the EU Cookie Compliance cookie.
604    euCookieComplianceWhitelist.push((typeof Drupal.settings.eu_cookie_compliance.cookie_name === 'undefined' || Drupal.settings.eu_cookie_compliance.cookie_name === '') ? 'cookie-agreed' : Drupal.settings.eu_cookie_compliance.cookie_name);
605    euCookieComplianceWhitelist.push((typeof Drupal.settings.eu_cookie_compliance.cookie_name === 'undefined' || Drupal.settings.eu_cookie_compliance.cookie_name === '') ? 'cookie-agreed-categories' : Drupal.settings.eu_cookie_compliance.cookie_name + '-categories');
606
607    // Check if the cookie is white-listed.
608    for (var item in euCookieComplianceWhitelist) {
609      if (cookieName === euCookieComplianceWhitelist[item]) {
610        return true;
611      }
612      // Handle cookie names that are prefixed with a category.
613      if (Drupal.settings.eu_cookie_compliance.method === 'categories') {
614        var separatorPos = euCookieComplianceWhitelist[item].indexOf(":");
615        if (separatorPos !== -1) {
616          var category = euCookieComplianceWhitelist[item].substr(0, separatorPos);
617          var wlCookieName = euCookieComplianceWhitelist[item].substr(separatorPos + 1);
618
619          if (wlCookieName === cookieName && Drupal.eu_cookie_compliance.hasAgreedWithCategory(category)) {
620            return true;
621          }
622        }
623      }
624    }
625
626    return false;
627  }
628
629  // This code upgrades the cookie agreed status when upgrading for an old version.
630  Drupal.eu_cookie_compliance.updateCheck = function () {
631    var legacyCookie = 'cookie-agreed-' + Drupal.settings.eu_cookie_compliance.popup_language;
632    var domain = Drupal.settings.eu_cookie_compliance.domain ? Drupal.settings.eu_cookie_compliance.domain : '';
633    var path = Drupal.settings.eu_cookie_compliance.domain_all_sites ? '/' : Drupal.settings.basePath;
634    var cookie = $.cookie(legacyCookie);
635    var date = new Date();
636    var cookieName = (typeof eu_cookie_compliance_cookie_name === 'undefined' || eu_cookie_compliance_cookie_name === '') ? 'cookie-agreed' : eu_cookie_compliance_cookie_name;
637
638    // jQuery.cookie 1.0 (bundled with Drupal) returns null,
639    // jQuery.cookie 1.4.1 (bundled with some themes) returns undefined.
640    // We had a 1.4.1 related bug where the value was set to 'null' (string).
641    if (cookie !== undefined && cookie !== null && cookie !== 'null') {
642      date.setDate(date.getDate() + parseInt(Drupal.settings.eu_cookie_compliance.cookie_lifetime));
643      $.cookie(cookieName, cookie, { expires: date, path:  path, domain: domain });
644
645      // Use removeCookie if the function exists.
646      if (typeof $.removeCookie !== 'undefined') {
647        $.removeCookie(legacyCookie);
648      }
649      else {
650        $.cookie(legacyCookie, null, { path: path, domain: domain });
651      }
652    }
653  };
654
655  // Load blocked scripts if the user has agreed to being tracked.
656  var euCookieComplianceHasLoadedScripts = false;
657  var euCookieComplianceHasLoadedScriptsForCategory = [];
658  $(function () {
659    if (Drupal.eu_cookie_compliance.hasAgreed()
660        || (Drupal.eu_cookie_compliance.getCurrentStatus() === null && Drupal.settings.eu_cookie_compliance.method !== 'opt_in' && Drupal.settings.eu_cookie_compliance.method !== 'categories')
661    ) {
662      if (typeof euCookieComplianceLoadScripts === "function") {
663        euCookieComplianceLoadScripts();
664      }
665      euCookieComplianceHasLoadedScripts = true;
666
667      if (Drupal.settings.eu_cookie_compliance.method === 'categories') {
668        var acceptedCategories = Drupal.eu_cookie_compliance.getAcceptedCategories();
669        Drupal.eu_cookie_compliance.loadCategoryScripts(acceptedCategories);
670      }
671    }
672  });
673
674  // Block cookies when the user hasn't agreed.
675  Drupal.behaviors.eu_cookie_compliance_popup_block_cookies = {
676    initialized: false,
677    attach: function (context, settings) {
678      if (!Drupal.behaviors.eu_cookie_compliance_popup_block_cookies.initialized && settings.eu_cookie_compliance) {
679        Drupal.behaviors.eu_cookie_compliance_popup_block_cookies.initialized = true;
680        if ((settings.eu_cookie_compliance.method === 'opt_in' && (Drupal.eu_cookie_compliance.getCurrentStatus() === null || !Drupal.eu_cookie_compliance.hasAgreed()))
681          || (settings.eu_cookie_compliance.method === 'opt_out' && !Drupal.eu_cookie_compliance.hasAgreed() && Drupal.eu_cookie_compliance.getCurrentStatus() !== null)
682          || (Drupal.settings.eu_cookie_compliance.method === 'categories')
683        ) {
684          // Split the white-listed cookies.
685          var euCookieComplianceWhitelist = settings.eu_cookie_compliance.whitelisted_cookies.split(/\r\n|\n|\r/g);
686
687          // Add the EU Cookie Compliance cookie.
688          var cookieName = (typeof eu_cookie_compliance_cookie_name === 'undefined' || eu_cookie_compliance_cookie_name === '') ? 'cookie-agreed' : eu_cookie_compliance_cookie_name;
689          euCookieComplianceWhitelist.push(cookieName);
690
691          euCookieComplianceBlockCookies = setInterval(function () {
692            // Load all cookies from jQuery.
693            var cookies = $.cookie();
694
695            // Check each cookie and try to remove it if it's not white-listed.
696            for (var i in cookies) {
697              var remove = true;
698              var hostname = window.location.hostname;
699              var cookieRemoved = false;
700              var index = 0;
701
702              remove = !Drupal.eu_cookie_compliance.isWhitelisted(i);
703
704              // Remove the cookie if it's not white-listed.
705              if (remove) {
706                while (!cookieRemoved && hostname !== '') {
707                  // Attempt to remove.
708                  cookieRemoved = $.removeCookie(i, { domain: '.' + hostname, path: '/' });
709                  if (!cookieRemoved) {
710                    cookieRemoved = $.removeCookie(i, { domain: hostname, path: '/' });
711                  }
712
713                  index = hostname.indexOf('.');
714
715                  // We can be on a sub-domain, so keep checking the main domain as well.
716                  hostname = (index === -1) ? '' : hostname.substring(index + 1);
717                }
718
719                // Some jQuery Cookie versions don't remove cookies well.  Try again
720                // using plain js.
721                if (!cookieRemoved) {
722                  document.cookie = i + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/;';
723                }
724              }
725            }
726          }, 5000);
727        }
728      }
729    }
730  }
731
732})(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.