FRIDAY SALE! • EXTRA 10% OFF + FREE SHIPPING DEAL | CODE:FRIDAY10

0

Your Cart is Empty

Nature Wall Art

) */ (function () { var PARAM_KEYS = ["gclid", "wbraid", "gbraid"]; var STORAGE_KEY = "ad_click_ids"; var MAX_AGE_DAYS = 90; function now() { return Date.now(); } function days(ms) { return ms / (24 * 60 * 60 * 1000); } function getParam(name) { var s = window.location.search; if (!s) return ""; var params = new URLSearchParams(s); // Make param lookup case-insensitive var lower = name.toLowerCase(); for (const [k, v] of params.entries()) { if (k.toLowerCase() === lower) return v || ""; } return ""; } function loadStored() { try { var raw = localStorage.getItem(STORAGE_KEY); if (!raw) return {}; var obj = JSON.parse(raw); // prune old records if (obj._ts && days(now() - obj._ts) > MAX_AGE_DAYS) return {}; return obj || {}; } catch (e) { return {}; } } function saveStored(obj) { try { obj._ts = now(); localStorage.setItem(STORAGE_KEY, JSON.stringify(obj)); } catch (e) {} } function sanitize(val) { if (typeof val !== "string") val = String(val || ""); // keep it small & clean val = val.trim().slice(0, 200); return val; } function collectIdsFromUrl() { var out = {}; PARAM_KEYS.forEach(function (k) { var v = getParam(k); if (v) out[k] = sanitize(v); }); return out; } function merge(a, b) { var out = Object.assign({}, a || {}); Object.keys(b || {}).forEach(function (k) { if (b[k]) out[k] = b[k]; }); return out; } async function getCartAttributes() { try { const res = await fetch("/cart.js", { credentials: "same-origin" }); if (!res.ok) return {}; const cart = await res.json(); return cart && cart.attributes ? cart.attributes : {}; } catch (e) { return {}; } } async function updateCartAttributes(attrs) { // Only send non-empty attributes var payload = { attributes: {} }; Object.keys(attrs).forEach(function (k) { if (attrs[k]) payload.attributes[k] = attrs[k]; }); if (!Object.keys(payload.attributes).length) return; try { await fetch("/cart/update.js", { method: "POST", credentials: "same-origin", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload) }); } catch (e) { // swallow; we don't want to break the page } } async function sync() { // 1) read existing stored ids var stored = loadStored(); // 2) collect any fresh ids from URL and merge var fromUrl = collectIdsFromUrl(); var merged = merge(stored, fromUrl); // 3) persist if changed var changed = JSON.stringify(stored) !== JSON.stringify(merged); if (changed) saveStored(merged); // 4) push into cart attributes if anything is new/not present var cartAttrs = await getCartAttributes(); var toPush = {}; ["gclid", "wbraid", "gbraid"].forEach(function (k) { if (merged[k] && cartAttrs[k] !== merged[k]) { toPush[k] = merged[k]; } }); // add a simple provenance flag (optional) if (Object.keys(toPush).length) { toPush["_ad_ids_source"] = "theme_script"; await updateCartAttributes(toPush); } } // Run after DOM is ready but no need to wait for onload if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", sync); } else { sync(); } })();