2 * @file eu_cookie_compliance.js
4 * Defines the behavior of the eu cookie compliance popup.
7 (function ($, Drupal, drupalSettings) {
11 Drupal.behaviors.euCookieCompliancePopup = {
12 attach: function (context) {
13 $('body', context).once('sliding-popup').each(function () {
14 var settings = drupalSettings.eu_cookie_compliance;
16 var enabled = settings.popup_enabled;
22 if (!Drupal.eu_cookie_compliance.cookiesEnabled()) {
26 var status = Drupal.eu_cookie_compliance.getCurrentStatus();
27 var clicking_confirms = settings.popup_clicking_confirmation;
28 var agreed_enabled = settings.popup_agreed_enabled;
29 var popup_hide_agreed = settings.popup_hide_agreed;
33 if (!clicking_confirms) {
34 $('a, input[type=submit]').bind('click.eu_cookie_compliance', function () {
35 if (!agreed_enabled) {
36 Drupal.eu_cookie_compliance.setStatus(1);
39 Drupal.eu_cookie_compliance.changeStatus(next_status);
42 $('.agree-button').click(function () {
43 if (!agreed_enabled) {
44 Drupal.eu_cookie_compliance.setStatus(1);
47 Drupal.eu_cookie_compliance.changeStatus(next_status);
50 Drupal.eu_cookie_compliance.createPopup(settings.popup_html_info);
52 else if (status === 1) {
53 Drupal.eu_cookie_compliance.createPopup(settings.popup_html_agreed);
54 if (popup_hide_agreed) {
55 $('a, input[type=submit]').bind('click.eu_cookie_compliance_hideagreed', function () {
56 Drupal.eu_cookie_compliance.changeStatus(2);
62 // Nothing to show here.
68 Drupal.eu_cookie_compliance = {};
70 Drupal.eu_cookie_compliance.createPopup = function (html) {
72 .attr({id: 'sliding-popup'})
73 .height(drupalSettings.eu_cookie_compliance.popup_height)
74 .width(drupalSettings.eu_cookie_compliance.popup_width)
76 var height = popup.height();
77 if (drupalSettings.eu_cookie_compliance.popup_position) {
78 popup.prependTo('body');
80 .attr({class: 'sliding-popup-top clearfix'})
84 .animate({top: 0}, drupalSettings.eu_cookie_compliance.popup_delay);
87 popup.appendTo('body');
89 .attr({class: 'sliding-popup-bottom'})
93 .animate({bottom: 0}, drupalSettings.eu_cookie_compliance.popup_delay);
96 background: '#' + drupalSettings.eu_cookie_compliance.popup_bg_hex
97 }).find('h2, p').css('color', '#' + drupalSettings.eu_cookie_compliance.popup_text_hex);
98 Drupal.eu_cookie_compliance.attachEvents();
101 Drupal.eu_cookie_compliance.attachEvents = function () {
102 var clicking_confirms = drupalSettings.eu_cookie_compliance.popup_clicking_confirmation;
103 var agreed_enabled = drupalSettings.eu_cookie_compliance.popup_agreed_enabled;
104 $('.find-more-button').bind('click', function () {
105 if (drupalSettings.eu_cookie_compliance.popup_link_new_window) {
106 window.open(drupalSettings.eu_cookie_compliance.popup_link);
109 window.location.href = drupalSettings.eu_cookie_compliance.popup_link;
112 $('.agree-button').bind('click', function () {
114 if (!agreed_enabled) {
115 Drupal.eu_cookie_compliance.setStatus(1);
118 if (clicking_confirms) {
119 $('a, input[type=submit]').unbind('click.eu_cookie_compliance');
121 Drupal.eu_cookie_compliance.changeStatus(next_status);
123 $('.hide-popup-button').bind('click', function () {
124 Drupal.eu_cookie_compliance.changeStatus(2);
128 Drupal.eu_cookie_compliance.getCurrentStatus = function () {
129 var name = 'cookie-agreed';
130 var result = Drupal.eu_cookie_compliance.getCookie(name);
132 return parseInt(result);
135 Drupal.eu_cookie_compliance.changeStatus = function (value) {
136 var status = Drupal.eu_cookie_compliance.getCurrentStatus();
137 if (status === value) {
140 if (drupalSettings.eu_cookie_compliance.popup_position) {
141 $('.sliding-popup-top').animate({top: $('#sliding-popup').height() * -1}, drupalSettings.eu_cookie_compliance.popup_delay, function () {
143 $('#sliding-popup').html(drupalSettings.eu_cookie_compliance.popup_html_agreed).animate({top: 0}, drupalSettings.eu_cookie_compliance.popup_delay);
144 Drupal.eu_cookie_compliance.attachEvents();
147 $('#sliding-popup').remove();
152 $('.sliding-popup-bottom').animate({bottom: $('#sliding-popup').height() * -1}, drupalSettings.eu_cookie_compliance.popup_delay, function () {
154 $('#sliding-popup').html(drupalSettings.eu_cookie_compliance.popup_html_agreed).animate({bottom: 0}, drupalSettings.eu_cookie_compliance.popup_delay);
155 Drupal.eu_cookie_compliance.attachEvents();
158 $('#sliding-popup').remove();
162 Drupal.eu_cookie_compliance.setStatus(value);
165 Drupal.eu_cookie_compliance.setStatus = function (status) {
166 var date = new Date();
167 date.setDate(date.getDate() + 100);
168 var cookie = 'cookie-agreed=' + status + ';expires=' + date.toUTCString() + ';path=' + drupalSettings.path.baseUrl;
169 if (drupalSettings.eu_cookie_compliance.domain) {
170 cookie += ';domain=' + drupalSettings.eu_cookie_compliance.domain;
172 document.cookie = cookie;
175 Drupal.eu_cookie_compliance.hasAgreed = function () {
176 var status = Drupal.eu_cookie_compliance.getCurrentStatus();
177 if (status === 1 || status === 2) {
184 * Verbatim copy of Drupal.comment.getCookie().
186 Drupal.eu_cookie_compliance.getCookie = function (name) {
187 var search = name + '=';
188 var returnValue = '0';
190 if (document.cookie.length > 0) {
191 var offset = document.cookie.indexOf(search);
193 offset += search.length;
194 var end = document.cookie.indexOf(';', offset);
196 end = document.cookie.length;
198 returnValue = decodeURIComponent(document.cookie.substring(offset, end).replace(/\+/g, '%20'));
204 Drupal.eu_cookie_compliance.cookiesEnabled = function () {
205 var cookieEnabled = (navigator.cookieEnabled);
206 if (typeof navigator.cookieEnabled === 'undefined' && !cookieEnabled) {
207 document.cookie = 'testcookie';
208 cookieEnabled = (document.cookie.indexOf('testcookie') !== -1);
210 return (cookieEnabled);
213 })(jQuery, Drupal, drupalSettings);