/**
* @file eu_cookie_compliance.js
*
- * Defines the behavior of the eu cookie compliance popup.
+ * Defines the behavior of the eu cookie compliance banner.
*/
(function ($, Drupal, drupalSettings) {
Drupal.behaviors.euCookieCompliancePopup = {
attach: function (context) {
- $('body', context).once('sliding-popup').each(function () {
- var settings = drupalSettings.eu_cookie_compliance;
- try {
- var enabled = settings.popup_enabled;
-
- if (!enabled) {
- return;
- }
-
- if (!Drupal.eu_cookie_compliance.cookiesEnabled()) {
- return;
- }
+ $('body').once('eu-cookie-compliance').each(function () {
+ // If configured, check JSON callback to determine if in EU.
+ if (drupalSettings.eu_cookie_compliance.popup_eu_only_js) {
+ if (Drupal.eu_cookie_compliance.showBanner()) {
+ var url = drupalSettings.path.baseUrl + drupalSettings.path.pathPrefix + 'eu-cookie-compliance-check';
+ var data = {};
+ $.getJSON(url, data, function (data) {
+ // If in the EU, show the compliance banner.
+ if (data.in_eu) {
+ Drupal.eu_cookie_compliance.execute();
+ }
- var status = Drupal.eu_cookie_compliance.getCurrentStatus();
- var clicking_confirms = settings.popup_clicking_confirmation;
- var agreed_enabled = settings.popup_agreed_enabled;
- var popup_hide_agreed = settings.popup_hide_agreed;
-
- if (status === 0) {
- var next_status = 1;
- if (!clicking_confirms) {
- $('a, input[type=submit]').bind('click.eu_cookie_compliance', function () {
- if (!agreed_enabled) {
- Drupal.eu_cookie_compliance.setStatus(1);
- next_status = 2;
- }
- Drupal.eu_cookie_compliance.changeStatus(next_status);
- });
- }
- $('.agree-button').click(function () {
- if (!agreed_enabled) {
- Drupal.eu_cookie_compliance.setStatus(1);
- next_status = 2;
+ // If not in EU, set an agreed cookie automatically.
+ else {
+ Drupal.eu_cookie_compliance.setStatus(2);
}
- Drupal.eu_cookie_compliance.changeStatus(next_status);
});
-
- Drupal.eu_cookie_compliance.createPopup(settings.popup_html_info);
- }
- else if (status === 1) {
- Drupal.eu_cookie_compliance.createPopup(settings.popup_html_agreed);
- if (popup_hide_agreed) {
- $('a, input[type=submit]').bind('click.eu_cookie_compliance_hideagreed', function () {
- Drupal.eu_cookie_compliance.changeStatus(2);
- });
- }
}
}
- catch (e) {
- // Nothing to show here.
+
+ // Otherwise, fallback to standard behavior which is to render the banner.
+ else {
+ Drupal.eu_cookie_compliance.execute();
}
});
- }
+ },
};
Drupal.eu_cookie_compliance = {};
+ Drupal.eu_cookie_compliance.execute = function () {
+ try {
+ if (!drupalSettings.eu_cookie_compliance.popup_enabled) {
+ return;
+ }
+
+ if (!Drupal.eu_cookie_compliance.cookiesEnabled()) {
+ return;
+ }
+
+ var status = Drupal.eu_cookie_compliance.getCurrentStatus();
+ if ((status === 0 && drupalSettings.eu_cookie_compliance.method === 'default') || status === null) {
+ if (!drupalSettings.eu_cookie_compliance.disagree_do_not_show_popup || status === null) {
+ // Detect mobile here and use mobile_popup_html_info, if we have a mobile device.
+ if (window.matchMedia('(max-width: ' + drupalSettings.eu_cookie_compliance.mobile_breakpoint + 'px)').matches && drupalSettings.eu_cookie_compliance.use_mobile_message) {
+ Drupal.eu_cookie_compliance.createPopup(drupalSettings.eu_cookie_compliance.mobile_popup_html_info);
+ } else {
+ Drupal.eu_cookie_compliance.createPopup(drupalSettings.eu_cookie_compliance.popup_html_info);
+ }
+
+ Drupal.eu_cookie_compliance.attachAgreeEvents();
+ }
+ } else if (status === 1 && drupalSettings.eu_cookie_compliance.popup_agreed_enabled) {
+ Drupal.eu_cookie_compliance.createPopup(drupalSettings.eu_cookie_compliance.popup_html_agreed);
+ Drupal.eu_cookie_compliance.attachHideEvents();
+ } else if (status === 2 && drupalSettings.eu_cookie_compliance.withdraw_enabled) {
+ Drupal.eu_cookie_compliance.createWithdrawBanner(drupalSettings.eu_cookie_compliance.withdraw_markup);
+ Drupal.eu_cookie_compliance.attachWithdrawEvents();
+ }
+ }
+ catch (e) {
+ }
+ };
+
+ Drupal.eu_cookie_compliance.createWithdrawBanner = function (html) {
+ var $html = $('<div></div>').html(html);
+ var $banner = $('.eu-cookie-withdraw-banner', $html);
+ $html.attr('id', 'sliding-popup');
+ $html.addClass('eu-cookie-withdraw-wrapper');
+
+ if (!drupalSettings.eu_cookie_compliance.popup_use_bare_css) {
+ $banner.height(drupalSettings.eu_cookie_compliance.popup_height)
+ .width(drupalSettings.eu_cookie_compliance.popup_width);
+ }
+ $html.hide();
+ var height = 0;
+ if (drupalSettings.eu_cookie_compliance.popup_position) {
+ $html.prependTo('body');
+ height = $html.outerHeight();
+
+ $html.show()
+ .addClass('sliding-popup-top')
+ .addClass('clearfix')
+ .css({ top: -1 * height });
+ // For some reason, the tab outerHeight is -10 if we don't use a timeout
+ // function to reveal the tab.
+ setTimeout(function () {
+ var height = $html.outerHeight();
+
+ $html.animate({ top: -1 * (height) }, drupalSettings.eu_cookie_compliance.popup_delay, null, function () {
+ $html.trigger('eu_cookie_compliance_popup_open');
+ });
+ }.bind($html), 0);
+ } else {
+ if (drupalSettings.eu_cookie_compliance.better_support_for_screen_readers) {
+ $html.prependTo('body');
+ } else {
+ $html.appendTo('body');
+ }
+ height = $html.outerHeight();
+ $html.show()
+ .addClass('sliding-popup-bottom')
+ .css({ bottom: -1 * height });
+ // For some reason, the tab outerHeight is -10 if we don't use a timeout
+ // function to reveal the tab.
+ setTimeout(function () {
+ var height = $html.outerHeight();
+
+ $html.animate({ bottom: -1 * (height) }, drupalSettings.eu_cookie_compliance.popup_delay, null, function () {
+ $html.trigger('eu_cookie_compliance_popup_open');
+ });
+ }.bind($html), 0);
+ }
+ };
+
+ Drupal.eu_cookie_compliance.toggleWithdrawBanner = function () {
+ var $wrapper = $('#sliding-popup');
+ var $tab = $('.eu-cookie-withdraw-tab');
+ var $bannerIsShowing = drupalSettings.eu_cookie_compliance.popup_position ? parseInt($wrapper.css('top')) === 0 : parseInt($wrapper.css('bottom')) === 0;
+ var height = $wrapper.outerHeight();
+ if (drupalSettings.eu_cookie_compliance.popup_position) {
+ if ($bannerIsShowing) {
+ $wrapper.animate({'top' : -1 * (height)}, drupalSettings.eu_cookie_compliance.popup_delay);
+ }
+ else {
+ $wrapper.animate({'top' : 0}, drupalSettings.eu_cookie_compliance.popup_delay);
+ }
+ }
+ else {
+ if ($bannerIsShowing) {
+ $wrapper.animate({'bottom' : -1 * (height)}, drupalSettings.eu_cookie_compliance.popup_delay);
+ }
+ else {
+ $wrapper.animate({'bottom' : 0}, drupalSettings.eu_cookie_compliance.popup_delay);
+ }
+ }
+ };
+
Drupal.eu_cookie_compliance.createPopup = function (html) {
- var popup = $(html)
- .attr({id: 'sliding-popup'})
- .height(drupalSettings.eu_cookie_compliance.popup_height)
- .width(drupalSettings.eu_cookie_compliance.popup_width)
- .hide();
- var height = popup.height();
+ // This fixes a problem with jQuery 1.9.
+ var popup = $('<div></div>').html(html);
+ popup.attr('id', 'sliding-popup');
+ if (!drupalSettings.eu_cookie_compliance.popup_use_bare_css) {
+ popup.height(drupalSettings.eu_cookie_compliance.popup_height)
+ .width(drupalSettings.eu_cookie_compliance.popup_width);
+ }
+
+ popup.hide();
+ var height = 0;
if (drupalSettings.eu_cookie_compliance.popup_position) {
popup.prependTo('body');
+ height = popup.outerHeight();
+ popup.show()
+ .addClass('sliding-popup-top clearfix')
+ .css({ top: -1 * height })
+ .animate({ top: 0 }, drupalSettings.eu_cookie_compliance.popup_delay, null, function () {
+ popup.trigger('eu_cookie_compliance_popup_open');
+ });
+ } else {
+ if (drupalSettings.eu_cookie_compliance.better_support_for_screen_readers) {
+ popup.prependTo('body');
+ } else {
+ popup.appendTo('body');
+ }
+
+ height = popup.outerHeight();
popup.show()
- .attr({class: 'sliding-popup-top clearfix'})
- .css({
- top: -1 * height
- })
- .animate({top: 0}, drupalSettings.eu_cookie_compliance.popup_delay);
+ .addClass('sliding-popup-bottom')
+ .css({ bottom: -1 * height })
+ .animate({ bottom: 0 }, drupalSettings.eu_cookie_compliance.popup_delay, null, function () {
+ popup.trigger('eu_cookie_compliance_popup_open');
+ });
+ }
+ };
+
+ Drupal.eu_cookie_compliance.attachAgreeEvents = function () {
+ var clickingConfirms = drupalSettings.eu_cookie_compliance.popup_clicking_confirmation;
+ var scrollConfirms = drupalSettings.eu_cookie_compliance.popup_scrolling_confirmation;
+
+ $('.agree-button').click(Drupal.eu_cookie_compliance.acceptAction);
+ $('.decline-button').click(Drupal.eu_cookie_compliance.declineAction);
+
+ if (clickingConfirms) {
+ $('a, input[type=submit], button[type=submit]').bind('click.euCookieCompliance', Drupal.eu_cookie_compliance.acceptAction);
+ }
+
+ if (scrollConfirms) {
+ var alreadyScrolled = false;
+ var scrollHandler = function () {
+ if (alreadyScrolled) {
+ Drupal.eu_cookie_compliance.acceptAction();
+ $(window).off('scroll', scrollHandler);
+ } else {
+ alreadyScrolled = true;
+ }
+ };
+
+ $(window).bind('scroll', scrollHandler);
+ }
+
+ $('.find-more-button').not('.find-more-button-processed').addClass('find-more-button-processed').click(Drupal.eu_cookie_compliance.moreInfoAction);
+ };
+
+ Drupal.eu_cookie_compliance.attachHideEvents = function () {
+ var popupHideAgreed = drupalSettings.eu_cookie_compliance.popup_hide_agreed;
+ var clickingConfirms = drupalSettings.eu_cookie_compliance.popup_clicking_confirmation;
+ $('.hide-popup-button').click(function () {
+ Drupal.eu_cookie_compliance.changeStatus(2);
+ }
+ );
+ if (clickingConfirms) {
+ $('a, input[type=submit], button[type=submit]').unbind('click.euCookieCompliance');
+ }
+
+ if (popupHideAgreed) {
+ $('a, input[type=submit], button[type=submit]').bind('click.euCookieComplianceHideAgreed', function () {
+ Drupal.eu_cookie_compliance.changeStatus(2);
+ });
+ }
+
+ $('.find-more-button').not('.find-more-button-processed').addClass('find-more-button-processed').click(Drupal.eu_cookie_compliance.moreInfoAction);
+ };
+
+ Drupal.eu_cookie_compliance.attachWithdrawEvents = function () {
+ $('.eu-cookie-withdraw-button').click(Drupal.eu_cookie_compliance.withdrawAction);
+ $('.eu-cookie-withdraw-tab').click(Drupal.eu_cookie_compliance.toggleWithdrawBanner);
+ };
+
+ Drupal.eu_cookie_compliance.acceptAction = function () {
+ var agreedEnabled = drupalSettings.eu_cookie_compliance.popup_agreed_enabled;
+ var nextStatus = 1;
+ if (!agreedEnabled) {
+ Drupal.eu_cookie_compliance.setStatus(1);
+ nextStatus = 2;
+ }
+
+ if (!euCookieComplianceHasLoadedScripts) {
+ euCookieComplianceLoadScripts();
+ }
+
+ if (typeof euCookieComplianceBlockCookies !== 'undefined') {
+ clearInterval(euCookieComplianceBlockCookies);
+ }
+
+ Drupal.eu_cookie_compliance.changeStatus(nextStatus);
+ };
+
+ Drupal.eu_cookie_compliance.declineAction = function () {
+ Drupal.eu_cookie_compliance.setStatus(0);
+ let popup = $('#sliding-popup');
+ if (popup.hasClass('sliding-popup-top')) {
+ popup.animate({ top: popup.outerHeight() * -1 }).trigger('eu_cookie_compliance_popup_close');
}
else {
- popup.appendTo('body');
- popup.show()
- .attr({class: 'sliding-popup-bottom'})
- .css({
- bottom: -1 * height
- })
- .animate({bottom: 0}, drupalSettings.eu_cookie_compliance.popup_delay);
- }
- popup.css({
- background: '#' + drupalSettings.eu_cookie_compliance.popup_bg_hex
- }).find('h2, p').css('color', '#' + drupalSettings.eu_cookie_compliance.popup_text_hex);
- Drupal.eu_cookie_compliance.attachEvents();
- };
-
- Drupal.eu_cookie_compliance.attachEvents = function () {
- var clicking_confirms = drupalSettings.eu_cookie_compliance.popup_clicking_confirmation;
- var agreed_enabled = drupalSettings.eu_cookie_compliance.popup_agreed_enabled;
- $('.find-more-button').bind('click', function () {
+ popup.animate({ bottom: popup.outerHeight() * -1 }).trigger('eu_cookie_compliance_popup_close');
+ }
+ };
+
+ Drupal.eu_cookie_compliance.withdrawAction = function () {
+ Drupal.eu_cookie_compliance.setStatus(null);
+ location.reload();
+ };
+
+ Drupal.eu_cookie_compliance.moreInfoAction = function () {
+ if (drupalSettings.eu_cookie_compliance.disagree_do_not_show_popup) {
+ Drupal.eu_cookie_compliance.setStatus(0);
+ $('#sliding-popup').trigger('eu_cookie_compliance_popup_close').remove();
+ } else {
if (drupalSettings.eu_cookie_compliance.popup_link_new_window) {
window.open(drupalSettings.eu_cookie_compliance.popup_link);
- }
- else {
+ } else {
window.location.href = drupalSettings.eu_cookie_compliance.popup_link;
}
- });
- $('.agree-button').bind('click', function () {
- var next_status = 1;
- if (!agreed_enabled) {
- Drupal.eu_cookie_compliance.setStatus(1);
- next_status = 2;
- }
- if (clicking_confirms) {
- $('a, input[type=submit]').unbind('click.eu_cookie_compliance');
- }
- Drupal.eu_cookie_compliance.changeStatus(next_status);
- });
- $('.hide-popup-button').bind('click', function () {
- Drupal.eu_cookie_compliance.changeStatus(2);
- });
+ }
};
Drupal.eu_cookie_compliance.getCurrentStatus = function () {
- var name = 'cookie-agreed';
- var result = Drupal.eu_cookie_compliance.getCookie(name);
+ var cookieName = (drupalSettings.eu_cookie_compliance.cookie_name === '') ? 'cookie-agreed' : drupalSettings.eu_cookie_compliance.cookie_name;
+ var value = $.cookie(cookieName);
+ value = parseInt(value);
+ if (isNaN(value)) {
+ value = null;
+ }
- return parseInt(result);
+ return value;
};
Drupal.eu_cookie_compliance.changeStatus = function (value) {
var status = Drupal.eu_cookie_compliance.getCurrentStatus();
+ var reloadPage = drupalSettings.eu_cookie_compliance.reload_page;
if (status === value) {
return;
}
+
if (drupalSettings.eu_cookie_compliance.popup_position) {
- $('.sliding-popup-top').animate({top: $('#sliding-popup').height() * -1}, drupalSettings.eu_cookie_compliance.popup_delay, function () {
- if (status === 0) {
- $('#sliding-popup').html(drupalSettings.eu_cookie_compliance.popup_html_agreed).animate({top: 0}, drupalSettings.eu_cookie_compliance.popup_delay);
- Drupal.eu_cookie_compliance.attachEvents();
- }
- if (status === 1) {
- $('#sliding-popup').remove();
+ $('.sliding-popup-top').animate({ top: $('#sliding-popup').outerHeight() * -1 }, drupalSettings.eu_cookie_compliance.popup_delay, function () {
+ if (status === null && !reloadPage) {
+ $('#sliding-popup').html(drupalSettings.eu_cookie_compliance.popup_html_agreed).animate({ top: 0 }, drupalSettings.eu_cookie_compliance.popup_delay);
+ Drupal.eu_cookie_compliance.attachHideEvents();
+ } else if (status === 1) {
+ $('#sliding-popup').trigger('eu_cookie_compliance_popup_close').remove();
}
});
- }
- else {
- $('.sliding-popup-bottom').animate({bottom: $('#sliding-popup').height() * -1}, drupalSettings.eu_cookie_compliance.popup_delay, function () {
- if (status === 0) {
- $('#sliding-popup').html(drupalSettings.eu_cookie_compliance.popup_html_agreed).animate({bottom: 0}, drupalSettings.eu_cookie_compliance.popup_delay);
- Drupal.eu_cookie_compliance.attachEvents();
- }
- if (status === 1) {
- $('#sliding-popup').remove();
+ } else {
+ $('.sliding-popup-bottom').animate({ bottom: $('#sliding-popup').outerHeight() * -1 }, drupalSettings.eu_cookie_compliance.popup_delay, function () {
+ if (status === null && !reloadPage) {
+ $('#sliding-popup').html(drupalSettings.eu_cookie_compliance.popup_html_agreed).animate({ bottom: 0 }, drupalSettings.eu_cookie_compliance.popup_delay);
+ Drupal.eu_cookie_compliance.attachHideEvents();
+ } else if (status === 1) {
+ $('#sliding-popup').trigger('eu_cookie_compliance_popup_close').remove();
}
});
}
+
+ if (drupalSettings.eu_cookie_compliance.reload_page) {
+ location.reload();
+ }
+
+ if (value === 2 && drupalSettings.eu_cookie_compliance.withdraw_enabled) {
+ Drupal.eu_cookie_compliance.createWithdrawBanner(drupalSettings.eu_cookie_compliance.withdraw_markup);
+ Drupal.eu_cookie_compliance.attachWithdrawEvents();
+ }
+
Drupal.eu_cookie_compliance.setStatus(value);
};
Drupal.eu_cookie_compliance.setStatus = function (status) {
var date = new Date();
- date.setDate(date.getDate() + 100);
- var cookie = 'cookie-agreed=' + status + ';expires=' + date.toUTCString() + ';path=' + drupalSettings.path.baseUrl;
- if (drupalSettings.eu_cookie_compliance.domain) {
- cookie += ';domain=' + drupalSettings.eu_cookie_compliance.domain;
+ var domain = drupalSettings.eu_cookie_compliance.domain ? drupalSettings.eu_cookie_compliance.domain : '';
+ var path = drupalSettings.path.baseUrl;
+ var cookieName = (drupalSettings.eu_cookie_compliance.cookie_name === '') ? 'cookie-agreed' : drupalSettings.eu_cookie_compliance.cookie_name;
+ if (path.length > 1) {
+ var pathEnd = path.length - 1;
+ if (path.lastIndexOf('/') === pathEnd) {
+ path = path.substring(0, pathEnd);
+ }
+ }
+
+ var cookie_session = parseInt(drupalSettings.eu_cookie_compliance.cookie_session);
+ if (cookie_session) {
+ $.cookie(cookieName, status, { path: path, domain: domain });
+ } else {
+ var lifetime = parseInt(drupalSettings.eu_cookie_compliance.cookie_lifetime);
+ date.setDate(date.getDate() + lifetime);
+ $.cookie(cookieName, status, { expires: date, path: path, domain: domain });
+ }
+ $(document).trigger('eu_cookie_compliance.changeStatus', [status]);
+
+ // Store consent if applicable.
+ if (drupalSettings.eu_cookie_compliance.store_consent && ((status === 1 && drupalSettings.eu_cookie_compliance.popup_agreed_enabled) || (status === 2 && !drupalSettings.eu_cookie_compliance.popup_agreed_enabled))) {
+ var url = drupalSettings.path.baseUrl + drupalSettings.path.pathPrefix + 'eu-cookie-compliance/store_consent/banner';
+ $.post(url, {}, function (data) { });
}
- document.cookie = cookie;
};
Drupal.eu_cookie_compliance.hasAgreed = function () {
var status = Drupal.eu_cookie_compliance.getCurrentStatus();
- if (status === 1 || status === 2) {
- return true;
- }
- return false;
- };
-
- /**
- * Verbatim copy of Drupal.comment.getCookie().
- */
- Drupal.eu_cookie_compliance.getCookie = function (name) {
- var search = name + '=';
- var returnValue = '0';
-
- if (document.cookie.length > 0) {
- var offset = document.cookie.indexOf(search);
- if (offset !== -1) {
- offset += search.length;
- var end = document.cookie.indexOf(';', offset);
- if (end === -1) {
- end = document.cookie.length;
- }
- returnValue = decodeURIComponent(document.cookie.substring(offset, end).replace(/\+/g, '%20'));
+ return (status === 1 || status === 2);
+ };
+
+ Drupal.eu_cookie_compliance.showBanner = function () {
+ var showBanner = false;
+ var status = Drupal.eu_cookie_compliance.getCurrentStatus();
+ if ((status === 0 && drupalSettings.eu_cookie_compliance.method === 'default') || status === null) {
+ if (!drupalSettings.eu_cookie_compliance.disagree_do_not_show_popup || status === null) {
+ showBanner = true;
}
+ } else if (status === 1 && drupalSettings.eu_cookie_compliance.popup_agreed_enabled) {
+ showBanner = true;
}
- return returnValue;
+
+ return showBanner;
};
Drupal.eu_cookie_compliance.cookiesEnabled = function () {
var cookieEnabled = (navigator.cookieEnabled);
if (typeof navigator.cookieEnabled === 'undefined' && !cookieEnabled) {
- document.cookie = 'testcookie';
- cookieEnabled = (document.cookie.indexOf('testcookie') !== -1);
+ $.cookie('testcookie', 'testcookie', { expires: 100 });
+ cookieEnabled = ($.cookie('testcookie').indexOf('testcookie') !== -1);
}
+
return (cookieEnabled);
};
+ // Load blocked scripts if the user has agreed to being tracked.
+ var euCookieComplianceHasLoadedScripts = false;
+ $(function () {
+ if (Drupal.eu_cookie_compliance.hasAgreed()
+ || (Drupal.eu_cookie_compliance.getCurrentStatus() === null && drupalSettings.eu_cookie_compliance.method !== 'opt_in')
+ ) {
+ euCookieComplianceLoadScripts();
+ euCookieComplianceHasLoadedScripts = true;
+ }
+ });
+
+ // Block cookies when the user hasn't agreed.
+ if ((drupalSettings.eu_cookie_compliance.method === 'opt_in' && (Drupal.eu_cookie_compliance.getCurrentStatus() === null || !Drupal.eu_cookie_compliance.hasAgreed()))
+ || (drupalSettings.eu_cookie_compliance.method === 'opt_out' && !Drupal.eu_cookie_compliance.hasAgreed() && Drupal.eu_cookie_compliance.getCurrentStatus() !== null)
+ ) {
+ // Split the white-listed cookies.
+ var euCookieComplianceWhitelist = drupalSettings.eu_cookie_compliance.whitelisted_cookies.split(/\r\n|\n|\r/g);
+
+ // Add the EU Cookie Compliance cookie.
+ euCookieComplianceWhitelist.push((drupalSettings.eu_cookie_compliance.cookie_name === '') ? 'cookie-agreed' : drupalSettings.eu_cookie_compliance.cookie_name);
+ var euCookieComplianceBlockCookies = setInterval(function () {
+ // Load all cookies from jQuery.
+ var cookies = $.cookie();
+
+ // Check each cookie and try to remove it if it's not white-listed.
+ for (var i in cookies) {
+ var remove = true;
+ var hostname = window.location.hostname;
+ var cookieRemoved = false;
+ var index = 0;
+
+ // Skip the PHP session cookie.
+ if (i.indexOf('SESS') === 0 || i.indexOf('SSESS') === 0) {
+ remove = false;
+ }
+
+ // Check if the cookie is white-listed.
+ for (var item in euCookieComplianceWhitelist) {
+ if (i === euCookieComplianceWhitelist[item]) {
+ remove = false;
+ }
+ }
+
+ // Remove the cookie if it's not white-listed.
+ if (remove) {
+ while (!cookieRemoved && hostname !== '') {
+ // Attempt to remove.
+ cookieRemoved = $.removeCookie(i, { domain: '.' + hostname, path: '/' });
+ if (!cookieRemoved) {
+ cookieRemoved = $.removeCookie(i, { domain: hostname, path: '/' });
+ }
+
+ index = hostname.indexOf('.');
+
+ // We can be on a sub-domain, so keep checking the main domain as well.
+ hostname = (index === -1) ? '' : hostname.substring(index + 1);
+ }
+ }
+ }
+ }, 5000);
+ }
+
})(jQuery, Drupal, drupalSettings);