Skip to content
Snippets Groups Projects
5_ebiFrameworkNotificationBanner.js 6.18 KiB
Newer Older
// Injects the Data Protection notice onto sites
// For guidance on using: https://www.ebi.ac.uk/style-lab/websites/patterns/banner-data-protection.html
Ken Hawkins's avatar
Ken Hawkins committed
function ebiFrameworkCreateDataProtectionBanner() {
  var banner = document.createElement('div');
  var wrapper = document.createElement('div');
  var inner = document.createElement('div');

  // don't accidently create two banners
  if (document.getElementById("data-protection-banner") != null) {
    document.getElementById("data-protection-banner").remove();
  }

  banner.id = "data-protection-banner";
  banner.className = "data-protection-banner";
  banner.style = "position: fixed; background-color: #111; width: 100%; padding: .75rem; left: 0; bottom: 0; color: #eee;"
  wrapper.className = "row";
  wrapper.innerHTML = "" +
    "<div class='columns medium-8 large-9'>" +
    dataProtectionSettings.message +
    "<div class='columns medium-4 large-3 text-right white-color'><a id='data-protection-agree' class=''>I agree, dismiss this banner</a></div>" +
    "";

  document.body.appendChild(banner);
  banner.appendChild(wrapper);

  openDataProtectionBanner();
}

function openDataProtectionBanner() {
  var height = document.getElementById('data-protection-banner').offsetHeight || 0;
  document.getElementById('data-protection-banner').style.display = 'block';
  document.body.style.paddingBottom = height+'px';

  document.getElementById('data-protection-agree').onclick = function() {
    closeDataProtectionBanner();
    return false;
  };
}

function closeDataProtectionBanner() {
  var height = document.getElementById('data-protection-banner').offsetHeight;
  document.getElementById('data-protection-banner').style.display = 'none';
  document.body.style.paddingBottom = '0';
  ebiFrameworkSetCookie(dataProtectionSettings.cookieName, 'true', 90);
function ebiFrameworkSetCookie(c_name, value, exdays) {
  var exdate = new Date();
  var c_value;
  exdate.setDate(exdate.getDate() + exdays);
  // c_value = escape(value) + ((exdays===null) ? "" : ";expires=" + exdate.toUTCString()) + ";domain=.ebi.ac.uk;path=/";
  // document.cookie = c_name + "=" + c_value;
  c_value = escape(value) + ((exdays===null) ? "" : ";expires=" + exdate.toUTCString()) + ";domain=" + document.domain + ";path=/";
  document.cookie = c_name + "=" + c_value;
}

function ebiFrameworkGetCookie(c_name) {
  var i, x, y, ARRcookies=document.cookie.split(";");
  for (i=0; i<ARRcookies.length; i++) {
    x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("="));
    y = ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
    x = x.replace(/^\s+|\s+$/g,"");
    if (x===c_name) {
      return unescape(y);
    }
  }
}

var dataProtectionSettings =  new Object();

/**
 * The main 'brain' of the EBI Data Protection banner.
 * Further documentation at https://www.ebi.ac.uk/style-lab/websites/patterns/banner-data-protection.html
 * @param {string} [targetedFrameworkVersion=generic] targeted Framework version; options: 1.1, 1.2, 1.3, compliance
 */
function ebiFrameworkRunDataProtectionBanner(targetedFrameworkVersion) {
  targetedFrameworkVersion = targetedFrameworkVersion || newDataProtectionNotificationBanner.src.split('legacyRequest=')[1] || 'generic';
  try {

    // remove any old style cookie banner
    switch (targetedFrameworkVersion) {
      case '1.1':
      case '1.2':
        if (document.getElementById("cookie-banner") != null) {
          document.getElementById("cookie-banner").remove();
        }
        document.body.style.paddingBottom = 0;
        break;
      case 'compliance':
        if (document.getElementById("cookie-banner") != null) {
          document.getElementById("cookie-banner").remove();
        }
        document.body.style.paddingTop = 0;
        break;
      default:
        console.warn('You should specify the targetedFrameworkVersion');
    }


    dataProtectionSettings.message = 'This website requires cookies, and the limited processing of your personal data in order to function. By using the site you are agreeing to this as outlined in our <a target="_blank" href="https://www.ebi.ac.uk/data-protection/privacy-notice/embl-ebi-public-website" class="white-color">Privacy Notice</a> and <a target="_blank" href="https://www.ebi.ac.uk/about/terms-of-use" class="white-color">Terms of Use</a>.';
    dataProtectionSettings.serviceId = 'ebi';
    dataProtectionSettings.dataProtectionVersion = '1.0';

    // If there's a div#data-protection-message-configuration, override defaults
    var divDataProtectionBanner = document.getElementById('data-protection-message-configuration');
    if (divDataProtectionBanner !== null) {
      if (typeof divDataProtectionBanner.dataset.message !== "undefined") {
        dataProtectionSettings.message = divDataProtectionBanner.dataset.message;
      }
      if (typeof divDataProtectionBanner.dataset.serviceId !== "undefined") {
        dataProtectionSettings.serviceId = divDataProtectionBanner.dataset.serviceId;
      }
      if (typeof divDataProtectionBanner.dataset.dataProtectionVersion !== "undefined") {
        dataProtectionSettings.dataProtectionVersion = divDataProtectionBanner.dataset.dataProtectionVersion;
      }
    }

    dataProtectionSettings.cookieName = dataProtectionSettings.serviceId + "-v" + dataProtectionSettings.dataProtectionVersion + "-data-protection-accepted";

    // If this version of banner not accpeted, show it:
    if (ebiFrameworkGetCookie(dataProtectionSettings.cookieName) != "true") {
Ken Hawkins's avatar
Ken Hawkins committed
      ebiFrameworkCreateDataProtectionBanner();
Ken Hawkins's avatar
Ken Hawkins committed
  } catch(err) { setTimeout(ebiFrameworkRunDataProtectionBanner, 100); }
}

function resetDataProtectionBanner() {
  document.cookie = dataProtectionSettings.cookieName + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT;domain=" + document.domain + ";path=/";
  ebiFrameworkRunDataProtectionBanner('1.3');
// Fallback for any code that was directly calling the old cookie banner:
// https://github.com/ebiwd/EBI-Framework/blob/6707eff40e15036f735637413deed0dcb7392818/js/ebi-global-includes/script/5_ebiFrameworkCookieBanner.js
function ebiFrameworkCookieBanner() {
  console.warn('You are calling an old function name, update it to ebiFrameworkRunDataProtectionBanner();')
  ebiFrameworkRunDataProtectionBanner('1.3');
// execute
ebiFrameworkRunDataProtectionBanner('1.3');