...
...
(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
Llewellyn's Complete Book of the Rider-Waite-Smith Tarot
by Sasha Graham
Discover the Fascinating History and Divinatory Power of the 20th Century's Most Popular Tarot Deck
Originally published in 1909 to little fanfare, the Rider-Waite-Smith Tarot went on to become the bestselling tarot deck of all time. This complete guide shares the compelling story of the deck's creation, a complete analysis of what each card means, and 78 spreads to help you integrate each card's unique spiritual energy.
Discover how artist Pamela Colman Smith and occultist Arthur Waite combined their knowledge of astrology, Kabbalah, metaphysics, mythology, and theater to realize their profound vision. Llewellyn's Complete Book of the Rider-Waite-Smith Tarot delves deeply into the roots of these influential cards, exploring how Waite and Smith brought together an enchanting set of esoteric symbols and formed a magical deck that has guided, inspired, validated, and challenged the countless readers and seekers who have sought its wisdom.
Llewellyn's Complete Book of the Rider-Waite-Smith Tarot PRODUCT INFO Llewellyn's Complete Book of the Rider-Waite-Smith Tarot
by Sasha Graham
Pub Date: September 2018
Page Count: 504 pages
Size:8 x 10 x 1 IN
bottom of page