UNPKG

@stormid/cookie-banner

Version:

GDPR compliant cookie banner

3 lines (2 loc) 17.1 kB
function e(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}function t(){return t=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},t.apply(null,arguments)}var n=["button","a"],a=["a[href]","area[href]","input:not([disabled]):not([type=hidden])","select:not([disabled])","textarea:not([disabled])","button:not([disabled])","iframe","object","embed","[contenteditable]",'[tabindex]:not([tabindex="-1"])'],s="banner.consent",r=function(e){document.cookie=[e.settings.name+"="+btoa(JSON.stringify({consent:e.consent}))+";","expires="+new Date((new Date).getTime()+24*e.settings.expiry*60*60*1e3).toGMTString()+";",e.settings.path?"path="+e.settings.path+";":"",e.settings.domain?"domain="+e.settings.domain+";":"",e.settings.samesite?"SameSite="+e.settings.samesite+";":"",e.settings.secure?"secure":""].join("")},i=function(e){document.cookie.split("; ").map(function(e){return{name:e.split("=")[0],value:e.split("=")[1],expiry:"Thu, 01 Jan 1970 00:00:01 GMT"}}).map(function(t){return function(e,t){return document.cookie=[t.name+"="+t.value+";","expires="+t.expiry+";","path="+e.settings.path+";",e.settings.domain?"domain="+e.settings.domain+";":"",e.settings.samesite?"SameSite="+e.settings.samesite+";":"",e.settings.secure?"secure":""].join("")}(e,t)})},o=function(e){return/radio|checkbox/i.test(e.type)},c=function(e,t){return!o(t)&&function(e){return null!=e.value&&e.value.length>0}(t)&&(e=t.value),o(t)&&t.checked&&(Array.isArray(e)?e.push(t.value):e=[t.value]),e},l="ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|be|bf|bg|bh|bi|bj|bm|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|cl|cm|cn|co|cr|cu|cv|cw|cx|cz|de|dj|dk|dm|do|dz|ec|ee|eg|es|et|eu|fi|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|im|in|io|iq|ir|is|it|je|jo|jp|kg|ki|km|kn|kp|kr|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|na|nc|ne|nf|ng|nl|no|nr|nu|nz|om|pa|pe|pf|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|yt".split("|"),u="netlify|azurewebsites|com|edu|gov|net|mil|org|nom|sch|caa|res|off|gob|int|tur|ip6|uri|urn|asn|act|nsw|qld|tas|vic|pro|biz|adm|adv|agr|arq|art|ato|bio|bmd|cim|cng|cnt|ecn|eco|emp|eng|esp|etc|eti|far|fnd|fot|fst|g12|ggf|imb|ind|inf|jor|jus|leg|lel|mat|med|mus|not|ntr|odo|ppg|psc|psi|qsl|rec|slg|srv|teo|tmp|trd|vet|zlg|web|ltd|sld|pol|fin|k12|lib|pri|aip|fie|eun|sci|prd|cci|pvt|mod|idv|rel|sex|gen|nic|abr|bas|cal|cam|emr|fvg|laz|lig|lom|mar|mol|pmn|pug|sar|sic|taa|tos|umb|vao|vda|ven|mie|北海道|和歌山|神奈川|鹿児島|ass|rep|tra|per|ngo|soc|grp|plc|its|air|and|bus|can|ddr|jfk|mad|nrw|nyc|ski|spy|tcm|ulm|usa|war|fhs|vgs|dep|eid|fet|fla|flå|gol|hof|hol|sel|vik|cri|iwi|ing|abo|fam|gok|gon|gop|gos|aid|atm|gsm|sos|elk|waw|est|aca|bar|cpa|jur|law|sec|plo|www|bir|cbg|jar|khv|msk|nov|nsk|ptz|rnd|spb|stv|tom|tsk|udm|vrn|cmw|kms|nkz|snz|pub|fhv|red|ens|nat|rns|rnu|bbs|tel|bel|kep|nhs|dni|fed|isa|nsn|gub|e12|tec|орг|обр|упр|alt|nis|jpn|mex|ath|iki|nid|gda|inc".split("|"),d=function(e){return[].slice.call(e.querySelectorAll(a.join(","))).filter(function(e){return e.offsetWidth>0||e.offsetHeight>0})},p=function(e,t){return function(){var n=new CustomEvent(e,{bubbles:!0,detail:{getState:t.getState}});window.document.dispatchEvent(n)}},f=function(){[].slice.call(document.querySelectorAll("[data-iframe-src]")).forEach(function(e){var t=document.createElement("iframe");t.src=e.getAttribute("data-iframe-src"),e.hasAttribute("data-iframe-height")&&(t.style.height=e.getAttribute("data-iframe-height")),t.setAttribute("title",e.getAttribute("data-iframe-title")||"iFrame embed"),e.hasAttribute("data-iframe-width")&&(t.style.width=e.getAttribute("data-iframe-width")),t.setAttribute("tabindex","0"),t.setAttribute("frameborder","0"),t.setAttribute("webkitallowfullscreen","webkitallowfullscreen"),t.setAttribute("mozallowfullscreen","mozallowfullscreen"),t.setAttribute("allowfullscreen","allowfullscreen"),e.parentNode.appendChild(t),e.parentNode.removeChild(e)})},m=function(e){!function(e,t,n,a,s){e[a]=e[a]||[],e[a].push({"gtm.start":(new Date).getTime(),event:"gtm.js"});var r=t.getElementsByTagName(n)[0],i=t.createElement(n);i.async=!0,i.src="https://www.googletagmanager.com/gtm.js?id="+s,r.parentNode.insertBefore(i,r)}(window,document,"script","dataLayer",e)},g=function(e,t){return void 0===t&&(t="update"),function(){var n=e.getState(),a=n.consent,s=n.settings.euConsentTypes;if(s){var r=Object.keys(s).reduce(function(e,n){return Object.keys(a).length>0&&void 0===a[s[n]]&&console.warn("Cannot find consent type '"+s[n]+"' in preferences cookie, check your euConsentTypes configuration matches your cookie types"),e[n]=a[s[n]]&&"update"===t?"granted":"denied",e},{});"update"!==t&&(r.wait_for_update=500),function(){window.dataLayer=window.dataLayer||[],window.dataLayer.push(arguments)}("consent",t,r)}}},b={name:".CookiePreferences",path:"/",domain:"localhost"===window.location.hostname?"":"."+function(e){for(var t=(e=e.replace(/^www\./,"")).split(".");t.length>3;)t.shift();return 3===t.length&&-1===u.indexOf(t[1])&&-1===l.indexOf(t[2])&&t.shift(),t.join(".")}(window.location.hostname),secure:!0,samesite:"strict",expiry:365,types:{},necessary:[],policyURL:"/cookie-policy/#preferences",classNames:{banner:"privacy-banner",acceptBtn:"privacy-banner__accept",rejectBtn:"privacy-banner__reject",submitBtn:"privacy-banner__submit",optionsBtn:"privacy-banner__options",field:"privacy-banner__field",form:"privacy-banner__form",fieldset:"privacy-banner__fieldset",legend:"privacy-banner__legend",formContainer:"privacy-banner__form-container",formMessage:"privacy-banner__form-msg",formAnnouncement:"privacy-banner__form-announcement",title:"privacy-banner__form-title",description:"privacy-banner__form-description",bannerToggle:"on--privacy-banner-toggle",bannerToggleTrigger:"js-toggle-btn"},hideBannerOnFormPage:!0,trapTab:!1,savedMessage:"Your settings have been saved.",bannerTemplate:function(e){return'<div role="region" aria-live="polite" aria-label="Your privacy" class="'+e.classNames.banner+'">\n <div class="privacy-content">\n <div class="wrap">\n \x3c!--googleoff: all--\x3e\n <div class="privacy-banner__title">Cookies</div>\n <p>We use cookies to improve your experience on our site and show you personalised advertising.</p>\n <p>Find out more from our <a class="privacy-banner__link" rel="noopener noreferrer nofollow" href="/privacy-policy">privacy policy</a> and <a class="privacy-banner__link" rel="noopener noreferrer nofollow" href="'+e.policyURL+'">cookie policy</a>.</p>\n <button type="button" class="btn btn--primary '+e.classNames.acceptBtn+'">Accept all</button>\n <button type="button" class="btn btn--primary '+e.classNames.rejectBtn+'">Reject all</button>\n <a class="privacy-banner__link '+e.classNames.optionsBtn+'" rel="noopener noreferrer nofollow" href="'+e.policyURL+'">Your options</a>\n \x3c!--googleon: all--\x3e\n </div>\n </div>\n </div>'},messageTemplate:function(e){return'<div class="'+e.settings.classNames.formMessage+'" aria-hidden="true">'+e.settings.savedMessage+"</div>"},formTemplate:function(e){return'<form id="preferences" class="'+e.settings.classNames.form+'" novalidate>\n '+Object.keys(e.settings.types).map(function(t){return'<fieldset class="'+e.settings.classNames.fieldset+'">\n <legend class="'+e.settings.classNames.legend+'">\n <span class="'+e.settings.classNames.title+'">'+e.settings.types[t].title+'</span>\n <span class="'+e.settings.classNames.description+'">'+e.settings.types[t].description+'</span>\n </legend>\n <div class="form-row">\n <div class="relative">\n <label class="privacy-banner__label">\n <input\n class="'+e.settings.classNames.field+'"\n type="radio"\n name="privacy-'+t.split(" ")[0].replace(" ","-")+'"\n value="1"\n '+(1===e.consent[t]?"checked":"")+'>\n <span class="privacy-banner__label-text">I am OK with this</span>\n <span class="privacy-banner__label-description">'+e.settings.types[t].labels.yes+'</span>\n </label> \n </div>\n </div>\n <div class="form-row">\n <div class="relative">\n <label class="privacy-banner__label">\n <input\n class="'+e.settings.classNames.field+'"\n type="radio"\n name="privacy-'+t.split(" ")[0].replace(" ","-")+'"\n value="0"\n '+(0===e.consent[t]?"checked":"")+'>\n <span class="privacy-banner__label-text">No thank you</span>\n <span class="privacy-banner__label-description">'+e.settings.types[t].labels.no+"</span>\n </label> \n </div>\n </div>\n </fieldset>"}).join("")+'\n <button class="'+e.settings.classNames.submitBtn+'"'+(Object.keys(e.consent).length!==Object.keys(e.settings.types).length?" disabled":"")+">Save my settings</button>\n </form>"}},y=function(e,t){return Object.assign({},e,{consent:Object.assign({},e.consent,t)})},v=function(e){return function(n){!function(e){Object.keys(e.consent).forEach(function(t){e.settings.types[t]&&!0!==e.settings.types[t].executed&&e.consent[t]&&Boolean(e.consent[t])&&e.settings.types[t].fns&&e.settings.types[t].fns.forEach(function(t){return t(e)})})}(n),e.update(function(e,t){return Object.assign({},e,{settings:Object.assign({},e.settings,{types:Object.assign({},e.settings.types,t)})})}(n,Object.keys(n.settings.types).reduce(function(e,a){return e[a]=t({},n.settings.types[a],{executed:n.settings.types[a].executed||n.consent[a]&&Boolean(n.consent[a])}),e},{})))}},h=function(e){e.settings.necessary.forEach(function(t){return t(e)})},w=function(e){return function(){var t=e.getState();t.bannerOpen||t.settings.hideBannerOnFormPage&&document.querySelector("."+t.settings.classNames.formContainer)||(document.body.firstElementChild.insertAdjacentHTML("beforebegin",t.settings.bannerTemplate(t.settings)),e.update(function(e,t){return Object.assign({},e,{banner:t.banner,bannerOpen:t.bannerOpen})}(t,{banner:document.querySelector("."+t.settings.classNames.banner),bannerOpen:!0}),[p("banner.show",e)]),window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"stormcb_display"}))}},k=function(e){return function(){var t=e.getState();if(t.banner){var a=function(e){return n.map(function(t){return t+"."+e}).join(", ")},o=function(e,n){var a=Object.keys(t.settings.types).reduce(function(e,t){return e[t]=n,e},{});return{consentObject:a,analyticsObject:Object.entries(a).reduce(function(e,t){return e["stormcb_"+t[0]]=t[1],e},{event:"stormcb_"+e+"_all"})}},c=[].slice.call(document.querySelectorAll(a(t.settings.classNames.acceptBtn))),l=[].slice.call(document.querySelectorAll(a(t.settings.classNames.rejectBtn)));t.settings.trapTab&&document.addEventListener("keydown",t.keyListener),c.forEach(function(t){t.addEventListener("click",function(t){var n=o("accept",1),a=n.consentObject,c=n.analyticsObject,l=e.getState();e.update(y(l,a),[i,r,v(e),O(e),_(e),function(){window.dataLayer=window.dataLayer||[],window.dataLayer.push(c)},p(s,e),g(e)])})}),l.forEach(function(t){t.addEventListener("click",function(t){var n=o("reject",0),a=n.consentObject,i=n.analyticsObject,c=e.getState();e.update(y(c,a),[r,O(e),_(e),function(){window.dataLayer=window.dataLayer||[],window.dataLayer.push(i)},p(s,e),g(e)])})})}}},j=function(e){return function(t){var n;e.getState().banner&&9===t.keyCode&&(n=e.getState(),function(e){var t=d(n.banner),a=t.indexOf(document.activeElement);e.shiftKey&&0===a?(e.preventDefault(),t[t.length-1].focus()):e.shiftKey||a!==t.length-1||(e.preventDefault(),t[0].focus())})(t)}},O=function(e){return function(){var t=e.getState(),n=t.banner;n&&n.parentNode&&(n.parentNode.removeChild(n),e.update(function(e){return Object.assign({},e,{bannerOpen:!1})}(t),[p("banner.hide",e)])),t.settings.trapTab&&document.removeEventListener("keydown",t.keyListener)}},_=function(e){return function(){var t=e.getState(),n=document.querySelector("."+t.settings.classNames.formContainer);if(n){n.innerHTML=t.settings.formTemplate(function(e){return Object.keys(e.consent).length>0?e:Object.assign({},e,{consent:Object.keys(e.settings.types).reduce(function(t,n){return e.settings.types[n].suggested&&(t[n]=1),t},{})})}(t));var a=document.querySelector("."+t.settings.classNames.form),o=document.querySelector("."+t.settings.classNames.submitBtn),l=[].slice.call(document.querySelectorAll("."+t.settings.classNames.field)).reduce(function(e,t){var n=t.getAttribute("name").replace("privacy-","");return e[n]?e[n].push(t):e[n]=[t],e},{}),u=document.querySelector("."+t.settings.classNames.formAnnouncement)||document.body.appendChild(Object.assign(document.createElement("div"),{className:t.settings.classNames.formAnnouncement,role:"alert"})),d=function(){var e=Object.keys(l).reduce(function(e,t){var n=l[t].reduce(c,"");return n&&(e[t]=parseInt(n,10)),e},{});return{consentObject:e,analyticsObject:Object.entries(e).reduce(function(e,t){return e["stormcb_"+t[0]]=t[1],e},{event:"stormcb_save"})}},f=function(e){Object.keys(d().consentObject).length===Object.keys(l).length&&(o.removeAttribute("disabled"),a.removeEventListener("change",f))};o.hasAttribute("disabled")&&a.addEventListener("change",f),a.addEventListener("submit",function(t){t.preventDefault();var n=d(),a=n.consentObject,c=n.analyticsObject,l=e.getState();e.update(y(l,a),[i,r,v(e),O(e),function(){window.dataLayer=window.dataLayer||[],window.dataLayer.push(c)},p(s,e),S(o),x(u),g(e)])}),window.location.hash.substring(1)===a.id&&window.scrollTo(0,a.getBoundingClientRect().top+window.scrollY)}}},S=function(e){return function(t){e.insertAdjacentHTML("afterend",t.settings.messageTemplate(t)),e.setAttribute("disabled","disabled"),window.setTimeout(function(){e.parentNode.removeChild(e.nextElementSibling),e.removeAttribute("disabled")},3e3)}},x=function(e){return function(t){e.textContent=t.settings.savedMessage,window.setTimeout(function(){e.textContent=""},3e3)}},A=function(t){return function(t){if(function(){try{document.cookie="cookietest=1";var e=-1!==document.cookie.indexOf("cookietest=");return document.cookie="cookietest=1; expires=Thu, 01-Jan-1970 00:00:01 GMT",e}catch(e){return!1}}()){var n,a=(n={},{update:function(e,t){n=null!=e?e:n,t&&t.forEach(function(e){return e(n)})},getState:function(){return n}}),s=function(t){try{var n=function(e){for(var t=document.cookie.split("; "),n=0;n<=t.length;n++){if(!t[n])return!1;var a=t[n].split("=");if(a[0]===e.name)return window.atob(a[1])}return!1}(t);if(!n)return[!1,{}];var a=JSON.parse(n).consent,s=void 0!==a;return function(t,n){if(t.length!==n.length)return!1;for(var a,s=function(t){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(n)return(n=n.call(t)).next.bind(n);if(Array.isArray(t)||(n=function(t,n){if(t){if("string"==typeof t)return e(t,n);var a={}.toString.call(t).slice(8,-1);return"Object"===a&&t.constructor&&(a=t.constructor.name),"Map"===a||"Set"===a?Array.from(t):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?e(t,n):void 0}}(t))){n&&(t=n);var a=0;return function(){return a>=t.length?{done:!0}:{done:!1,value:t[a++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(n);!(a=s()).done;)if(-1===t.indexOf(a.value))return!1;return!0}(Object.keys(a),Object.keys(t.types))?[s,a||{}]:[!1,{}]}catch(e){return[!1,{}]}}(t),r=s[0],i=s[1];return a.update({settings:t,bannerOpen:!1,keyListener:j(a),consent:i,utils:{renderIframe:f,gtmSnippet:m}},[h,g(a,"default"),v(a)].concat(r?[]:[w(a)],[_(a),k(a)],r?[g(a)]:[])),{getState:a.getState,showBanner:function(e){!function(e){return function(t){if(w(e)(),e.getState().bannerOpen){_(e)();var n=d(document.body.firstElementChild);n.length>0&&n[0].focus(),t&&t.call&&t(e.getState())}}}(a)(e),k(a)()},renderForm:_(a)}}}(Object.assign({},b,t))};export{A as default}; //# sourceMappingURL=index.modern.js.map