{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///(webpack)/buildin/global.js","webpack:///./.tmp/app_sor_core/js/saveForLater.js","webpack:///./.tmp/app_sor_core/js/cart/saveForLater.js","webpack:///./.tmp/app_sor_core/js/components/utils.js","webpack:///./.tmp/app_sor_core/js/components/processInclude.js"],"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","g","this","Function","e","window","processInclude","require","$","utils","createErrorNotification","message","empty","alert","content","theme","placement","autoClose","removeFromList","pid","$sflContainer","$productCard","find","productName","text","trim","url","data","formData","$confirmModal","modal","title","resources","saveForLater","confirmRemoveItemTitle","confirmRemoveItemBody","modalSizeClass","buttons","removeBtn","cancelBtn","one","spinner","start","trigger","ajax","type","dataType","done","stop","error","errorMessage","quantityUpdated","autoUpdatedItems","length","itemList","join","quantityDeleted","autoDeletedItems","deletedList","alertMsg","slideUp","remove","html","listSizeMsg","lineItemsTotalCount","fail","err","responseJSON","redirectUrl","location","href","init","on","preventDefault","$this","$sflItemsContainer","$loadingDots","currentItemCount","pageSize","removeClass","show","setUrlData","hide","append","$loadMoreBtn","$loadAllBtn","$listSizeMsg","defaultPageSize","remainingItemsCount","Math","min","cartShowUrl","URL","searchParams","set","history","pushState","$loginRequiredModal","$elementsToBeRemoved","add","prev","fadeOut","keyValueArray","str","x","k","v","kvp","split","output","queryStringToObject","search","startIndex","indexOf","endIndex","substring","result","forEach","pair","nameVal","decodeURIComponent","JSON","parse","stringify","objectToQueryString","obj","urlString","path","hash","index","qsIndex","hashIndex","param","removeQueryParam","queryparam","delete","loadScript","src","callback","script","document","createElement","getElementsByTagName","appendChild","onload","loadJsAfterWindowLoad","readyState","addEventListener","heapify","list","ndx","heapSize","largest","left","right","global","cscUtils","appendParamToURL","encodeURIComponent","getParamsFromURL","arr","searchHash","postHash","arrHash","output2","keys","prop","updateURLParam","paramVal","newAdditionalURL","tempArray","baseURL","additionalURL","temp","arrayIntersection","a1","a2","map","inArray","createModalMarkup","options","defaults","showCloseBtn","enableLayeredDrawers","centeredClass","customClasses","modalId","settings","extend","dataAttributes","undefined","push","header","idAttribute","footer","footerBtns","btn","removeQueryParamFromCurrentUrl","replaceState","createBackdrop","customClass","removeBackdrop","selector","setUrlKeyValue","val","qs","decodeQueryParam","replace","elementInViewport","el","offsetToTop","top","offsetTop","offsetLeft","width","offsetWidth","height","offsetHeight","offsetParent","pageXOffset","pageYOffset","innerHeight","innerWidth","compatMode","documentElement","scrollTop","clientHeight","scrollLeft","clientWidth","insertAtInputCursor","formInput","input","selectionStart","end","selectionEnd","stringToTitleCase","word","charAt","toUpperCase","slice","toLowerCase","getTimeAndHours","stageMessage","date","Date","hours","getHours","minutes","getMinutes","ampm","findNHighest","listToUse","arrayLength","floor","firstListItem","heapifyMax","pop","deepEqual","obj1","obj2","reduce","isEqual","include"],"mappings":"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","file":"saveForLater.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 = 297);\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","'use strict';\n\nvar processInclude = require('./components/processInclude');\n\n$(function () {\n processInclude(require('./cart/saveForLater'));\n});\n","'use strict';\n\nconst utils = require('../components/utils');\n\n/**\n * renders an error alert at the top of the page.\n * @param {Object} message - Error message to display\n */\nfunction createErrorNotification(message) {\n $('.cart-error').empty().alert({\n content: message,\n theme: 'danger',\n placement: 'inline',\n autoClose: false\n });\n}\n\n/**\n * Click handler for when user clicks the Remove button on a Save For Later product.\n * @param {string} pid - the Product ID of the item to be removed.\n */\nfunction removeFromList(pid) {\n let $sflContainer = $('.js-save-for-later-container');\n let $productCard = $sflContainer.find(`.product-info[data-pid=${pid}]`);\n let productName = $productCard.find('.line-item-name').text().trim();\n let url = $sflContainer.data('remove-url');\n let formData = {\n pid\n };\n\n // create a confirmation dialog before removing the item\n const $confirmModal = $.modal({\n title: window.resources.saveForLater.confirmRemoveItemTitle,\n content: `
${window.resources.saveForLater.confirmRemoveItemBody}
${productName}
`,\n modalSizeClass: 'modal-md',\n buttons: [\n ``,\n ``\n ]\n }).one('shown.bs.modal', function () {\n $confirmModal.find('.js-confirm-remove-sfl-item').one('click', function () {\n $confirmModal.modal('hide');\n $.spinner().start();\n $('body').trigger('cart:beforeUpdate');\n $.ajax({\n url: url, // Cart-SaveForLaterRemoveProduct\n type: 'POST',\n data: formData,\n dataType: 'json'\n }).done(function (data) {\n $.spinner().stop();\n\n if (data.error) {\n createErrorNotification(data.errorMessage);\n return;\n }\n\n // Some product quantity was updated by middleware, refresh the cart and display message\n const quantityUpdated = data.autoUpdatedItems && data.autoUpdatedItems.length;\n if (quantityUpdated) {\n const itemList = data.autoUpdatedItems.join(',');\n const $cardContainer = $('.cart-product-line-items-container');\n $cardContainer.data('auto-updated-uuids', itemList);\n }\n\n const quantityDeleted = data.autoDeletedItems && data.autoDeletedItems.length;\n if (quantityDeleted) {\n const deletedList = data.autoDeletedItems.join(',');\n const $cardContainer = $('.cart-product-line-items-container');\n $cardContainer.data('auto-deleted-uuids', deletedList);\n }\n\n if (quantityUpdated || quantityDeleted) {\n $('body').trigger('cart:update', data);\n }\n\n $.alert({\n content: data.alertMsg,\n theme: 'success',\n placement: 'banner'\n });\n\n // remove the product card\n $productCard.slideUp(null, () => {\n $productCard.remove();\n });\n\n // update the list size\n $('.js-saveforlater-listsize').html(data.listSizeMsg).data('listsize', data.lineItemsTotalCount);\n if (!data.lineItemsTotalCount) {\n // list is empty\n $('.js-save-for-later-container').slideUp();\n }\n\n // update SFL warning alerts\n if (!$('.js-saveforlater-items .availability--not-available').length) {\n $('.js-sfl-oos-warning').remove();\n }\n }).fail(function (err) {\n if (err.responseJSON.redirectUrl) {\n location.href = err.responseJSON.redirectUrl;\n } else {\n createErrorNotification(err.responseJSON.errorMessage);\n $.spinner().stop();\n }\n });\n });\n }).one('hidden.bs.modal', function () {\n $confirmModal.remove();\n });\n}\n\n/**\n * Click handler for the SFL button when login is required\n * @param {jQuery} $this - the Load More button\n */\nfunction showLoginRequiredModal($this) {\n const $loginRequiredModal = $.modal({\n title: $this.data('modal-title'),\n content: $this.data('modal-content'),\n modalSizeClass: 'modal-md',\n buttons: [\n ``,\n ``\n ]\n }).one('shown.bs.modal', function () {\n // if the user clicks either button, another modal will open, so remove this loginRequired modal.\n $loginRequiredModal.find('.btn').one('click', function () {\n // we don't want to use .modal('fade') because that'll trigger the hidden.bs.modal event\n // which will remove classes/style from the body and affect scolling on the incoming modal.\n const $elementsToBeRemoved = $loginRequiredModal.add($loginRequiredModal.prev('.modal-backdrop'));\n $elementsToBeRemoved.fadeOut(null, null, function () {\n $elementsToBeRemoved.remove();\n });\n });\n }).one('hidden.bs.modal', function () {\n // if the user closes the loginRequired modal by clicking the backdrop, X button,\n // or using the ESC key, remove the modal from the dom.\n $loginRequiredModal.remove();\n });\n}\n\n/**\n * Click handler for the Load More button on save for later\n * @param {jQuery} $this - the Load More button\n */\nfunction loadMore($this) {\n const $sflItemsContainer = $('.js-saveforlater-items');\n const $loadingDots = $('.js-save-for-later-container .loading-dots').removeClass('d-none').show();\n let url = $this.data('action');\n // count the number of items already on the page\n let currentItemCount = $sflItemsContainer.find('.product-info').length;\n const pageSize = $this.data('page-size'); // number of items this button is requesting (if undefined, controller will use default pageSize)\n url = utils.setUrlData(url, {\n start: currentItemCount,\n pageSize: pageSize\n });\n $.ajax({\n url: url, // Cart-ShowSaveForLater?start=5 to get items 5 - 9 or ?start=0&pageSize=10 to get items 0 - 9\n type: 'GET'\n }).done(function (data) {\n $loadingDots.hide();\n $sflItemsContainer.append(data);\n\n // update Load More / Load All buttons\n const $loadMoreBtn = $('.js-sfl-load-more');\n const $loadAllBtn = $('.js-sfl-load-all');\n const $listSizeMsg = $('.js-saveforlater-listsize'); // this element holds the total list size and default page size in data attrs\n const defaultPageSize = $listSizeMsg.data('pagesize');\n const totalListSize = $listSizeMsg.data('listsize');\n currentItemCount = $sflItemsContainer.find('.product-info').length;\n const remainingItemsCount = totalListSize - currentItemCount;\n if (remainingItemsCount === 0) {\n $loadMoreBtn.hide();\n $loadAllBtn.hide();\n } else {\n $loadMoreBtn.show().find('span').text(Math.min(remainingItemsCount, defaultPageSize));\n\n if (remainingItemsCount > defaultPageSize) {\n $loadAllBtn.show().data('page-size', remainingItemsCount).find('span').text(remainingItemsCount);\n } else {\n $loadAllBtn.hide();\n }\n }\n\n // update querystring params so we can reload the page with the same number of items shown\n const cartShowUrl = new URL(location);\n cartShowUrl.searchParams.set('savedPageSize', currentItemCount);\n history.pushState({}, '', cartShowUrl);\n }).fail(function (err) {\n if (err.responseJSON.redirectUrl) {\n location.href = err.responseJSON.redirectUrl;\n } else {\n $loadingDots.hide();\n createErrorNotification(err.responseJSON.errorMessage);\n }\n });\n}\n\n/**\n * Initializes the Save For Later functionality. Sets up event listeners.\n */\nfunction init() {\n $('body')\n .on('click', '.js-saveForLater-remove-product', function (e) {\n e.preventDefault();\n removeFromList($(this).data('pid'));\n })\n .on('click', '.js-sfl-load-more, .js-sfl-load-all', function (e) {\n e.preventDefault();\n loadMore($(this));\n })\n .on('click', '.js-saveForLater-loginRequired', function (e) {\n e.preventDefault();\n showLoginRequiredModal($(this));\n });\n}\n\nmodule.exports = () => {\n init();\n\n return {\n removeFromList\n };\n};\n","'use strict';\n\n// TODO: https://columbia.atlassian.net/browse/GSD-16533 Update URL functions to use the JS URL API\n/**\n * Append a parameter to a url\n * @param {string} url - a url\n * @param {string} name - key\n * @param {string} value - value\n * @return {string} url with param appended\n */\nfunction appendParamToURL(url, name, value) {\n var c = '?';\n if (url.indexOf(c) !== -1) {\n c = '&';\n }\n return url + c + name + '=' + encodeURIComponent(value);\n}\n\n/**\n * Helper function for getParamsFromURL. Split a url string into key/value pairs.\n * @param {string} str - url parameter string\n * @return {Object} object with params split into key/value pairs\n */\nfunction keyValueArray(str) {\n var kvp = str.split('&');\n var x;\n var k;\n var v;\n var output = {};\n\n for (var i = kvp.length - 1; i >= 0; i--) {\n if (kvp[i].length) { // No empty strings...\n x = kvp[i].split('=');\n k = x[0];\n v = '';\n if (x.length > 1) {\n v = x[1];\n }\n output[k] = v;\n }\n }\n\n return output;\n}\n\n/**\n * Split a url string into key/value pairs.\n * @param {string} url - url parameter string\n * @return {Object} object with params split into key/value pairs\n */\nfunction getParamsFromURL(url) {\n var arr = url.split('?');\n var search = '';\n var searchHash = '';\n var postHash = false;\n\n if (arr.length > 1) {\n var arrHash = arr[1].split('#');\n search = arrHash[0];\n\n if (arrHash.length > 1) {\n postHash = true;\n searchHash = arrHash[1];\n }\n }\n\n var output = {};\n if (search.length) {\n output = keyValueArray(search);\n }\n if (postHash) {\n if (searchHash.length) {\n var output2 = keyValueArray(searchHash);\n Object.keys(output2).forEach(function (prop) {\n output[prop] = output2[prop]; // Merge them...\n });\n }\n }\n\n return output;\n}\n\n/**\n * Update an existing url param\n * https://stackoverflow.com/questions/1090948/change-url-parameters\n * @param {string} url - Url to be updated\n * @param {string} param - param to be updated\n * @param {string} paramVal - new parameter value\n * @returns {string} - updated url\n */\nfunction updateURLParam(url, param, paramVal) {\n var newAdditionalURL = '';\n var tempArray = url.split('?');\n var baseURL = tempArray[0];\n var additionalURL = tempArray[1];\n var temp = '';\n if (additionalURL) {\n tempArray = additionalURL.split('&');\n for (var i = 0; i < tempArray.length; i++) {\n if (tempArray[i].split('=')[0] !== param) {\n newAdditionalURL += temp + tempArray[i];\n temp = '&';\n }\n }\n }\n\n var rowsText = temp + '' + param + '=' + paramVal;\n return baseURL + '?' + newAdditionalURL + rowsText;\n}\n\n/**\n * Turn the URL query string into a JSON object to make it easier to add/update/delete key/value pairs.\n * @param {string} url the URL string from which to get the querystring. Null or empty string to use the location.href.\n * @returns {obejct} the query string as an object.\n */\nfunction queryStringToObject(url) {\n var search;\n if (!url) {\n // get the query string from window.location.search\n search = location.search.substring(1); // exclude the leading ?\n } else {\n // find the query string in the given url\n var startIndex = url.indexOf('?') + 1;\n var endIndex = url.indexOf('#');\n endIndex = endIndex >= startIndex ? endIndex : url.length;\n // examples:\n // 'key=val#hash', '/?key=val#hash' => 'key=val'\n // '?key#hash' => 'key'\n search = url.substring(startIndex, endIndex);\n if (startIndex === 0 && search.indexOf('=') === -1) {\n // this string doesn't look like a query string (no '?' and no '=')\n // examples: 'key#hash', '/#hash'\n search = '';\n }\n }\n\n var result = {};\n if (search) {\n var pairs = search.split('&');\n pairs.forEach(function (pair) {\n var nameVal = pair.split('=');\n result[nameVal[0]] = decodeURIComponent(nameVal[1] || '');\n });\n }\n\n return JSON.parse(JSON.stringify(result));\n}\n\n/**\n * Convert an object into a serialized string; the opposite of queryStringToObject().\n * @param {Object} obj The object to be serialized into a string\n * @param {string} urlString An optional url into which to insert the querystring. Any existing query string will be replaced.\n * @returns {string} The resulting query or URL string.\n */\nfunction objectToQueryString(obj, urlString) {\n var url = urlString || '';\n var path = '';\n var hash = '';\n if (url) {\n var qsIndex = url.indexOf('?');\n var hashIndex = url.indexOf('#');\n var index;\n if (hashIndex > -1) {\n index = hashIndex;\n hash = url.substring(hashIndex);\n }\n if (qsIndex > -1) {\n index = qsIndex;\n }\n path = url.substring(0, index); // if index is undefined, path is the entire string.\n }\n return path + '?' + $.param(obj) + hash;\n}\n\n/**\n * Update a URL with a key/value pair. This will insert or update a pair.\n * @param {string} url The url to be updated.\n * @param {string} name The key name to use in the query string.\n * @param {string} val The value of the key to be set.\n * @returns {string} The updated URL.\n */\nfunction setUrlKeyValue(url, name, val) {\n var qs = queryStringToObject(url);\n qs[name] = encodeURIComponent(val);\n return objectToQueryString(qs, url);\n}\n\n/**\n * Update a URL with multiple key/value pairs. This will insert new or update existing keys.\n * @param {string} url The url to be updated.\n * @param {Object} obj an object of name/value pairs to be inserted/updated in the url query string.\n * @returns {string} The updated URL.\n */\nfunction setUrlData(url, obj) {\n var qs = queryStringToObject(url);\n var mergedQs = $.extend({}, qs, obj);\n return objectToQueryString(mergedQs, url);\n}\n\n/**\n * DecodeURIComponent cannot be used directly to parse query parameters from a URL. It needs a bit of preparation.\n * reference: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent\n * @param {string} val The query param value to be decoded.\n * @returns {string} The decoded query param value.\n */\nfunction decodeQueryParam(val) {\n return decodeURIComponent(val.replace(/\\+/g, ' '));\n}\n\n/**\n * Remove the queryparam from the url\n * @param {string} queryparam queryparam to be removed\n * @param {string} urlString url to be manipulated\n * @returns {URL} new url without provided queryparam\n */\nfunction removeQueryParam(queryparam, urlString) {\n var url = new URL(urlString);\n url.searchParams.delete(queryparam);\n return url;\n}\n\n/**\n * Remove the queryparam from the url, and replace the state\n * @param {string} queryparam queryparam to be removed\n */\nfunction removeQueryParamFromCurrentUrl(queryparam) {\n var url = removeQueryParam(queryparam, window.location.href);\n history.replaceState(null, '', url);\n}\n\n/**\n * Returns an array with values that exist in both arrays\n * @param {array} a1 - Array\n * @param {array} a2 - Array\n * @return {array} - Values that appear in both arrays\n */\nfunction arrayIntersection(a1, a2) {\n var intersect = $.map(a1,\n function (v) {\n return $.inArray(v, a2) < 0 ? null : v;\n }\n );\n return intersect;\n}\n\n/**\n * Creates and returns the markup required to display a modal.\n * The calling script should then use the bootstrap $.modal() method to display the modal.\n * Example 1:\n * var modalMarkup = createModalMarkup('Hello World
', {title: 'Greeting'});\n * var $modal = $(modalMarkup).modal();\n * Example 2:\n * var $modal = $(createModalMarkup('')); // create empty modal\n * $modal.find('.modal-body').html(data); // inject content into the returned markup\n * $modal.modal();\n * @param {string} content The content to put in the modal. Pass empty string to just get the modal markup.\n * @param {Object} options Additional settings.\n * @return {string} The completed markup.\n */\nfunction createModalMarkup(content = '', options = {}) {\n /* Bootstrap Modal documentation: https://getbootstrap.com/docs/4.0/components/modal/ */\n const defaults = {\n title: '',\n showCloseBtn: true,\n enableLayeredDrawers: false,\n modalSizeClass: 'modal-lg', // possible values: modal-sm, modal-md (or empty string), modal-lg, modal-fluid\n centeredClass: 'modal-dialog-centered', // pass empty string to top-align the modal\n customClasses: '', // additional classes to be added to the modal\n modalId: '', // Custom id for the modal\n buttons: [\n // example markup (this will also dismiss the modal on click):\n // ''\n ]\n };\n const settings = $.extend({}, defaults, options);\n\n // additional uncommon bootstrap options go into data attributes\n const dataAttributes = [];\n ['backdrop', 'keyboard', 'focus', 'show'].forEach(param => {\n if (settings[param] !== undefined) {\n dataAttributes.push(`data-${param}=\"${settings[param]}\"`);\n }\n });\n\n let header = '