cookie
This commit is contained in:
@@ -4,25 +4,32 @@ const CATEGORY_CONFIG = {
|
|||||||
4: { showLocation: true, webhook: "https://002-001-5dd6e535-4d1c-46bc-9bd9-42ad4bc5f082.odoo4projects.com/webhook/c76e6b4e-af2f-4bc3-9875-6460d0ffc8e3" }, // hosting
|
4: { showLocation: true, webhook: "https://002-001-5dd6e535-4d1c-46bc-9bd9-42ad4bc5f082.odoo4projects.com/webhook/c76e6b4e-af2f-4bc3-9875-6460d0ffc8e3" }, // hosting
|
||||||
5: { showLocation: false, webhook: "https://002-001-5dd6e535-4d1c-46bc-9bd9-42ad4bc5f082.odoo4projects.com/webhook/fd20e194-b821-4b1f-814f-7bb93ae16046" }, // Workshops
|
5: { showLocation: false, webhook: "https://002-001-5dd6e535-4d1c-46bc-9bd9-42ad4bc5f082.odoo4projects.com/webhook/fd20e194-b821-4b1f-814f-7bb93ae16046" }, // Workshops
|
||||||
7: { showLocation: false, webhook: "" }, // modules
|
7: { showLocation: false, webhook: "" }, // modules
|
||||||
// Add more categories as needed
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// --- Helper: Get cookie by name ---
|
||||||
// --- Get URL parameters as an object ---
|
function getCookie(name) {
|
||||||
function getUrlParams() {
|
const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
|
||||||
return Object.fromEntries(new URLSearchParams(window.location.search).entries());
|
return match ? decodeURIComponent(match[2]) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- Add UTM fields to form with defaults ---
|
// --- Helper: Set cookie if not already set ---
|
||||||
|
function setCookieIfEmpty(name, value, days = 90) {
|
||||||
|
if (!value) return;
|
||||||
|
if (getCookie(name)) return; // Don't overwrite
|
||||||
|
const date = new Date();
|
||||||
|
date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
|
||||||
|
document.cookie = `${name}=${encodeURIComponent(value)}; expires=${date.toUTCString()}; path=/; SameSite=Lax`;
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- Add UTM fields to form using cookies ---
|
||||||
function addUtmFields(form) {
|
function addUtmFields(form) {
|
||||||
const utmParams = ["utm_source", "utm_medium", "utm_campaign", "utm_term", "utm_content"];
|
const utmParams = ["utm_source", "utm_medium", "utm_campaign", "utm_term", "utm_content"];
|
||||||
const urlParams = getUrlParams();
|
|
||||||
|
|
||||||
// Define default values
|
|
||||||
const defaults = {
|
const defaults = {
|
||||||
utm_source: "homepage",
|
utm_source: "homepage",
|
||||||
utm_medium: "direct",
|
utm_medium: "direct",
|
||||||
utm_campaign: "none"
|
utm_campaign: "none",
|
||||||
|
utm_term: "",
|
||||||
|
utm_content: ""
|
||||||
};
|
};
|
||||||
|
|
||||||
utmParams.forEach(param => {
|
utmParams.forEach(param => {
|
||||||
@@ -33,8 +40,8 @@ function addUtmFields(form) {
|
|||||||
input.name = param;
|
input.name = param;
|
||||||
form.appendChild(input);
|
form.appendChild(input);
|
||||||
}
|
}
|
||||||
// Use URL param if exists, otherwise fallback to default, else empty string
|
// First check cookie, then fallback to default
|
||||||
input.value = urlParams[param] || defaults[param] || "";
|
input.value = getCookie(param) || defaults[param];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,14 +118,12 @@ function openModal(productHref) {
|
|||||||
form.style.display = "flex";
|
form.style.display = "flex";
|
||||||
confirmation.style.display = "none";
|
confirmation.style.display = "none";
|
||||||
|
|
||||||
// Parse URL /<id>/<price>/<category>/<product>
|
|
||||||
const parts = productHref.split("/").filter(Boolean);
|
const parts = productHref.split("/").filter(Boolean);
|
||||||
const [id, price, category, ...productParts] = parts;
|
const [id, price, category, ...productParts] = parts;
|
||||||
const product = decodeURIComponent(productParts.join("/"));
|
const product = decodeURIComponent(productParts.join("/"));
|
||||||
const categoryNum = parseInt(category, 10);
|
const categoryNum = parseInt(category, 10);
|
||||||
const config = CATEGORY_CONFIG[categoryNum] || { showLocation: false, webhook: "" };
|
const config = CATEGORY_CONFIG[categoryNum] || { showLocation: false, webhook: "" };
|
||||||
|
|
||||||
// Handle location field visibility
|
|
||||||
const locationSelect = document.getElementById("locationSelect");
|
const locationSelect = document.getElementById("locationSelect");
|
||||||
if (config.showLocation) {
|
if (config.showLocation) {
|
||||||
locationSelect.style.display = "block";
|
locationSelect.style.display = "block";
|
||||||
@@ -129,20 +134,14 @@ function openModal(productHref) {
|
|||||||
locationSelect.value = "";
|
locationSelect.value = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update form fields
|
|
||||||
form.querySelector('input[name="id"]').value = id || "";
|
form.querySelector('input[name="id"]').value = id || "";
|
||||||
form.querySelector('input[name="price"]').value = price || "0";
|
form.querySelector('input[name="price"]').value = price || "0";
|
||||||
form.querySelector('input[name="category"]').value = category || "";
|
form.querySelector('input[name="category"]').value = category || "";
|
||||||
form.querySelector('input[name="product"]').value = product || "Unknown";
|
form.querySelector('input[name="product"]').value = product || "Unknown";
|
||||||
|
|
||||||
// Store webhook dynamically for submission
|
|
||||||
form.dataset.webhook = config.webhook || "";
|
form.dataset.webhook = config.webhook || "";
|
||||||
|
|
||||||
// Update display text
|
|
||||||
modal.querySelector("#productText").textContent = `You will buy ${product} for $${price}.`;
|
modal.querySelector("#productText").textContent = `You will buy ${product} for $${price}.`;
|
||||||
|
|
||||||
// Add UTM fields
|
addUtmFields(form); // Read from cookie or defaults
|
||||||
addUtmFields(form);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- Handle Form Submit ---
|
// --- Handle Form Submit ---
|
||||||
|
|||||||
2
public/buyModal.min.js
vendored
2
public/buyModal.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -3,3 +3,4 @@ npm install -g terser
|
|||||||
|
|
||||||
terser buyModal.js -o buyModal.min.js -c -m
|
terser buyModal.js -o buyModal.min.js -c -m
|
||||||
terser tryModal.js -o tryModal.min.js -c -m
|
terser tryModal.js -o tryModal.min.js -c -m
|
||||||
|
terser setCookie.js -o setCookie.min.js -c -m
|
||||||
|
|||||||
36
public/setCookie.js
Normal file
36
public/setCookie.js
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
function setUtmCookies() {
|
||||||
|
// Helper: get query param from URL
|
||||||
|
function getQueryParam(param) {
|
||||||
|
const urlParams = new URLSearchParams(window.location.search);
|
||||||
|
return urlParams.get(param);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Helper: get cookie by name
|
||||||
|
function getCookie(name) {
|
||||||
|
const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
|
||||||
|
return match ? decodeURIComponent(match[2]) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Helper: set cookie if not already set
|
||||||
|
function setCookieIfEmpty(name, value, days = 90) {
|
||||||
|
if (!value) return;
|
||||||
|
if (getCookie(name)) return; // Don't overwrite existing cookie
|
||||||
|
const date = new Date();
|
||||||
|
date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
|
||||||
|
document.cookie = `${name}=${encodeURIComponent(value)}; expires=${date.toUTCString()}; path=/; SameSite=Lax`;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get UTM params
|
||||||
|
const utmSource = getQueryParam('utm_source');
|
||||||
|
const utmMedium = getQueryParam('utm_medium');
|
||||||
|
const utmCampaign = getQueryParam('utm_campaign');
|
||||||
|
|
||||||
|
// Set cookies only if not already present
|
||||||
|
setCookieIfEmpty('utm_source', utmSource, 90);
|
||||||
|
setCookieIfEmpty('utm_medium', utmMedium, 90);
|
||||||
|
setCookieIfEmpty('utm_campaign', utmCampaign, 90);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Run on page load
|
||||||
|
setUtmCookies();
|
||||||
|
|
||||||
1
public/setCookie.min.js
vendored
Normal file
1
public/setCookie.min.js
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
function setUtmCookies(){function e(e){return new URLSearchParams(window.location.search).get(e)}function t(e,t,n=90){if(!t)return;if(function(e){const t=document.cookie.match(new RegExp("(^| )"+e+"=([^;]+)"));return t?decodeURIComponent(t[2]):null}(e))return;const o=new Date;o.setTime(o.getTime()+24*n*60*60*1e3),document.cookie=`${e}=${encodeURIComponent(t)}; expires=${o.toUTCString()}; path=/; SameSite=Lax`}const n=e("utm_source"),o=e("utm_medium"),m=e("utm_campaign");t("utm_source",n,90),t("utm_medium",o,90),t("utm_campaign",m,90)}setUtmCookies();
|
||||||
Reference in New Issue
Block a user