interface IMaterialCookieBarOptions { header: string; message: string; buttonText: string; } class MaterialCookieBar { public static cookieKey: string = "MaterialCookieConsent"; // #region build //////////////////////////////////////////////////////////////////////////////////////////////////// /// Cookiepopup erstellen /// A Beging, 29.05.2019. /// Options for controlling the operation. //////////////////////////////////////////////////////////////////////////////////////////////////// public static build(options: IMaterialCookieBarOptions): void { if (this.checkConsent()) { return; } let elementId = Math.random().toString(36).slice(2); let mainElement = (document.createElement('div')); mainElement.classList.add("material-cookiebar"); mainElement.id = elementId; let headerElement = (document.createElement('div')); headerElement.innerHTML = options.header; headerElement.classList.add("material-cookiebar-header"); let bodyElement = (document.createElement('div')); bodyElement.innerHTML = options.message; bodyElement.classList.add("material-cookiebar-body"); let buttonElement = this.createButtonDiv(options.buttonText, elementId); headerElement.classList.add("material-cookiebar-header"); mainElement.append(headerElement); mainElement.append(bodyElement); mainElement.append(buttonElement); window.document.body.append(mainElement); } // #endregion // #region giveConsent //////////////////////////////////////////////////////////////////////////////////////////////////// /// Zustimmung zu Cookies geben /// A Beging, 29.05.2019. //////////////////////////////////////////////////////////////////////////////////////////////////// public static giveConsent(): void { const date = new Date(); // Set it expire in 5 years date.setTime(date.getTime() + (5 * 365 * 24 * 60 * 60 * 1000)); // Set it document.cookie = this.cookieKey + "=True; expires=" + date.toUTCString() + "; path=/"; } // #endregion // #region private checkConsent //////////////////////////////////////////////////////////////////////////////////////////////////// /// Prüfen, ob die Zustimmung bereits erteilt wurde /// A Beging, 29.05.2019. /// True if it succeeds, false if it fails. //////////////////////////////////////////////////////////////////////////////////////////////////// private static checkConsent(): boolean { let cookieArray = document.cookie.split(';').map(c => c.trim()); let result = cookieArray.filter(c => { return c.substring(0, this.cookieKey.length) === this.cookieKey }).map(c => c.substring(this.cookieKey.length + 1)); return (result.length > 0); } // #endregion // #region private createButtonDiv //////////////////////////////////////////////////////////////////////////////////////////////////// /// Erstellen des OK Buttons /// A Beging, 29.05.2019. /// The button text. /// The new button div. //////////////////////////////////////////////////////////////////////////////////////////////////// private static createButtonDiv(buttonText: string, mainElementId: string) { let buttonElement = (document.createElement('div')); buttonElement.classList.add("material-cookiebar-button"); let buttonLink = (document.createElement('a')); buttonLink.dataset.id = mainElementId; buttonLink.href = "#"; buttonLink.onclick = ev => { this.giveConsent(); let srcElement = ev.srcElement; let mainElement = window.document.getElementById(srcElement.dataset.id); mainElement.remove(); }; buttonLink.innerHTML = buttonText; buttonElement.append(buttonLink); return buttonElement; } // #endregion }