{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/scripts/sessionTrackerHelper.ts","webpack:///./src/app/recommendationScript.ts","webpack:///./src/scripts/utility.ts","webpack:///./src/scripts/recommendationHelper.ts","webpack:///./src/scripts/personalizationHelper.ts"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","window","sessionTrackerHelper","memberIdCookiesComponent","getCookie","cookieName","match","document","cookie","RegExp","getComponentFromMemberCookie","memberIdComponent","memberIdCookie","decodeURI","this","trackingCookies","split","length","getSessionIdFromUserCookie","getEncryptedUserIdFromUserCookie","utility","ajax","method","endpointUrl","Promise","resolve","reject","xhttp","XMLHttpRequest","onreadystatechange","readyState","status","responseText","open","send","recommendationHelper","util","personalizationHelper","isPersonalizationEnabled","isWebpSupported","feature","callback","img","Image","onload","result","width","height","onerror","src","lossy","lossless","alpha","animation","check_webp_feature","isSupported","[object Object]","index","data","gaEvent","dataLayer","push","event","eventCategory","eventAction","eventLabel","productTypeCategory","title","itemId","eventValue","template","recommendationPlaceholders","productData","productCode","designCode","imageUrl","replace","personalizedImageUrl","DesignCode","ProductCode","LinkUrl","linkUrl","ImageUrl","Title","Price","price","ProductTypeCategory","RecommendationType","Position","toString","GAEventCategory","ItemId","showLivePricing","selectedRecommendation","id","placeholders","recommendationPlacement","tiles","getElementById","tileContent","innerHTML","items","recommendation","sendTrackingData","priceModelUrl","getProductKeyFromRecommendationLinkUrl","priceModel","JSON","parse","getRecommendationPriceTextFromPriceModel","Prices","createRecommendationTile","priceModelSorted","slice","sort","a","b","MinQuantity","startingPrice","minQuantity","toFixed","url","productUri","encodeURIComponent","productKeyIndex","indexOf","substring","classList","add","setAttribute","placementId","placementName","recommendationPlacementDiv","placement","undefined","remove","recommendationData","RR","placements","filter","obj","placement_name","hideRecommendationPlacement","dynamicTitle","message","addRecommendationTile","err","personalizationOptions","getDataFromService","isAsync","userId","xmlHttp","setRequestHeader","authorizationHeaderValue","getApiData","user","dataObj","FirstName","firstName","LastName","lastName","FullName","CompanyName","companyName","jobTitle","getPersonalizationData","personalizationData","localStorage","getItem","setItem","stringify","saveDataToLocalStorage","personalizedData","includes","renderServerUrl","urlList","origin","charAt","autofill","encodeURI","getAutoFillParameter"],"mappings":"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","file":"recommendationScript.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 20);\n","interface Window {\r\n sessionTrackerHelper?: (sessionTrackerHelper) => void;\r\n}\r\n\r\nwindow.sessionTrackerHelper = (): object => {\r\n \"use strict\";\r\n\r\n const delimiter = \"|\";\r\n const memberCookieName = \"member-id\";\r\n const memberIdCookiesComponent = {\r\n \"guestmemberid\": 0,\r\n \"encrpyteduserid\": 1,\r\n \"isloggedin\": 2,\r\n \"cookiereneweddate\": 3\r\n };\r\n\r\n return {\r\n getCookie: (cookieName): string => {\r\n const match = document.cookie.match(new RegExp(\"(^| )\" + cookieName + \"=([^;]+)\"));\r\n if (match) return match[2];\r\n return \"\";\r\n },\r\n\r\n getComponentFromMemberCookie: function (memberIdComponent): string {\r\n const memberIdCookie = decodeURI(this.getCookie(memberCookieName));\r\n if (memberIdCookie === \"\") {\r\n return \"\";\r\n }\r\n const trackingCookies = memberIdCookie.split(delimiter);\r\n if (trackingCookies === null || trackingCookies === undefined || trackingCookies.length !== 4) {\r\n return \"\";\r\n }\r\n return trackingCookies[memberIdComponent];\r\n },\r\n\r\n getSessionIdFromUserCookie: function (): string {\r\n return this.getComponentFromMemberCookie(memberIdCookiesComponent.guestmemberid);\r\n },\r\n\r\n getEncryptedUserIdFromUserCookie: function () {\r\n const isLoggedIn = this.getComponentFromMemberCookie(memberIdCookiesComponent.isloggedin) === \"1\";\r\n if (isLoggedIn) {\r\n return this.getComponentFromMemberCookie(memberIdCookiesComponent.encrpyteduserid);\r\n }\r\n return \"\";\r\n }\r\n };\r\n};\r\n","import '../scripts/utility';\r\nimport '../scripts/recommendationHelper';\r\nimport '../scripts/personalizationHelper';\r\nimport '../scripts/sessionTrackerHelper';\r\n","interface Window {\r\n utility?: (utility) => void;\r\n}\r\n\r\nwindow.utility = (): object => {\r\n \"use strict\";\r\n return {\r\n ajax: (method, endpointUrl): Promise => {\r\n return new Promise(function (resolve, reject) {\r\n var xhttp = new XMLHttpRequest();\r\n xhttp.onreadystatechange = function () {\r\n if (this.readyState === 4) {\r\n if (this.status === 200)\r\n resolve(this.responseText);\r\n else\r\n reject();\r\n }\r\n };\r\n xhttp.open(method, endpointUrl);\r\n xhttp.send();\r\n });\r\n }\r\n };\r\n};\r\n","declare let RR;\r\ndeclare let dataLayer;\r\n\r\ninterface Window {\r\n recommendationHelper?: (util, recommendationHelper) => void;\r\n}\r\n\r\nwindow.recommendationHelper = (util, personalizationHelper): object => {\r\n \"use strict\";\r\n let isPersonalizationEnabled = false;\r\n if (typeof personalizationHelper !== \"undefined\") {\r\n isPersonalizationEnabled = true;\r\n }\r\n const numberOfRecommendation = 4;\r\n function check_webp_feature(feature, callback) {\r\n const kTestImages = {\r\n lossy: \"UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA\",\r\n lossless: \"UklGRhoAAABXRUJQVlA4TA0AAAAvAAAAEAcQERGIiP4HAA==\",\r\n alpha: \"UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAARBxAR/Q9ERP8DAABWUDggGAAAABQBAJ0BKgEAAQAAAP4AAA3AAP7mtQAAAA==\",\r\n animation: \"UklGRlIAAABXRUJQVlA4WAoAAAASAAAAAAAAAAAAQU5JTQYAAAD/////AABBTk1GJgAAAAAAAAAAAAAAAAAAAGQAAABWUDhMDQAAAC8AAAAQBxAREYiI/gcA\"\r\n };\r\n let img = new Image();\r\n img.onload = function () {\r\n var result = (img.width > 0) && (img.height > 0);\r\n callback(feature, result);\r\n };\r\n img.onerror = function () {\r\n callback(feature, false);\r\n };\r\n img.src = \"data:image/webp;base64,\" + kTestImages[feature];\r\n }\r\n\r\n var isWebpSupported = false;\r\n check_webp_feature('lossy', function (feature, isSupported) {\r\n if (isSupported) {\r\n isWebpSupported = true;\r\n }\r\n });\r\n\r\n return {\r\n sendTrackingData(index, data, gaEvent): void {\r\n dataLayer.push(\r\n {\r\n event: \"CustomEventTracking\",\r\n eventCategory: `Cross Sell ${gaEvent}`,\r\n eventAction: \"Recommended\",\r\n eventLabel: data.productTypeCategory + \" - \" + data.title + \" - \" + data.itemId,\r\n eventValue: index\r\n });\r\n },\r\n\r\n createRecommendationTile(index, template, data, gaEvent, recommendationPlaceholders): string {\r\n const productData = data.itemId.split(\"_\");\r\n data.productCode = productData ? productData[0] : \"\";\r\n data.designCode = productData ? productData[1] : \"\";\r\n let imageUrl = isWebpSupported ? data.imageUrl : data.imageUrl.replace(new RegExp(\".webp\", \"ig\"), \".jpg\");\r\n imageUrl = isPersonalizationEnabled ? personalizationHelper.personalizedImageUrl(imageUrl) : imageUrl;\r\n return template\r\n .replace(new RegExp(recommendationPlaceholders.DesignCode, \"g\"), data.designCode)\r\n .replace(new RegExp(recommendationPlaceholders.ProductCode, \"g\"), data.productCode)\r\n .replace(new RegExp(recommendationPlaceholders.LinkUrl, \"g\"), data.linkUrl)\r\n .replace(new RegExp(recommendationPlaceholders.ImageUrl, \"g\"), imageUrl)\r\n .replace(new RegExp(recommendationPlaceholders.Title, \"g\"), data.title)\r\n .replace(new RegExp(recommendationPlaceholders.Price, \"g\"), data.price)\r\n .replace(new RegExp(recommendationPlaceholders.ProductTypeCategory, \"g\"), data.productTypeCategory)\r\n .replace(new RegExp(recommendationPlaceholders.RecommendationType, \"g\"), \"AI\")\r\n .replace(new RegExp(recommendationPlaceholders.Position, \"g\"), index.toString())\r\n .replace(new RegExp(recommendationPlaceholders.GAEventCategory, \"g\"), `Cross Sell ${gaEvent}`)\r\n .replace(new RegExp(recommendationPlaceholders.ItemId, \"g\"), data.itemId);\r\n },\r\n\r\n async addRecommendationTile(showLivePricing, selectedRecommendation, id, gaEvent, placeholders): Promise {\r\n const recommendationPlacement = \"recommendation-placement-\" + id;\r\n const tiles = document.getElementById(recommendationPlacement);\r\n const tileContent = tiles.innerHTML;\r\n tiles.innerHTML = \"\";\r\n const totalNumberOfRecommendation = numberOfRecommendation;\r\n\r\n for (let i = 0; i < selectedRecommendation.items.length; i++) {\r\n if (i < totalNumberOfRecommendation) {\r\n const recommendation = selectedRecommendation.items[i];\r\n this.sendTrackingData(i + 1, recommendation, gaEvent);\r\n\r\n if (showLivePricing) {\r\n const productKey = this.getProductKeyFromRecommendationLinkUrl(recommendation.linkUrl);\r\n const priceModelUrl = \"/services/printing/api/v3/product/\" + productKey + \"/pricemodel\";\r\n const result = await util.ajax(\"GET\", priceModelUrl);\r\n const priceModel = JSON.parse(result);\r\n recommendation.price = this.getRecommendationPriceTextFromPriceModel(priceModel.Prices);\r\n }\r\n tiles.innerHTML += this.createRecommendationTile(i + 1, tileContent, recommendation, gaEvent, placeholders);\r\n }\r\n }\r\n },\r\n\r\n getRecommendationPriceTextFromPriceModel: function (priceModel) {\r\n var priceModelSorted = priceModel.slice(0);\r\n priceModelSorted.sort((a, b) => a.MinQuantity - b.MinQuantity);\r\n var startingPrice = priceModelSorted[0];\r\n var minQuantity = startingPrice.MinQuantity;\r\n var minPrice = startingPrice.MinQuantity * startingPrice.Price;\r\n return \"Starting at $\" + minPrice.toFixed(2) + \" for \" + minQuantity;\r\n },\r\n\r\n getProductKeyFromRecommendationLinkUrl: function (url) {\r\n var productUri = encodeURIComponent(\"/services/printing/product/\");\r\n var productKeyIndex = url.indexOf(productUri) + productUri.length;\r\n return (url.substring(productKeyIndex));\r\n },\r\n\r\n hideRecommendationPlacement(id): void {\r\n document.getElementById(`recommendation-div-${id}`).classList.add(\"hide\");\r\n document.getElementById(`recommendation-div-${id}`)\r\n .setAttribute(\"automation-recommendation-source\", \"No Recommendation\");\r\n },\r\n\r\n async showRecommendation(showLivePricing, placementId, placementName, gaEvent, recommendationPlaceholders): Promise {\r\n const recommendationPlacementDiv = `recommendation-div-${placementId}`;\r\n const placement = document.getElementById(recommendationPlacementDiv);\r\n\r\n if (placement !== undefined) {\r\n placement.classList.remove(\"hide\");\r\n const recommendationData = (typeof (RR) !== \"undefined\" && RR && RR.data && RR.data.JSON) ? RR.data.JSON.placements : null;\r\n if (recommendationData) {\r\n const selectedRecommendation = recommendationData.filter(function (obj) {\r\n return obj.placement_name === placementName;\r\n })[0];\r\n if (selectedRecommendation === undefined) {\r\n this.hideRecommendationPlacement(placementId);\r\n } else {\r\n const dynamicTitle = selectedRecommendation.message ? selectedRecommendation.message : null;\r\n if (dynamicTitle) {\r\n const titleElement = document.getElementById(`recommendation-title-${placementId}`);\r\n titleElement.innerHTML = dynamicTitle;\r\n }\r\n\r\n try {\r\n await this.addRecommendationTile(showLivePricing, selectedRecommendation, placementId, gaEvent, recommendationPlaceholders);\r\n } catch (err) {\r\n // Hide the placement if any of the recommendation tiles failed\r\n this.hideRecommendationPlacement(placementId);\r\n }\r\n }\r\n } else {\r\n this.hideRecommendationPlacement(placementId);\r\n }\r\n }\r\n const spinner = document.getElementById(\"recommendation-spinner-\" + placementId);\r\n spinner.classList.add(\"hide\");\r\n }\r\n };\r\n};\r\n","interface Window {\r\n personalizationHelper?: (personalizationHelper) => void;\r\n}\r\n\r\nwindow.personalizationHelper = (personalizationOptions): object => {\r\n function getApiData(method, isAsync, userId) {\r\n const xmlHttp = new XMLHttpRequest();\r\n xmlHttp.open(method, personalizationOptions.endpointUrl + \"api/customer/\" + userId, isAsync);\r\n xmlHttp.setRequestHeader('Authorization', 'Bearer ' + personalizationOptions.authorizationHeaderValue);\r\n try {\r\n xmlHttp.send();\r\n if (xmlHttp.status != 200) {\r\n return null;\r\n } else {\r\n return xmlHttp.responseText;\r\n }\r\n } catch (err) { return null; }\r\n };\r\n\r\n function getDataFromService() {\r\n const data = getApiData(\"GET\", false, personalizationOptions.user);\r\n if (data != null) {\r\n const dataObj = JSON.parse(data);\r\n var personalizationData = {\r\n FirstName: dataObj.firstName,\r\n LastName: dataObj.lastName,\r\n FullName: dataObj.firstName + ' ' + dataObj.lastName,\r\n CompanyName: dataObj.companyName,\r\n Title: dataObj.jobTitle\r\n };\r\n return personalizationData;\r\n }\r\n return data;\r\n };\r\n\r\n function saveDataToLocalStorage(personalizationData) {\r\n return localStorage.setItem('personalization', JSON.stringify(personalizationData));\r\n };\r\n\r\n function getDataFromLocalStorage() {\r\n return JSON.parse(localStorage.getItem('personalization'));\r\n };\r\n\r\n function getPersonalizationData() {\r\n let personalizationData = getDataFromLocalStorage();\r\n\r\n if (personalizationData == null) {\r\n personalizationData = getDataFromService();\r\n if (personalizationData != null) {\r\n saveDataToLocalStorage(personalizationData);\r\n }\r\n }\r\n return personalizationData;\r\n };\r\n\r\n function getAutoFillParameter(data) {\r\n if (data == null) return '';\r\n let autofill = 'autofill=';\r\n if (data.FirstName != null) {\r\n autofill = autofill + 'FirstName' + '|' + encodeURI(data.FirstName) + ';';\r\n }\r\n if (data.LastName != null) {\r\n autofill = autofill + 'LastName' + '|' + encodeURI(data.LastName) + ';';\r\n }\r\n if (data.CompanyName != null) {\r\n autofill = autofill + 'CompanyName' + '|' + encodeURI(data.CompanyName) + ';';\r\n }\r\n if (data.Title != null) {\r\n autofill = autofill + 'JobTitle' + '|' + encodeURI(data.Title) + ';';\r\n }\r\n return autofill.slice(0, -1);\r\n }\r\n\r\n return {\r\n personalizedImageUrl: function (imageUrl): string {\r\n const personalizedData = getPersonalizationData();\r\n if (!personalizedData) { return imageUrl; }\r\n if (!imageUrl.includes(personalizationOptions.renderServerUrl)) {\r\n var urlList = imageUrl.split('/');\r\n var origin = urlList[0] + '//' + urlList[2] + '/';\r\n imageUrl = imageUrl.replace(origin, personalizationOptions.renderServerUrl);\r\n }\r\n if (imageUrl.charAt(imageUrl.length - 1) === ';') {\r\n imageUrl = imageUrl.slice(0, -1);\r\n }\r\n imageUrl = imageUrl + '&' + getAutoFillParameter(personalizedData);\r\n return imageUrl;\r\n }\r\n };\r\n};\r\n"],"sourceRoot":""}