...
...
(function () {
const METASITE_APP_DEF_ID = '22bef345-3c5b-4c18-b782-74d4085112ff';
const getXSRFTokenFromCookie = () => {
const match = new RegExp('XSRF-TOKEN=(.+?);').exec(document.cookie);
return match ? match[1] : '';
};
const eventNames = {
Purchase: 'Purchase',
Lead: 'Lead',
};
const eventNameToConversionActionCategory = {
[eventNames.Purchase]: 'PURCHASE',
[eventNames.Lead]: 'SUBMIT_LEAD_FORM',
};
const channelParams = {
price: 'price',
id: 'id',
currency: 'currency',
name: 'name',
category: 'category',
brand: 'brand',
variant: 'variant',
list: 'list_name',
quantity: 'quantity',
step: 'checkout_step',
option: 'checkout_option',
position: 'list_position',
coupon: 'coupon',
affiliation: 'affiliation',
revenue: 'value',
tax: 'tax',
sku: 'sku',
shipping: 'shipping',
};
const mapContents = ({ contents = [] }) =>
contents.map(({ currency, ...product }) =>
paramsMapper(product, channelParams),
);
const paramsMapper = (params, mapper) => {
const mappedParams = Object.keys(params);
if (mappedParams.length === 0) {
return params;
}
return mappedParams.reduce((mappedObject, currentKey) => {
const newKey = mapper[currentKey];
if (newKey && (params[currentKey] || params[currentKey] === 0)) {
mappedObject[newKey] = params[currentKey];
}
return mappedObject;
}, {});
};
const loadGtag = () => {
const gtagInitScript = document.createElement('script');
gtagInitScript.type = 'text/javascript';
gtagInitScript.innerHTML = `
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date())
`;
document.head.appendChild(gtagInitScript);
const gtagScript = document.createElement('script');
gtagScript.type = 'text/javascript';
gtagScript.setAttribute('async', 'true');
gtagScript.setAttribute('src', 'https://www.googletagmanager.com/gtag/js');
document.head.appendChild(gtagScript);
};
const handleGoogleConsent = () => {
window.dataLayer = window.dataLayer || [];
if (window.consentPolicyManager && window.consentPolicyManager.initRan) {
const { policy, defaultPolicy } =
window.consentPolicyManager.getCurrentConsentPolicy();
setConsent('default', evaluateConsentPolicy(policy, defaultPolicy));
} else {
setConsent('default', {
advertising: false,
analytics: false,
functional: false,
waitForUpdate: 500,
});
}
window.document.addEventListener('consentPolicyInitialized', ({ detail }) => {
setConsent(
'update',
evaluateConsentPolicy(detail.policy, detail.defaultPolicy),
);
});
window.document.addEventListener('consentPolicyChanged', ({ detail }) => {
setConsent('update', detail.policy);
});
function evaluateConsentPolicy(policy, defaultPolicy) {
const { gdprEnforcedGeo } = window.wixTagManager.getConfig();
return defaultPolicy && gdprEnforcedGeo
? { ...policy, advertising: false, analytics: false }
: policy;
}
function setConsent(
action,
{ advertising, analytics, functional, waitForUpdate },
) {
(function () {
window.dataLayer.push(arguments);
})('consent', action, {
ad_storage: advertising ? 'granted' : 'denied',
ad_user_data: advertising ? 'granted' : 'denied',
ad_personalization: advertising ? 'granted' : 'denied',
analytics_storage: analytics ? 'granted' : 'denied',
functionality_storage: functional ? 'granted' : 'denied',
personalization_storage: 'granted',
security_storage: 'granted',
...(waitForUpdate ? { wait_for_update: waitForUpdate } : {}),
});
}
};
let conversionActions;
const loadConversionActions = () => {
const XSRFToken = getXSRFTokenFromCookie();
const headers = {
'Content-Type': 'application/json',
'X-XSRF-TOKEN': XSRFToken,
};
const getAppToken = window.wixEmbedsAPI?.getAppToken;
if (getAppToken) {
headers.authorization = getAppToken(METASITE_APP_DEF_ID);
}
const metaSiteId = window.wixEmbedsAPI?.getMetaSiteId();
return fetch(
`${window.location.origin}/_serverless/pa-google/v1/accounts/current-site/conversion-actions?metaSiteId=${metaSiteId}`,
{
method: 'GET',
headers,
},
)
.then((response) => response.json())
.then((data) => {
conversionActions = data.conversionActions;
gtag('config', conversionActions[0].conversionId);
});
};
const reportEvent = (eventName, eventParams) => {
const category = eventNameToConversionActionCategory[eventName];
const conversionAction = conversionActions.find(
(currentConversionAction) =>
currentConversionAction.category.category === category,
);
if (conversionAction) {
let conversionData = {
send_to: `${conversionAction.conversionId}/${conversionAction.conversionLabel}`,
};
switch (category) {
case 'PURCHASE': {
const { revenue, id, currency, coupon, ...params } = eventParams;
conversionData = {
...conversionData,
...paramsMapper({ revenue, id, currency, coupon }, channelParams),
transactionId: eventParams.id,
items: mapContents(params),
};
break;
}
default:
break;
}
gtag('event', 'conversion', conversionData);
}
};
let isBootstrapped = false;
const bootstrap = () => {
handleGoogleConsent();
loadGtag();
return loadConversionActions().then(() => {
isBootstrapped = true;
});
};
const bootstrapPromise = bootstrap();
const registerListener = () => {
window.wixDevelopersAnalytics.register(
'd6708a0e-5b2a-458e-8cfe-bdca240aa2ce',
(eventName, eventParams) => {
if (isBootstrapped) {
reportEvent(eventName, eventParams);
} else {
bootstrapPromise.then(() => {
reportEvent(eventName, eventParams);
});
}
},
);
};
window.wixDevelopersAnalytics
? registerListener()
: window.addEventListener('wixDevelopersAnalyticsReady', registerListener);
})();
top of page
Art Nouveau Satin Tarot Bag
Featuring gorgeous artwork from artist Giulia F. Massaglia, this lovely bag can be used to store and transport valuables of all kinds—jewelry, keepsakes, crystals, runes, pendulums, decks, and more. A perfect gift for tarot readers, collectors, and those who love accessories with a splash of evocative art.
by
Giulia F. Massaglia
6x9 inches
Art Nouveau Satin Tarot Bag bottom of page