// 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 + 'eu-cookie-compliance-check';
+ 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.
}
var status = Drupal.eu_cookie_compliance.getCurrentStatus();
- if (status === 0 || status === null) {
+ 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) {
} 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) {
// This fixes a problem with jQuery 1.9.
var popup = $('<div></div>').html(html);
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);
$('.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;
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.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').remove().trigger('eu_cookie_compliance_popup_close');
+ $('#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);
$('#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').remove().trigger('eu_cookie_compliance_popup_close');
+ $('#sliding-popup').trigger('eu_cookie_compliance_popup_close').remove();
}
});
} else {
$('#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').remove().trigger('eu_cookie_compliance_popup_close');
+ $('#sliding-popup').trigger('eu_cookie_compliance_popup_close').remove();
}
});
}
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);
};
}
}
- date.setDate(date.getDate() + parseInt(drupalSettings.eu_cookie_compliance.cookie_lifetime));
- $.cookie(cookieName, status, { expires: date, path: path, domain: domain });
+ 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) { });
+ }
};
Drupal.eu_cookie_compliance.hasAgreed = function () {
Drupal.eu_cookie_compliance.showBanner = function () {
var showBanner = false;
var status = Drupal.eu_cookie_compliance.getCurrentStatus();
- if (status === 0 || status === null) {
+ 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;
}
return (cookieEnabled);
};
- Drupal.eu_cookie_compliance.reloadPage = function () {
+ // 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);