2 * Prompts the user for their consent before displaying external media.
4 * @author Alexander Ebert
5 * @copyright 2001-2020 WoltLab GmbH
6 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
9 import * as Ajax from "../../Ajax";
10 import * as Core from "../../Core";
11 import DomChangeListener from "../../Dom/Change/Listener";
12 import DomUtil from "../../Dom/Util";
13 import User from "../../User";
16 private enableAll = false;
17 private readonly knownButtons = new WeakSet();
20 if (window.sessionStorage.getItem(`${Core.getStoragePrefix()}user-consent`) === "all") {
21 this.enableAll = true;
24 this.registerEventListeners();
26 DomChangeListener.add("WoltLabSuite/Core/Ui/Message/UserConsent", () => this.registerEventListeners());
29 private registerEventListeners(): void {
31 this.enableAllExternalMedia();
33 document.querySelectorAll(".jsButtonMessageUserConsentEnable").forEach((button: HTMLAnchorElement) => {
34 if (!this.knownButtons.has(button)) {
35 this.knownButtons.add(button);
37 button.addEventListener("click", (ev) => this.click(ev));
43 private click(event: MouseEvent): void {
44 event.preventDefault();
46 this.enableAll = true;
48 this.enableAllExternalMedia();
53 actionName: "saveUserConsent",
54 className: "wcf\\data\\user\\UserAction",
59 window.sessionStorage.setItem(`${Core.getStoragePrefix()}user-consent`, "all");
63 private enableExternalMedia(container: HTMLElement): void {
64 if (container.dataset.target) {
65 document.getElementById(container.dataset.target)!.hidden = false;
67 const payload = atob(container.dataset.payload!);
68 DomUtil.insertHtml(payload, container, "before");
74 private enableAllExternalMedia(): void {
75 document.querySelectorAll(".messageUserConsent").forEach((el: HTMLElement) => this.enableExternalMedia(el));
79 let userConsent: UserConsent;
81 export function init(): void {
83 userConsent = new UserConsent();