forked from EasyCookies/EasyCookies
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patheasyCookies.min.js
More file actions
28 lines (28 loc) · 7.79 KB
/
easyCookies.min.js
File metadata and controls
28 lines (28 loc) · 7.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
var EasyCookies=function(exports){"use strict";const classes={banner:"easy-cookies-banner",btnsContainer:"easy-cookies-btns-container",title:"easy-cookies-title",text:"easy-cookies-text",acceptBtn:"easy-cookies-accept-btn",rejectBtn:"easy-cookies-reject-btn"},ids={banner:classes.banner+"-id",title:classes.title+"-id",text:classes.text+"-id",btnsContainer:classes.btnsContainer+"-id",acceptBtn:classes.acceptBtn+"-id",rejectBtn:classes.rejectBtn+"-id"};class Data{constructor(){this.title="A quick note about cookies 🍪",this.text="This website uses a few cookies to make things run smoothly",this.acceptBtnText="Accept",this.rejectBtnText="Reject"}}class Scripts{constructor(){this.gtag="",this.gtm=""}}class Style{propsToCss(obj,className){var val,cssProp,ownProps=Object.keys(obj),allProps=Object.getOwnPropertyNames(obj);let res="";for(const prop of ownProps)allProps.indexOf(prop)<0||"string"==typeof(val=obj[prop])&&(cssProp=prop.replace(/([A-Z])/g,"-$1").toLowerCase(),res+=cssProp+`: ${val}; `);return`.${className} { ${res}} `}getCss(className){let res=this.propsToCss(this,className);return null!=this.hover&&(res+=this.propsToCss(this.hover,className+":hover")),res}}class BannerStyle extends Style{constructor(){super(...arguments),this.zIndex="9999",this.color="#263238",this.backgroundColor="white",this.border="1px solid #cfd8dc",this.borderRadius="16px",this.position="fixed",this.bottom="0",this.right="0",this.margin="16px",this.padding="16px",this.maxWidth="420px"}}class TitleStyle extends Style{constructor(){super(...arguments),this.fontWeight="bold",this.fontSize="18px",this.paddingBottom="8px"}}class TextStyle extends Style{constructor(){super(...arguments),this.paddingBottom="16px",this.fontSize="14px"}}class btnsContainerStyle extends Style{constructor(){super(...arguments),this.display="flex",this.flexDirection="row",this.justifyContent="end",this.gap="16px"}}class BtnStyle extends Style{constructor(){super(...arguments),this.fontSize="14px",this.color="#263238",this.backgroundColor="white",this.padding="10px 20px",this.borderRadius="8px",this.border="1px solid #cfd8dc",this.cursor="pointer"}}class AcceptBtnStyle extends BtnStyle{constructor(){super(...arguments),this.backgroundColor="#B3E5FC",this.hover={backgroundColor:"#81D4FA"}}}class RejectBtnStyle extends BtnStyle{constructor(){super(...arguments),this.backgroundColor="#FAFAFA",this.hover={backgroundColor:"#F5F5F5"}}}class Styles{constructor(){this.banner=new BannerStyle,this.text=new TextStyle,this.title=new TitleStyle,this.btnsContainer=new btnsContainerStyle,this.acceptBtn=new AcceptBtnStyle,this.rejectBtn=new RejectBtnStyle}}class Options{constructor(){this.scripts=new Scripts,this.data=new Data,this.styles=new Styles}}function mergeStyles(defaultStyle,customStyle){var mergedStyle=new defaultStyle.constructor;for(const prop in defaultStyle)mergedStyle[prop]=(void 0!==customStyle[prop]?customStyle:defaultStyle)[prop];for(const prop in customStyle)null==mergedStyle[prop]&&(mergedStyle[prop]=customStyle[prop]);return mergedStyle}return exports.Banner=class{constructor(options){this.bannerElement=void 0;var defaultOptions=new Options;options=options?function(defaultOptions,customOptions){var mergedOptions=new Options;return mergedOptions.scripts=Object.assign(Object.assign({},defaultOptions.scripts),customOptions.scripts),mergedOptions.data=Object.assign(Object.assign({},defaultOptions.data),customOptions.data),null!=customOptions.styles?mergedOptions.styles=Object.assign(Object.assign({},defaultOptions.styles),{banner:null!=customOptions.styles.banner?mergeStyles(defaultOptions.styles.banner,customOptions.styles.banner):defaultOptions.styles.banner,acceptBtn:null!=customOptions.styles.acceptBtn?mergeStyles(defaultOptions.styles.acceptBtn,customOptions.styles.acceptBtn):defaultOptions.styles.acceptBtn,rejectBtn:null!=customOptions.styles.rejectBtn?mergeStyles(defaultOptions.styles.rejectBtn,customOptions.styles.rejectBtn):defaultOptions.styles.rejectBtn}):mergedOptions.styles=defaultOptions.styles,mergedOptions}(defaultOptions,options):defaultOptions,this.options=options}hide(){this.bannerElement.style.display="none"}show(){this.bannerElement.style.display="block"}create(){this.bannerElement=document.createElement("div"),this.hide(),this.bannerElement.id=ids.banner,this.bannerElement.className=classes.banner,this.bannerElement.innerHTML=`
<div id="${ids.title}" class="${classes.title}">${this.options.data.title}</div>
<div id="${ids.text}" class="${classes.text}">${this.options.data.text}</div>
<div class="${classes.btnsContainer}">
<button type="button" id="${ids.acceptBtn}" class="${classes.acceptBtn}">
${this.options.data.acceptBtnText}
</button>
<button type="button" id="${ids.rejectBtn}" class="${classes.rejectBtn}">
${this.options.data.rejectBtnText}
</button>
</div>
`,document.body.appendChild(this.bannerElement);var style=document.createElement("style");style.innerHTML=this.options.styles.banner.getCss(classes.banner)+this.options.styles.title.getCss(classes.title)+this.options.styles.text.getCss(classes.text)+this.options.styles.btnsContainer.getCss(classes.btnsContainer)+this.options.styles.acceptBtn.getCss(classes.acceptBtn)+this.options.styles.rejectBtn.getCss(classes.rejectBtn),document.head.appendChild(style),document.getElementById(ids.acceptBtn).addEventListener("click",()=>this.acceptCookies()),document.getElementById(ids.rejectBtn).addEventListener("click",()=>this.rejectCookies())}checkStatus(){switch(localStorage.getItem("EasyCookies")){case"1":case"0":this.hide();break;default:this.show()}}acceptCookies(){localStorage.setItem("EasyCookies","1"),this.gtagConsentGranted(),this.hide()}rejectCookies(){localStorage.setItem("EasyCookies","0"),this.gtagConsentDenied(),this.hide()}gtagAddFunctionScript(){var gTagData=document.createElement("script");gTagData.innerHTML=`window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('consent', 'default', {
'ad_storage': 'denied',
'ad_user_data': 'denied',
'ad_personalization': 'denied',
'analytics_storage': 'denied'
});`,document.head.appendChild(gTagData)}gtagAdd(){var gTag,gtagId=this.options.scripts.gtag,gtmId=this.options.scripts.gtm;void 0!==gtagId&&""!==gtagId?(this.gtagAddFunctionScript(),(gTag=document.createElement("script")).async=!0,gTag.src="https://www.googletagmanager.com/gtag/js?id="+gtagId,document.head.appendChild(gTag),(gTag=document.createElement("script")).innerHTML=`
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '${gtagId}');`,document.head.appendChild(gTag)):void 0!==gtmId&&""!==gtmId&&(this.gtagAddFunctionScript(),(gtagId=document.createElement("script")).innerHTML=`
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','${gtmId}');`,document.head.appendChild(gtagId))}gtagConsentGranted(){var gtagId=this.options.scripts.gtag,gtmId=this.options.scripts.gtm;(void 0!==gtagId&&""!==gtagId||void 0!==gtmId&&""!==gtmId)&>ag("consent","update",{ad_user_data:"granted",ad_personalization:"granted",ad_storage:"granted",analytics_storage:"granted"})}gtagConsentDenied(){var gtagId=this.options.scripts.gtag,gtmId=this.options.scripts.gtm;(void 0!==gtagId&&""!==gtagId||void 0!==gtmId&&""!==gtmId)&>ag("consent","update",{ad_user_data:"denied",ad_personalization:"denied",ad_storage:"denied",analytics_storage:"denied"})}init(){window.addEventListener("load",()=>{this.create(),this.gtagAdd(),this.checkStatus()})}},exports}({});