Files
westfarnandCursor 787f0e48fb Populate the client website template with catalog feature flags.
Extract always-on public/portal/UTM plus optional email_sms, directmail, blog, payments, social, and social_ai so new client sites can be bootstrapped from this seed.

Refs #1
Refs #2

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-26 07:55:26 -05:00

162 lines
4.0 KiB
JavaScript

(function () {
'use strict';
var NOTICE_KEY = 'aiml_analytics_notice';
var LEGACY_CONSENT_KEY = 'aiml_analytics_consent';
var LEGACY_DISABLED_KEY = 'tianji.disabled';
var configEl = document.getElementById('tianji-config');
if (!configEl) {
return;
}
var trackerUrl = configEl.dataset.trackerUrl;
var websiteId = configEl.dataset.websiteId;
var userId = configEl.dataset.userId || '';
function getStorageItem(key) {
try {
return localStorage.getItem(key);
} catch (e) {
return null;
}
}
function setStorageItem(key, value) {
try {
localStorage.setItem(key, value);
} catch (e) {
/* ignore storage errors */
}
}
function removeStorageItem(key) {
try {
localStorage.removeItem(key);
} catch (e) {
/* ignore storage errors */
}
}
function showBanner() {
var banner = document.getElementById('cookie-consent-banner');
if (banner) {
banner.removeAttribute('hidden');
}
}
function hideBanner() {
var banner = document.getElementById('cookie-consent-banner');
if (banner) {
banner.setAttribute('hidden', '');
}
}
function trackEvent(name, data) {
if (window.tianji && typeof window.tianji.track === 'function') {
window.tianji.track(name, data || {});
}
}
function identifyUser() {
if (!userId || !window.tianji || typeof window.tianji.identify !== 'function') {
return;
}
window.tianji.identify({ userId: userId });
}
function loadTracker() {
if (document.querySelector('script[data-tianji-loaded="true"]')) {
identifyUser();
return;
}
var script = document.createElement('script');
script.async = true;
script.defer = true;
script.src = trackerUrl;
script.setAttribute('data-website-id', websiteId);
script.setAttribute('data-do-not-track', 'true');
script.setAttribute('data-tianji-loaded', 'true');
script.onload = function () {
identifyUser();
document.dispatchEvent(new CustomEvent('tianji:ready'));
};
document.head.appendChild(script);
}
function migrateLegacyConsent() {
var legacyConsent = getStorageItem(LEGACY_CONSENT_KEY);
var legacyDisabled = getStorageItem(LEGACY_DISABLED_KEY);
if (legacyConsent === 'accepted') {
setStorageItem(NOTICE_KEY, 'acknowledged');
removeStorageItem(LEGACY_CONSENT_KEY);
removeStorageItem(LEGACY_DISABLED_KEY);
return 'migrated_acknowledged';
}
if (legacyConsent === 'declined' || legacyDisabled === '1') {
removeStorageItem(LEGACY_CONSENT_KEY);
removeStorageItem(LEGACY_DISABLED_KEY);
return 'migrated_declined';
}
return null;
}
function acknowledgeNotice() {
setStorageItem(NOTICE_KEY, 'acknowledged');
hideBanner();
window.aimlTrackWhenReady('notice_acknowledged');
}
function bindBannerControls() {
var acknowledgeBtn = document.getElementById('cookie-consent-acknowledge');
var manageLinks = document.querySelectorAll('[data-open-cookie-preferences]');
if (acknowledgeBtn) {
acknowledgeBtn.addEventListener('click', acknowledgeNotice);
}
manageLinks.forEach(function (link) {
link.addEventListener('click', function (event) {
event.preventDefault();
showBanner();
});
});
}
window.aimlTrack = function (name, data) {
trackEvent(name, data);
};
window.aimlTrackWhenReady = function (name, data) {
if (window.tianji && typeof window.tianji.track === 'function') {
trackEvent(name, data);
return;
}
document.addEventListener('tianji:ready', function handler() {
document.removeEventListener('tianji:ready', handler);
trackEvent(name, data);
});
};
function initNotice() {
bindBannerControls();
loadTracker();
var migration = migrateLegacyConsent();
var notice = getStorageItem(NOTICE_KEY);
if (notice === 'acknowledged' || migration === 'migrated_acknowledged') {
hideBanner();
return;
}
showBanner();
}
initNotice();
})();