https://www.worldofbooks.com/cdn/shop/t/183/assets/tracking-utils.js?v=63400030512804598491790154268
1const BR_NEW_EVENTS_COOKIE_NAME="br_new_events",BR_NEW_EVENTS_COOKIE_MAX_AGE_SECONDS=31536e3;function applyBrNewEventsFlagFromUrl(){const n=new URLSearchParams(window.location.search);if(n.has(BR_NEW_EVENTS_COOKIE_NAME)){if(n.get(BR_NEW_EVENTS_COOKIE_NAME)==="0"){document.cookie=`${BR_NEW_EVENTS_COOKIE_NAME}=; path=/; max-age=0`;return}document.cookie=`${BR_NEW_EVENTS_COOKIE_NAME}=1; path=/; max-age=31536000`}}applyBrNewEventsFlagFromUrl();function isBrNewEventsEnabled(){return document.cookie.split("; ").some(n=>n===`${BR_NEW_EVENTS_COOKIE_NAME}=1`)}function centsToPrice(n){return typeof n!="number"||isNaN(n)?0:n/100}function roundViewItemPrice(n){return typeof n!="number"||!Number.isFinite(n)?null:parseFloat(n.toFixed(2))}function pushToDataLayer(n){window.dataLayer=window.dataLayer||[],window.dataLayer.push(n)}function uniqueJoin(n,l){let o=n.filter(Boolean);return l&&(o=o.filter(l)),[...new Set(o)].join(",")}function selectBestVariantForContext(n,l){if(!n||n.length===0)return null;if(n.length===1)return n[0];const o=n.filter(i=>i.inventory_quantity>0&&i.condition&&i.condition!=="-"),t=o.length>0?o:n;return l==="GB"?t.reduce((i,r)=>{const u=i.conditionPriority&&i.conditionPriority.GB!=null?Number(i.conditionPriority.GB):99;return(r.conditionPriority&&r.conditionPriority.GB!=null?Number(r.conditionPriority.GB):99)<u?r:i}):l==="US"?t.reduce((i,r)=>r.price<i.price?r:i):t[0]}function buildPdpContext(n,l,o){const t=l||[],i=n&&n.rrpPrice?n.rrpPrice/100:null;let r=null;if(i>0&&n&&n.price>0){const e=n.price/100;e<i&&(r=Math.round((i-e)/i*100))}const u=t.some(e=>e.seriesCollection&&e.seriesCollection!=="")||window.pdpIsPartOfSeries||!1;return{event:"pdp_context",page_type:window.pdpPageType||null,spv_edition_count:o&&o.spv_edition_count!=null?o.spv_edition_count:null,spv_default_ean:o&&o.spv_default_ean!=null?o.spv_default_ean:null,item_ean:n&&n.ean||null,cover_image_url:window.pdpCoverImageUrl||null,rrp:i||null,discount_pct:r,condition_grade:n&&n.condition||null,format_type:(n?n.bindingType:null)||window.pdpFormatType||null,is_part_of_series:u,delivery_date_shown:null}}const TRANSLATED_CONDITION_MAP={"LIKE NEW":"LIKE_NEW","VERY GOOD":"VERY_GOOD",GOOD:"GOOD","WELL READ":"WELL_READ",NEW:"NEW","WIE NEU":"LIKE_NEW","SEHR GUT":"VERY_GOOD",GUT:"GOOD",VIELGELESEN:"WELL_READ",GELESEN:"WELL_READ",NEU:"NEW","COMME NEUF":"LIKE_NEW","TR\xC8S BON":"VERY_GOOD",BON:"GOOD",US\u00C9:"WELL_READ","BIEN LU":"WELL_READ",NEUF:"NEW"};function toCanonicalCondition(n){if(!n)return"";const l=n.toString().toUpperCase().trim();return TRANSLATED_CONDITION_MAP[l]?TRANSLATED_CONDITION_MAP[l]:l.replace(/\s+/g,"_")}const CANONICAL_CONDITIONS=new Set([...Object.values(TRANSLATED_CONDITION_MAP),"ACCEPTABLE"]);function extractCanonicalConditionFromVariantTitle(n){if(!n)return null;const l=String(n).split("/");for(const o of l){const t=toCanonicalCondition(o.trim());if(CANONICAL_CONDITIONS.has(t))return t}return null}const PRODUCT_TYPE_MAP={DVD:"video",GAMES:"game"};function toCanonicalProductType(n){if(!n)return null;const l=n.toString().toUpperCase().trim();return PRODUCT_TYPE_MAP[l]?PRODUCT_TYPE_MAP[l]:n.toString().toLowerCase().trim()}function toCanonicalBindingType(n){return n?n.toString().toLowerCase().trim():null}const AUTHOR_COLLECTION_TEMPLATE_SUFFIXES=["author-collection","author","author-advanced"],SERIES_COLLECTION_TEMPLATE_SUFFIXES=["series-collection"];function matchesTemplateSuffix(n,l){if(!n)return!1;const o=String(n).toLowerCase().trim();return o?l.indexOf(o)!==-1:!1}function isAuthorCollectionTemplate(n){return matchesTemplateSuffix(n,AUTHOR_COLLECTION_TEMPLATE_SUFFIXES)}function isSeriesCollectionTemplate(n){return matchesTemplateSuffix(n,SERIES_COLLECTION_TEMPLATE_SUFFIXES)}function buildViewItemPayload(n){const l=n&&n.author||null,o=n?centsToPrice(n.price):null,t=convertLocalPriceToGbp(o),i=window.location&&window.location.origin&&window.location.pathname?`${window.location.origin}${window.location.pathname}`:null,r=n&&Array.isArray(n.tags)&&n.tags.length>0?n.tags:null,u=n&&Array.isArray(n.collectionsList)&&n.collectionsList.length>0?n.collectionsList:null,e=n?Number.parseInt(n.numberOfPages,10):NaN,c=Number.isFinite(e)&&e>0?e:typeof window.pdpPages=="number"&&!isNaN(window.pdpPages)?window.pdpPages:null;return{timestamp:Math.floor(Date.now()/1e3),product_id:n&&n.ean||null,family_id:window.pdpFamilyId||null,variant_id:n&&n.sku||null,title:(n?n.productTitle:null)||window.pdpProductTitle||null,author:l,author_url:buildAuthorCollectionUrl(l),url:i,preorder:!1,description_short:(n?n.descriptionShort:null)||window.pdpDescriptionShort||null,description_long:null,price:roundViewItemPrice(t),price_local_currency:roundViewItemPrice(o),local_currency:window.pdpLocalCurrency||null,condition:n&&toCanonicalCondition(n.condition)||null,binding_type:toCanonicalBindingType((n?n.bindingType:null)||window.pdpFormatType||null),product_type:toCanonicalProductType((n?n.productType:null)||window.pdpProductType||null),publisher:(n?n.publisher:null)||window.pdpPublisher||null,pages:c,tags:r||(Array.isArray(window.pdpTags)?window.pdpTags:[]),collections_list:u||(Array.isArray(window.pdpCollectionsList)?window.pdpCollectionsList:[]),series_identifier:!!(n&&n.seriesIdentifier||window.pdpIsPartOfSeries),series_title:(n?n.seriesTitle:null)||window.pdpSeriesTitle||null,series_url:(n?n.seriesUrl:null)||window.pdpSeriesUrl||null,location:window.location&&window.location.href?window.location.href:null}}function buildViewCategoryPayload(){const n=window.plpCategoryLevels||[],l=window.plpCollectionTemplateSuffix||null,o=isAuthorCollectionTemplate(l),t=isSeriesCollectionTemplate(l),i=window.plpCollectionName?{name:window.plpCollectionName,url:window.plpCollectionUrl||null}:null,r=i?n.concat([i]):n,u={timestamp:Math.floor(Date.now()/1e3),leaf_category_name:window.plpCollectionName||null,leaf_category_url:window.plpCollectionUrl||null,category_name_list:uniqueJoin(r.map(e=>e.name)),collection_name:window.plpCollectionName||null,collection_url:window.plpCollectionUrl||null,author:o&&window.plpCollectionName||null,author_url:o&&window.plpCollectionUrl||null,series_identifier:!!t,series_title:t&&window.plpCollectionName||null,series_url:t&&window.plpCollectionUrl||null,product_type:null,sort_by:window.plpSortBy||null,language:window.plpLanguage||null,location:window.location&&window.location.href?window.location.href:null};for(let e=0;e<6;e+=1){const c=r[e]||null;u[`category_level_${e+1}`]=c?c.name:null,u[`category_level_${e+1}_url`]=c?c.url:null}return u}function trackExponeaEvent(n,l,o){const t={...l,wob_integration:!0},i=o&&Number.isFinite(o.pollIntervalMs)?o.pollIntervalMs:200,r=o&&Number.isFinite(o.timeoutMs)?o.timeoutMs:1e4;function u(){return!!window.exponea&&typeof window.exponea.track=="function"}if(u()){window.exponea.track(n,t);return}let e=null;const c=setInterval(function(){u()&&(clearInterval(c),clearTimeout(e),window.exponea.track(n,t))},i);e=setTimeout(function(){clearInterval(c)},r)}function trackViewItem(n){trackExponeaEvent("view_item",buildViewItemPayload(n))}function trackViewCategory(){isBrNewEventsEnabled()&&trackExponeaEvent("view_category",buildViewCategoryPayload())}function buildSearchPayload(n,l){return{search_terms:typeof n=="string"?n:null,location:window.location&&window.location.href?window.location.href:null,timestamp:Math.floor(Date.now()/1e3),language:window.plpLanguage||null,number_of_results:typeof l=="number"?l:null}}function trackSearch(n,l){isBrNewEventsEnabled()&&trackExponeaEvent("search",buildSearchPayload(n,l))}let wishlistEmptyInProgress=!1,wishlistEmptyInProgressTimeoutId=null;function setWishlistEmptyInProgress(n){wishlistEmptyInProgress=!!n,n?(clearTimeout(wishlistEmptyInProgressTimeoutId),wishlistEmptyInProgressTimeoutId=setTimeout(function(){wishlistEmptyInProgress=!1},1e4)):clearTimeout(wishlistEmptyInProgressTimeoutId)}function isWishlistEmptyInProgress(){return wishlistEmptyInProgress}
1function toAuthorCollectionSlug(n){if(!n||typeof n!="string")return null;const l=n.trim();if(l.length===0)return null;const c=l.normalize("NFD").replace(/[Ì-ͯ]/g,"").replace(/Ã/g,"ss").replace(/&/g,"and").toLowerCase().replace(/[\s_]+/g,"-").replace(/[^a-z0-9-]/g,"").replace(/-+/g,"-").replace(/^-+|-+$/g,"");return c.length>0?c:null}function getLocalizationRoute(){const n=window.globalConfig&&window.globalConfig.localizationRoute;return typeof n!="string"||n.length===0?"/":n.endsWith("/")?n:`${n}/`}function buildAuthorCollectionUrl(n){const l=toAuthorCollectionSlug(n);return l?`${window.location.origin}${getLocalizationRoute()}collections/${l}`:null}function buildLocalizedProductUrl(n){if(!n||typeof n!="string")return null;const l=n.replace(/^\/+|\/+$/g,"");return l.length===0?null:`${window.location.origin}${getLocalizationRoute()}products/${l}`}function buildLocalizedCollectionUrl(n){if(!n||typeof n!="string")return null;const l=n.replace(/^\/+|\/+$/g,"");return l.length===0?null:`${window.location.origin}${getLocalizationRoute()}collections/${l}`}function buildWishlistProductListItem(n){const l=n&&typeof n=="object"?n:{};return{product_id:l.product_id!=null?l.product_id:null,variant_id:l.variant_id!=null?l.variant_id:null,family_id:l.family_id!=null?l.family_id:null,title:l.title!=null?l.title:null,author:l.author!=null?l.author:null,author_url:l.author_url!=null?l.author_url:null,product_type:l.product_type!=null?l.product_type:null,description_short:l.description_short!=null?l.description_short:null,description_long:null,price_local_currency:l.price_local_currency!=null?l.price_local_currency:null,preorder:l.preorder===null?null:!1,url:l.url!=null?l.url:null,condition:l.condition!=null?l.condition:null,binding_type:l.binding_type!=null?l.binding_type:null,is_in_stock:typeof l.is_in_stock=="boolean"?l.is_in_stock:null,quantity:l.quantity!=null?l.quantity:1}}function mergeWishlistProductListItem(n,l){const o=buildWishlistProductListItem(n),t=Object.keys(l);for(const i of t)i==="description_long"||i==="preorder"||i==="quantity"||l[i]!=null&&(o[i]=l[i]);return o.description_long=null,o.preorder=!1,o.quantity=n&&n.quantity!=null?n.quantity:1,o}function findEnrichmentVariant(n,l){if(!(n&&typeof n=="object")||!Array.isArray(n.variants)||n.variants.length===0)return null;const t=l&&l.epi?String(l.epi):null,i=l&&l.sku?l.sku:null;let r=null;return t&&(r=n.variants.find(u=>(u.id?u.id.replace("gid://shopify/ProductVariant/",""):null)===t)||null),!r&&i&&(r=n.variants.find(u=>u.sku===i)||null),r}function buildActedOnWishlistItem(n,l){const o=l&&typeof l=="object",t=findEnrichmentVariant(l,n),i=t&&t.priceV2?t.priceV2.amount:null,r=i!==null?Number.parseFloat(i):null,u=r!==null&&!Number.isNaN(r)?r:null,e=extractCanonicalConditionFromVariantTitle(t?t.title:null),s=(t&&t.bindingTypeMeta?t.bindingTypeMeta.value:null)||(o&&l.binding_type?l.binding_type:null),a=o&&l.author?l.author:null,d=(n&&n.sku?n.sku:null)||(t&&t.sku?t.sku:null);return buildWishlistProductListItem({product_id:o&&l.item_ean?l.item_ean:null,variant_id:d,family_id:o&&l.family_id!=null?l.family_id:null,title:n&&n.dt?n.dt:null,author:a,author_url:buildAuthorCollectionUrl(a),product_type:o&&l.product_type?toCanonicalProductType(l.product_type):null,price_local_currency:u,preorder:!1,url:n&&n.du?n.du:null,condition:e,binding_type:s,is_in_stock:o&&typeof l.is_in_stock=="boolean"?l.is_in_stock:null,quantity:1})}function resolveActedOnWishlistItem(n,l,o){const t=buildActedOnWishlistItem(l,o);if(!Array.isArray(n)||n.length===0)return{actedOnItem:t,productList:n};const i=new Set,r=new Set;l&&l.sku&&i.add(String(l.sku)),t.variant_id!=null&&i.add(String(t.variant_id)),o&&typeof o=="object"&&o.item_ean&&r.add(String(o.item_ean)),t.product_id!=null&&r.add(String(t.product_id));const u=n.findIndex(s=>s?s.variant_id!=null&&i.has(String(s.variant_id))?!0:s.product_id!=null&&r.has(String(s.product_id)):!1);if(u===-1)return{actedOnItem:t,productList:n};const e=mergeWishlistProductListItem(n[u],t),c=n.slice();return c[u]=e,{actedOnItem:e,productList:c}}function aggregateSnapshotListByKey(n,l){const o=[],t=new Map;for(const i of Array.isArray(n)?n:[]){const r=i&&i[l]!=null?i[l]:null,u=Number(i&&i.quantity!=null?i.quantity:1)||0;if(r===null){o.push({[l]:null,quantity:u});continue}const e=t.get(r);if(e===void 0){t.set(r,o.length),o.push({[l]:r,quantity:u});continue}o[e].quantity+=u}return o}function buildThinWishlistProductList(n){return!Array.isArray(n)||n.length===0?null:aggregateSnapshotListByKey(n,"product_id")}function resolveWishlistTotalQuantity(n,l){return n==="empty"?0:l&&typeof l=="object"&&l.total_quantity!=null?l.total_quantity:null}function resolveWishlistId(n,l){return n&&typeof n=="object"&&n.wishlist_id!=null?n.wishlist_id:!(l&&typeof l=="object")||l.lid==null?null:String(l.lid)}function getShopifyPresentmentRate(){const n=typeof window<"u"&&window.Shopify&&window.Shopify.currency?window.Shopify.currency:null;if(!n||n.rate==null)return null;const l=Number.parseFloat(n.rate);return!Number.isFinite(l)||l<=0?null:l}function convertLocalPriceToGbp(n){if(typeof n!="number"||!Number.isFinite(n))return null;if((typeof window<"u"&&window.globalConfig&&window.globalConfig.currencyCode?window.globalConfig.currencyCode:null)==="GBP")return n;const o=getShopifyPresentmentRate();return o===null?null:parseFloat((n/o).toFixed(2))}function buildCartUpdatePayload(n,l,o){const t=o&&typeof o=="object"?o:{},i=n==="empty";return{action:n||null,...i||!l?{}:l,created_at:t.created_at!=null?t.created_at:null,variant_list:i?null:t.variant_list||null,variant_ids:i?null:t.variant_ids||null,product_list:i?null:t.product_list||null,product_ids:i?null:t.product_ids||null,family_list:i?null:t.family_list||null,family_ids:i?null:t.family_ids||null,total_quantity:i?0:t.total_quantity!=null?t.total_quantity:null,total_price:i?null:t.total_price!=null?t.total_price:null,total_price_local_currency:i?null:t.total_price_local_currency!=null?t.total_price_local_currency:null,local_currency:t.local_currency||null,location:window.location&&window.location.href?window.location.href:null}}function trackCartUpdate(n,l,o){isBrNewEventsEnabled()&&trackExponeaEvent("cart_update",buildCartUpdatePayload(n,l,o))}function sumWishlistItemPrices(n){if(!Array.isArray(n)||n.length===0)return null;let l=0,o=!1;for(const t of n){const i=t&&t.price_local_currency;typeof i=="number"&&i>0&&(l+=i,o=!0)}return o?parseFloat(l.toFixed(2)):null}function buildWishlistPayload(n,l,o,t){const i=t&&typeof t=="object",r=i&&t.product_list!=null?t.product_list:null,u=n==="empty";let e=r,c=null;if(n==="create"||n==="update"){const d=resolveActedOnWishlistItem(r,l,o);c=d.actedOnItem,e=d.productList}else n==="remove"&&(c=buildActedOnWishlistItem(l,o));const s=u?null:sumWishlistItemPrices(e),a={created_at:i&&t.created_at!=null?t.created_at:null,wishlist_id:resolveWishlistId(t,l),wishlist_name:i&&t.wishlist_name!=null?t.wishlist_name:null,variant_list:!u&&i&&t.variant_list!=null?t.variant_list:null,variant_ids:!u&&i&&t.variant_ids!=null?t.variant_ids:null,product_list:u?null:buildThinWishlistProductList(e),product_ids:!u&&i&&t.product_ids!=null?t.product_ids:null,family_list:!u&&i&&t.family_list!=null?t.family_list:null,family_ids:!u&&i&&t.family_ids!=null?t.family_ids:null,total_quantity:resolveWishlistTotalQuantity(n,t),total_price:u?null:convertLocalPriceToGbp(s),total_price_local_currency:s,local_currency:i&&t.local_currency!=null?t.local_currency:null,mobile:!1},p=c===null?{}:c;return{action:n||null,location:window.location&&window.location.href?window.location.href:null,...p,...a}}function trackWishlist(n,l,o,t){trackExponeaEvent("wishlist",buildWishlistPayload(n,l,o,t))}
1window.trackingUtils={isBrNewEventsEnabled,centsToPrice,pushToDataLayer,uniqueJoin,selectBestVariantForContext,buildPdpContext,toCanonicalCondition,toCanonicalProductType,toCanonicalBindingType,isAuthorCollectionTemplate,isSeriesCollectionTemplate,aggregateSnapshotListByKey,buildViewItemPayload,trackExponeaEvent,trackViewItem,buildViewCategoryPayload,trackViewCategory,buildSearchPayload,trackSearch,toAuthorCollectionSlug,buildAuthorCollectionUrl,buildLocalizedProductUrl,buildLocalizedCollectionUrl,buildWishlistProductListItem,buildWishlistPayload,convertLocalPriceToGbp,buildCartUpdatePayload,trackCartUpdate,trackWishlist,setWishlistEmptyInProgress,isWishlistEmptyInProgress}; 2//# sourceMappingURL=tracking-utils.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.