/* Cookies Directive - The rewrite. Now a jQuery plugin * Version: 2.0.1 * Author: Ollie Phillips * 24 October 2013 */ ;(function($) { $.cookiesDirective = function(options) { // Default Cookies Directive Settings var settings = $.extend({ //Options explicitConsent: true, position: 'top', duration: 10, limit: 0, message: null, cookieScripts: null, privacyPolicyUri: 'privacy.html', inlineAction: false, scriptWrapper: function(){}, // Styling fontFamily: 'helvetica', fontColor: '#FFFFFF', fontSize: '13px', backgroundColor: '#000000', backgroundOpacity: '80', linkColor: '#CA0000', // Messages multipleCookieScriptBeginningLabel: ' We use ', and: ' and ', multipleCookieScriptEndLabel: ' scripts, which all set cookies. ', singleCookieScriptBeginningLabel: ' We use a ', singleCookieScriptEndLabel: ' script which sets cookies.', explicitCookieDeletionWarning: 'You may delete and block all cookies from this site, but parts of the site will not work.', explicitFindOutMore: 'To find out more about cookies on this website, see our', privacyPolicyLinkText: ' privacy policy', explicitCheckboxLabel: 'You must tick the "I accept cookies from this site" box to accept', explicitCookieAcceptanceLabel: 'I accept cookies from this site', explicitCookieAcceptButtonText: 'Continue', impliedDisclosureText: ' More details can be found in our', impliedSubmitText: 'Do not show this message again', }, options); // Perform consent checks if(!getCookie('cookiesDirective')) { if(settings.limit > 0) { // Display limit in force, record the view if(!getCookie('cookiesDisclosureCount')) { setCookie('cookiesDisclosureCount',1,1); } else { var disclosureCount = getCookie('cookiesDisclosureCount'); disclosureCount ++; setCookie('cookiesDisclosureCount',disclosureCount,1); } // Have we reached the display limit, if not make disclosure if(settings.limit >= getCookie('cookiesDisclosureCount')) { disclosure(settings); } } else { // No display limit disclosure(settings); } // If we don't require explicit consent, load up our script wrapping function if(!settings.explicitConsent) { settings.scriptWrapper.call(); } } else { // Cookies accepted, load script wrapping function settings.scriptWrapper.call(); } }; // Used to load external javascript files into the DOM $.cookiesDirective.loadScript = function(options) { var settings = $.extend({ uri: '', appendTo: 'body' }, options); var elementId = String(settings.appendTo); var sA = document.createElement("script"); sA.src = settings.uri; sA.type = "text/javascript"; sA.onload = sA.onreadystatechange = function() { if ((!sA.readyState || sA.readyState == "loaded" || sA.readyState == "complete")) { return; } } switch(settings.appendTo) { case 'head': $('head').append(sA); break; case 'body': $('body').append(sA); break; default: $('#' + elementId).append(sA); } } // Helper scripts // Get cookie var getCookie = function(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); } return null; } // Set cookie var setCookie = function(name,value,days) { if (days) { var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); var expires = "; expires="+date.toGMTString(); } else var expires = ""; document.cookie = name+"="+value+expires+"; path=/"; } // Detect IE < 9 var checkIE = function(){ var version; if (navigator.appName == 'Microsoft Internet Explorer') { var ua = navigator.userAgent; var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})"); if (re.exec(ua) != null) { version = parseFloat(RegExp.$1); } if (version <= 8.0) { return true; } else { if(version == 9.0) { if(document.compatMode == "BackCompat") { // IE9 in quirks mode won't run the script properly, set to emulate IE8 var mA = document.createElement("meta"); mA.content = "IE=EmulateIE8"; document.getElementsByTagName('head')[0].appendChild(mA); return true; } else { return false; } } return false; } } else { return false; } } // Disclosure routines var disclosure = function(options) { var settings = options; settings.css = 'fixed'; // IE 9 and lower has issues with position:fixed, either out the box or in compatibility mode - fix that if(checkIE()) { settings.position = 'top'; settings.css = 'absolute'; } // Any cookie setting scripts to disclose var scriptsDisclosure = ''; if (settings.cookieScripts) { var scripts = settings.cookieScripts.split(','); var scriptsCount = scripts.length; var scriptDisclosureTxt = ''; if(scriptsCount>1) { for(var t=0; t < scriptsCount - 1; t++) { scriptDisclosureTxt += scripts[t] + ', '; } scriptsDisclosure = settings.multipleCookieScriptBeginningLabel + scriptDisclosureTxt.substring(0, scriptDisclosureTxt.length - 2) + settings.and + scripts[scriptsCount - 1] + settings.multipleCookieScriptEndLabel; } else { scriptsDisclosure = setting.singleCookieScriptBeginningLabel + scripts[0] + settings.singleCookieScriptEndLabel; } } // Create overlay, vary the disclosure based on explicit/implied consent // Set our disclosure/message if one not supplied var html = ''; html += '