{"version":3,"file":"../wwwroot/bauer.affiliate.components.js","mappings":";;;;;;;AAAA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;;AAEA;AACA,SAAS;;AAET;AACA,KAAK;AACL,CAAC,E;;;;;;;;AClED;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,CAAC,E;;;;;;;;ACpBD;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,CAAC,E;;;;;;;;ACrBD;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,CAAC,E;;;;;;;;ACpBD;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT;AACA,CAAC,E;;;;;;;;ACxBD,C;;;;;;;;ACAA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,CAAC,E;;;;;;;;ACpBD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sE;;;;;;;;ACjEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,qBAAqB;AACrB;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL,CAAC,G;;;;;;;;ACpBD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,CAAC,E;;;;;;;;ACzBD;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,iBAAiB;AACjB;;AAEA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA,aAAa;;AAEb;AACA,SAAS;AACT;AACA,CAAC,E;;;;;;;;ACrFD;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,KAAK;AACL,CAAC,E;;;;;;;;ACbD;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA,SAAS;AACT,KAAK;AACL,CAAC,E;;;;;;;;ACvHD;AACA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC,SAAS;;AAE/C;AACA;AACA,aAAa;;AAEb;AACA,SAAS;AACT,KAAK;AACL,CAAC,E","sources":["webpack://build/./Views/Shared/Components/Tabs/Default.cshtml.js","webpack://build/./Views/Shared/Components/ProductCardTitle/Default.cshtml.js","webpack://build/./Views/Shared/Components/ProductCardPriceAction/Default.cshtml.js","webpack://build/./Views/Shared/Components/ProductCardImage/Default.cshtml.js","webpack://build/./Views/Shared/Components/ProductCardGallery/Default.cshtml.js","webpack://build/./Views/Shared/Components/ProductCardDescription/Default.cshtml.js","webpack://build/./Views/Shared/Components/ProductCardAlternativeProductListings/Default.cshtml.js","webpack://build/./Views/Shared/Components/ProductCard/Default.cshtml.js","webpack://build/./Views/Shared/Components/Picture/Default.cshtml.js","webpack://build/./Views/Shared/Components/Modal/Default.cshtml.js","webpack://build/./Views/Shared/Components/ImageModal/Default.cshtml.js","webpack://build/./Views/Shared/Components/GaLink/Default.cshtml.js","webpack://build/./Views/Shared/Components/Carousel/Default.cshtml.js","webpack://build/./Views/Shared/Components/AtAGlance/Default.cshtml.js"],"sourcesContent":["// tab manager object for localising tab management\nfunction TabManager() {\n var tabLookup = {};\n\n var activeTabIndex = -1;\n\n function setActive(index) {\n if (tabLookup[index] && tabLookup[index].$tab && tabLookup[index].$content) {\n tabLookup[index].$tab.addClass('product-card__tab-control__tabs__tab-name--active');\n tabLookup[index].$content.addClass('product-card__tab-control__tab-content--active');\n }\n }\n\n function setInactive(index) {\n if (tabLookup[index] && tabLookup[index].$tab && tabLookup[index].$content) {\n tabLookup[index].$tab.removeClass('product-card__tab-control__tabs__tab-name--active');\n tabLookup[index].$content.removeClass('product-card__tab-control__tab-content--active');\n }\n }\n\n this.AddTab = function(index, $tab) {\n tabLookup[index] = tabLookup[index] ? tabLookup[index] : {};\n tabLookup[index].$tab = $tab;\n }\n\n this.AddTabContent = function (index, $tabContent) {\n tabLookup[index] = tabLookup[index] ? tabLookup[index] : {};\n tabLookup[index].$content = $tabContent;\n }\n\n this.ActivateTab = function (index) {\n if (index !== activeTabIndex) {\n if (activeTabIndex !== -1) {\n setInactive(activeTabIndex);\n }\n\n setActive(index);\n\n activeTabIndex = index;\n }\n }\n}\n\n$(function () {\n $('.product-card__tab-control').each(function (index, element) {\n var $tabControl = $(element);\n var tabManager = new TabManager();\n\n $tabControl.find('.product-card__tab-control__tabs button').each(function (buttonIndex, buttonElement) {\n var $buttonElement = $(buttonElement);\n\n tabManager.AddTab(buttonIndex, $buttonElement);\n\n $buttonElement.off('click').on('click', function () {\n tabManager.ActivateTab(buttonIndex);\n });\n });\n\n $tabControl.find('.product-card__tab-control__tab-content').each(function (contentIndex, contentElement) {\n var $contentElement = $(contentElement);\n\n tabManager.AddTabContent(contentIndex, $contentElement);\n });\n\n tabManager.ActivateTab(0);\n });\n});","$(function () {\n if (window.bauer && window.bauer.affiliateComponents.getProductCardManager) {\n engage();\n } else {\n $(document).on('bauer.affiliate-components.product-card.loaded', function () {\n engage();\n });\n }\n\n function engage() {\n $('.product-card__title__link').each(function (index, element) {\n var $link = $(element);\n\n var productCardManager = window.bauer.affiliateComponents.getProductCardManager($link);\n\n $link.off('click').on('click', function () {\n productCardManager.FirePermutiveEvent($link);\n });\n });\n }\n});","$(function () {\n if (window.bauer && window.bauer.affiliateComponents.getProductCardManager) {\n engage();\n } else {\n $(document).on('bauer.affiliate-components.product-card.loaded', function () {\n engage();\n });\n }\n\n function engage() {\n var $priceActionLinks = $('.product-card__price-action__link, .product-card__price-action__merchant-price__link');\n $priceActionLinks.each(function (index, element) {\n var $link = $(element);\n\n var productCardManager = window.bauer.affiliateComponents.getProductCardManager($link);\n\n $link.off('click').on('click', function () {\n productCardManager.FirePermutiveEvent($link);\n });\n });\n }\n});","$(function () {\n if (window.bauer && window.bauer.affiliateComponents.getProductCardManager) {\n engage();\n } else {\n $(document).on('bauer.affiliate-components.product-card.loaded', function () {\n engage();\n });\n }\n\n function engage() {\n $('.product-card__product-image').each(function (imageIndex, imageElement) {\n var $imageElement = $(imageElement);\n\n var productCardManager = window.bauer.affiliateComponents.getProductCardManager($imageElement);\n\n $imageElement.find('.js-image-modal-trigger').off('click').on('click', function (index, element) {\n productCardManager.ShowImageModal();\n });\n });\n }\n});","$(function () {\n if (window.bauer && window.bauer.affiliateComponents.getProductCardManager) {\n engage();\n } else {\n $(document).on('bauer.affiliate-components.product-card.loaded', function () {\n engage();\n });\n }\n\n function engage() {\n $('.product-card__secondary-image-carousel').each(function (imageCarouselIndex, imageCarouselElement) {\n var $imageCarouselElement = $(imageCarouselElement);\n\n var productCardManager = window.bauer.affiliateComponents.getProductCardManager($imageCarouselElement);\n\n $imageCarouselElement.find('.product-card__secondary-image-carousel__picture').each(function (pictureIndex, pictureElement) {\n var $pictureElement = $(pictureElement);\n\n $pictureElement.off('click').on('click', function () {\n productCardManager.ShowImageModalAndSetImage(pictureIndex);\n });\n });\n });\n }\n});","","$(function () {\n if (window.bauer && window.bauer.affiliateComponents.getProductCardManager) {\n engage();\n } else {\n $(document).on('bauer.affiliate-components.product-card.loaded', function () {\n engage();\n });\n }\n\n function engage() {\n $('.product-card__alternative-product-listings__merchant-link').each(function (index, element) {\n var $link = $(element);\n\n var productCardManager = window.bauer.affiliateComponents.getProductCardManager($link);\n\n $link.off('click').on('click', function () {\n productCardManager.FirePermutiveEvent($link);\n });\n });\n }\n});","// product card manager - tool for managing the resources of an individual product card\nfunction ProductCardManager($productCardElement) {\n function displayImageModal() {\n $productCardElement.find('.product-card__modal').each(function (modalIndex, modalElement) {\n $(modalElement).trigger('show-modal');\n });\n }\n\n // shows the image modal keeping the last selected image\n this.ShowImageModal = function () {\n displayImageModal();\n }\n\n // shows the image modal and selects the image with the passed index\n this.ShowImageModalAndSetImage = function (index) {\n // set the index of the image to display in the modal\n $productCardElement.find('.product-card__image-modal').each(function (imageModalIndex, imageModalElement) {\n $(imageModalElement).trigger('set-index', [index]);\n })\n\n displayImageModal();\n }\n\n this.HideImageModal = function () {\n $productCardElement.find('.product-card__modal').each(function (modalIndex, modalElement) {\n $(modalElement).trigger('hide-modal');\n });\n }\n\n this.FirePermutiveEvent = function ($element) {\n var product = $element.data('permutive-product');\n\n if (window.permutive && product) {\n var $link = $element.is('a') ? $element : $element.find('a').first();\n var url = $link.attr('href');\n\n window.permutive.track('AffiliateLinkClick', {\n type: 'product-card',\n dest_url: url,\n product: product\n });\n }\n }\n}\n\nwindow.bauer = window.bauer || {};\nwindow.bauer.affiliateComponents = window.bauer.affiliateComponents || {};\n\nwindow.bauer.affiliateComponents.getProductCardManager = function getProductCardManager($element) {\n var productCardElement = $element.closest('.product-card');\n var productCardManager = null;\n\n if (productCardElement) {\n var $productCardElement = $(productCardElement);\n productCardManager = $productCardElement.data('manager');\n\n if (!productCardManager) {\n productCardManager = new ProductCardManager($productCardElement);\n $productCardElement.data('manager', productCardManager);\n }\n }\n\n return productCardManager;\n};\n\n$(document).trigger('bauer.affiliate-components.product-card.loaded');","$(function () {\n $('.product-card__picture').each(function (index, element) {\n var $container = $(element);\n\n // find any spinners associated with the image\n $container.find('.product-card__picture__spinner').each(function (spinnerIndex, spinnerElement) {\n // if there is a spinner associated with the image, find the image\n $container.find('img').each(function (imgIndex, imgElement) {\n if (!imgElement.complete) {\n var $imgElement = $(imgElement);\n\n $container.addClass('product-card__picture--loading');\n\n $imgElement.on('load', function () {\n $container.removeClass('product-card__picture--loading');\n });\n }\n });\n });\n });\n}); ","function ModalManager($modalElement) {\n function showModal() {\n $modalElement.addClass('product-card__modal--visible');\n }\n\n function hideModal() {\n $modalElement.removeClass('product-card__modal--visible');\n }\n\n this.Show = function () {\n showModal();\n }\n\n this.Hide = function () {\n hideModal();\n }\n}\n\n$(function () {\n $('.product-card__modal').each(function (modalIndex, modalElement) {\n var $modalElement = $(modalElement);\n var modalManager = new ModalManager($modalElement);\n $modalElement.on('show-modal', modalManager.Show);\n $modalElement.on('hide-modal', modalManager.Hide);\n });\n});","function ImageModalManager() {\n var $primaryImages = [];\n var selectedIndex = -1;\n\n function showPrimaryImage(imageIndex) {\n var $imageElement = $primaryImages[imageIndex];\n\n if ($imageElement) {\n $imageElement.addClass('product-card__image-modal__main-image__picture--show');\n }\n }\n\n function hidePrimaryImage(imageIndex) {\n var $imageElement = $primaryImages[imageIndex];\n\n if ($imageElement) {\n $imageElement.removeClass('product-card__image-modal__main-image__picture--show');\n }\n }\n\n this.AddPrimaryImage = function (imageIndex, $imageElement) {\n $primaryImages[imageIndex] = $imageElement;\n }\n\n this.SelectPrimaryImage = function (imageIndex) {\n if (imageIndex != selectedIndex) {\n if (selectedIndex != -1) {\n hidePrimaryImage(selectedIndex);\n }\n\n showPrimaryImage(imageIndex);\n\n selectedIndex = imageIndex;\n }\n }\n}\n\n$(function () {\n if (window.bauer && window.bauer.affiliateComponents.getProductCardManager) {\n engage();\n } else {\n $(document).on('bauer.affiliate-components.product-card.loaded', function () {\n engage();\n });\n }\n\n function engage() {\n $('.product-card__image-modal').each(function (imageModalIndex, imageModalElement) {\n var imageModalManager = new ImageModalManager();\n\n var $imageModalElement = $(imageModalElement);\n\n // get the product card containing this modal\n var productCardManager = window.bauer.affiliateComponents.getProductCardManager($imageModalElement);\n\n var closeButton = $imageModalElement.find('.product-card__image-modal__close')[0];\n\n if (closeButton) {\n var $closeButton = $(closeButton);\n\n $closeButton.off('click').on('click', function (event) {\n productCardManager.HideImageModal();\n });\n }\n\n $imageModalElement.find('.product-card__image-modal__main-image__picture').each(function (imageIndex, imageElement) {\n var $imageElement = $(imageElement);\n var index = $imageElement.data('index');\n imageModalManager.AddPrimaryImage(index, $imageElement);\n });\n\n $imageModalElement.find('.product-card__image-modal__footer__carousel__picture').off('click').on(\"click\", function (element) {\n var $element = $(element.currentTarget);\n var index = $element.data('index');\n imageModalManager.SelectPrimaryImage(index);\n });\n\n // event to set the index of the picture to display\n $imageModalElement.off('set-index').on('set-index', function (event, index) {\n imageModalManager.SelectPrimaryImage(index);\n });\n\n imageModalManager.SelectPrimaryImage(0);\n });\n }\n});","$(function () {\n $('.product-card__ga-link').each(function (linkIndex, linkElement) {\n var $linkElement = $(linkElement);\n\n var gaCategory = $linkElement.data('ga-category');\n\n if (gaCategory) {\n $linkElement.on('click', function (event) {\n // send the click event here\n console.log(gaCategory);\n });\n };\n });\n});","function CarouselManager($carousel, $content, $container, $scrollLeftButtons, $scrollRightButtons) {\n var elementIndex = 0;\n\n var $elements = [];\n\n const buttonDisabledClass = 'product-card__carousel__arrow--disabled';\n\n // anchor the container so the element positions are set correctly\n $container.css('transform', 'translate(0px)');\n\n $scrollLeftButtons.each(function (buttonIndex, buttonElement) {\n $(buttonElement).off(\"click\").on(\"click\", scrollLeft);\n });\n\n $scrollRightButtons.each(function (buttonIndex, buttonElement) {\n $(buttonElement).off(\"click\").on(\"click\", scrollRight);\n });\n\n // create an intersection observer to see if the last element is in the window\n var intersectionObserver = new IntersectionObserver(inWindow, {\n root: $content[0],\n rootMargin: '0px',\n threshold: 1.0\n });\n\n function inWindow(entries) {\n for (var i = 0; i < entries.length; i++) {\n var entry = entries[i];\n var $element = $(entry.target);\n var elementIndex = $element.data('element-index');\n\n // if the visibility of the first element has changed\n if (elementIndex == 0) {\n // if the first element is in the window, don't allow scrolling right\n entry.isIntersecting ? disableScrollRightButtons() : enableScrollRightButtons();\n }\n\n // if the visibility of the last element has changed\n if (elementIndex == $elements.length - 1) {\n // if the last element is in the window, don't allow scrolling left\n entry.isIntersecting ? disableScrollLeftButtons() : enableScrollLeftButtons();\n }\n }\n }\n\n function scrollContainer(position) {\n $container.css('transform', 'translate(' + position + 'px)');\n }\n\n function scrollTo(index) {\n if (index >= 0 && index < $elements.length) {\n var $element = $elements[index];\n var elementLeft = $element.position().left;\n\n var offset = 0 - elementLeft;\n scrollContainer(offset);\n }\n }\n\n function scrollRight() {\n if (elementIndex > 0) {\n elementIndex--;\n scrollTo(elementIndex);\n }\n }\n\n function scrollLeft() {\n if (elementIndex < $elements.length - 2) {\n elementIndex++;\n scrollTo(elementIndex);\n }\n }\n\n function disableScrollLeftButtons() {\n $scrollLeftButtons.addClass(buttonDisabledClass).prop('disabled', true);\n }\n\n function enableScrollLeftButtons() {\n $scrollLeftButtons.removeClass(buttonDisabledClass).prop('disabled', false);\n }\n\n function disableScrollRightButtons() {\n $scrollRightButtons.addClass(buttonDisabledClass).prop('disabled', true);\n }\n\n function enableScrollRightButtons() {\n $scrollRightButtons.removeClass(buttonDisabledClass).prop('disabled', false);\n }\n\n this.AddElement = function (index, element) {\n var $element = $(element);\n $elements[index] = $element;\n $element.data('element-index', index);\n\n // observe the element so we can enable/disable scroll buttons\n intersectionObserver.observe(element);\n }\n}\n\n$(function () {\n $('.product-card__carousel').each(function (carouselIndex, carouselElement) {\n var $carouselElement = $(carouselElement);\n\n // bit confusing - the arrow left buttons scroll the carousel to the right\n var moveRightButtons = $carouselElement.find('.product-card__carousel__arrow--left');\n\n // bit confusing - the arrow right buttons scroll the carousel to the left\n var moveLeftButtons = $carouselElement.find('.product-card__carousel__arrow--right');\n\n var container = $carouselElement.find('.product-card__carousel__element-container')[0];\n\n var content = $carouselElement.find('.product-card__carousel__content')[0];\n\n var carouselManager = new CarouselManager($carouselElement, $(content), $(container), moveLeftButtons, moveRightButtons);\n\n $carouselElement.find('.product-card__carousel__element').each(function (carouselElementIndex, carouselElementElement) {\n carouselManager.AddElement(carouselElementIndex, carouselElementElement);\n });\n });\n});","$(function () {\n $('.product-card-anchor').each(function (readReviewIndex, readReviewElement) {\n // Get the Id of the anchor link inside this read review element.\n const anchorId = $(readReviewElement).find('a').attr('id');\n\n // When Read Review is clicked, scroll the product card with the matching Id into view.\n $(readReviewElement).on('click', function () {\n const productCardId = `#${anchorId}-anchor`;\n\n $('html, body').animate({\n scrollTop: $(productCardId).offset().top\n }, 500);\n\n return false;\n });\n });\n});"],"names":[],"sourceRoot":""}