PageSourceSearch

https://changing-cities.org/wp-content/plugins/cc-user-consent/js/…/newsletter-popup.build.js?ver=1761837729

js changing-cities.org collected 2026-09-24 21:34:00 UTC 3,616 bytes, 88 lines download raw bytes

1import { getSavedSettings } from "./user-consent-D15JHZfi.js";
2
3//#region js/src/newsletter-popup.ts
4async function initNewsletterPopup() {
5	if (!Boolean(window.HTMLDialogElement)) return "No native dialog available";
6	handleNewsletterFormSubmit();
7	if (window.location.pathname.startsWith("/newsletter")) return "Already on newsletter page";
8	if (getSavedSettings() === null) return "No saved consent settings";
9	const newsletterSettings = getNewsletterSettings();
10	if (newsletterSettings.subscribed) return "Subscribed";
11	if (!ccNewsletterPopupData.content) return "No Newsletter popup content";
12	const timeDifference = Date.now() - newsletterSettings.lastDisplayed;
13	const SHOW_AGAIN_AFTER_DAYS = ccNewsletterPopupData?.showAfterDays ?? 7;
14	if (SHOW_AGAIN_AFTER_DAYS <= 0) return "Show again after is set to 0 days";
15	if (timeDifference < SHOW_AGAIN_AFTER_DAYS * 24 * 60 * 60 * 1e3) return `Recently shown (${Math.round(timeDifference / 1e3)} seconds)`;
16	localStorage.setItem("wwb-newsletter-popup", JSON.stringify({
17		...newsletterSettings,
18		lastDisplayed: Date.now()
19	}));
20	const dialogElement = createNewsletterDialog();
21	const delay = ccNewsletterPopupData?.delay ?? 3;
22	await new Promise((resolve) => setTimeout(resolve, 500));
23	window.addEventListener("scroll", () => {
24		setTimeout(() => {
25			dialogElement.showModal();
26			dialogElement.focus();
27		}, delay * 1e3);
28	}, { once: true });
29	return `Show new newsletter popup ${delay}s after first scroll interaction.`;
30}
31try {
32	initNewsletterPopup().then((result) => {
33		console.log(`Newsletter Popup initialized: ${result}`);
34	});
35} catch (error) {
36	console.log("Error initializing newsletter popup");
37	console.error(error);
38}
39function getNewsletterSettings() {
40	const defaultSettings = {
41		lastDisplayed: 0,
42		subscribed: false
43	};
44	try {
45		const savedSettings = JSON.parse(localStorage.getItem("wwb-newsletter-popup") || "");
46		if (Number.isInteger(savedSettings.lastDisplayed) && typeof savedSettings.subscribed === "boolean") return savedSettings;
47	} catch (error) {
48		console.error("No saved newsletter settings");
49	}
50	return defaultSettings;
51}
52function createNewsletterDialog() {
53	const dialogElement = document.createElement("dialog");
54	dialogElement.classList.add("cc-newsletter-popup");
55	dialogElement.setAttribute("closedBy", "closerequest");
56	dialogElement.setAttribute("aria-label", "Newsletter-Werbung	");
57	const closeButton = document.createElement("button");
58	closeButton.classList.add("cc-newsletter-popup__close-button");
59	closeButton.setAttribute("aria-label", "Schließen");
60	closeButton.title = "Schließen";
61	closeButton.type = "button";
62	closeButton.addEventListener("click", () => dialogElement.close());
63	closeButton.innerHTML = `&times;`;
64	dialogElement.appendChild(closeButton);
65	dialogElement.insertAdjacentHTML("beforeend", `<div class="cc-newsletter-popup__content">${ccNewsletterPopupData?.content}</div>`);
66	document.body.appendChild(dialogElement);
67	return dialogElement;
68}
69/**
70* Attach submit handler to the newsletter form, if present.
71*
72* On submit, marks the newsletter as subscribed and updates the lastDisplayed timestamp
73* in localStorage. Assumes the form selector `#caldera_form_1 form`.
74*/
75function handleNewsletterFormSubmit() {
76	const form = document.querySelector("#caldera_form_1 form");
77	if (!(form instanceof HTMLFormElement)) return;
78	form.addEventListener("submit", (e) => {
79		console.log("Submit Newsletter form");
80		localStorage.setItem("wwb-newsletter-popup", JSON.stringify({
81			lastDisplayed: Date.now(),
82			subscribed: true
83		}));
84	});
85}
86
87//#endregion
88//# sourceMappingURL=newsletter-popup.build.js.map

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.