{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./assets/src/js/swatches.js","webpack:///./assets/src/js/modules/toggle-content-to-modal.js","webpack:///./assets/src/js/modules/site-modal.js","webpack:///./assets/src/js/utils/formatting-utils.js","webpack:///./assets/src/js/events/site-events.js","webpack:///./assets/src/js/utils/scrolling-utils.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","Vue","component","props","data","$btn","previousElementInFocus","methods","swatchButtonHandler","event","this","$","target","closest","isInLocalSwatchbook","swatch","Id","removeSwatch","addSwatch","onSwatchbookUpdated","action","eventName","a","siteEventNames","ADD_SWATCH","REMOVE_SWATCH","dispatchSiteEvent","item_category","item_category2","capitalize","selectedTab","item_id","item_name","JSSafeColorName","price","quantity","swatch_category","swatch_collection","JSSafeCollectionName","swatch_color","swatch_id","swatch_number","ColorNumber","swatch_product","JSSafeStyleTitle","swatch_type","JSSafeSwatchCategoryName","that","id","window","isAuthenticated","addClass","StorageActions","saveItemToAccount","getSwatchAccountOptions","removeClass","success","localSwatchbook","push","$emit","swatchbook","saveItem","getLocalStorageOptions","digitalSwatchId","accountSwatchData","length","toString","console","warn","removeItemFromAccount","splice","indexOf","removeItem","productLineCode","SwatchProductLineCode","colorNumber","swatchId","type","imageUrl","swatchImagePath","LargeImagePath","description","page","dateSaved","Date","category","collection","colorName","styleId","StyleId","swatchCatId","SwatchCategoryId","swatchCatName","newSwatch","NewSwatch","productLine","JSSafeProductLineTitle","assetId","AssetId","openSwatchModal","src","document","activeElement","gallery","getElementById","lightGallery","dynamic","dynamicEl","download","share","startClass","speed","width","height","counter","addEventListener","handleCloseGallery","showSwatchMenu","hideSwatchMenu","removeEventListener","lgData","getAttribute","destroy","focus","vm","el","initialLineId","initialShadesLineId","initialBlindsLineId","initialDraperyLineId","allSwatches","availableColorRanges","productFilterOpen","collectionFilterOpen","colorFilterOpen","catalogUrl","swatchCatalogPath","productLines","collections","colorRanges","linesToLoad","linesLoaded","productStyles","productLineLoadItr","checkedCollections","checkedColorRanges","checkedProductStyles","showAllCollections","numSwatchesToDisplay","loadedFromParam","loadedFromParamLineName","requesting","currentLineOpen","visualizerModelId","visualizerProgamFamilyName","xhrRequest","loadedData","shades","loaded","swatches","blinds","drapery","computed","filteredByProductStyleSwatches","arr","computedProductStyles","tempArr","options","j","regex","RegExp","filter","test","filteredByCollectionAndColorsSwatches","computedCollections","replace","colorSwatches","computedColorRanges","match","SwatchColorRangeIds","parseInt","gah","num","displayedCollections","checkedArr","sort","truncatedCollections","sortedDisplayedCollections","slice","truncatedColorRanges","forEach","colorRange","SwatchColorRangeList","findIndex","listItem","truncatedSwatches","clearFilters","resetCurrentLineOpen","clearEverything","abort","filterOpen","getParameterByName","url","location","href","results","exec","decodeURIComponent","getProductNameById","mergedArr","concat","Name","getCatalogData","successCallback","XMLHttpRequest","request","requestURL","open","onload","status","JSON","parse","responseText","onerror","send","getHashedCase","toLowerCase","getCategoryIndex","categoryName","BlindTypeDescription","overrideNaturalDrapesProps","ProductLines","BlindTypeCode","naturalDrapesIndex","draperyIndex","onCategoryLoadComplete","removeProductLineById","line","onCatalogDataComplete","isSwatchesEmpty","Swatches","isLineLoaded","SelectedProductId","blindTypeDescription","SelectedProductLine","productLinesIndex","prodName","getSwatchProductUrlParams","visualizerUrlParams","addSwatchesToSwatchArray","isProductAvailableInVisualizer","ranges","ColorRanges","cr","title","Title","hex","q","optionsArray","productLineId","SwatchGrouping","Styles","cat","Categories","removeURLParam","history","replaceState","pathname","changeSelectedTab","tab","resetSwatchesScroll","selectedTabsLoadedData","getSwatchesInSwatchbook","useLocalStorage","items","getItemsFromAccount","onSwatchesLoaded","element","scrollY","offsetTop","scrollToElement","behavior","handleScroll","swatchGrid","getBoundingClientRect","bottom","innerHeight","onLineClick","handleUpdateAccountSwatchData","unshift","watch","mounted","ToggleContentToModal","callbacks","onOpen","onClose","modalId","toggleSelector","toggleContent","content","modalSelector","defaultSelector","product","isNaN","prevWinWidth","mobileBrkpt","toggleBtn","querySelector","modal","SiteModal","onResize","updateContentOnResize","item","filters","append","wrapper","innerWidth","detatchFromModal","close","appendToModal","modalDiv","isOpen","map","querySelectorAll","btn","onDocumentModalKeyUp","keyCode","contentHeight","offsetHeight","style","updateHeight","classList","remove","resetFocus","add","setPreviousElementInFocus","str","charAt","toUpperCase","ADD_EXPERT","DEALER_PHONE_CLICK","DEALER_WEBSITE_CLICK","ON_ACCOUNT_CREATED","ON_DEALER_SEARCH","ON_FORM_SUBMIT_SUCCESS","ON_LOGGED_IN","ON_ORDER_SUBMITTED","ON_ORDER_CONFIRMATION","siteEventRegistry","keys","dispatchEvent","getEventData","initSiteEvents","Event","offset","position","y","scrollTo","top"],"mappings":"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","file":"swatches.min.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 = 0);\n","import ToggleContentToModal from './modules/toggle-content-to-modal';\nimport { capitalize } from './utils/formatting-utils';\nimport {\n dispatchSiteEvent,\n siteEventNames,\n} from './events/site-events';\nimport { scrollToElement } from './utils/scrolling-utils';\n\nVue.component('swatchcard', {\n props: ['swatch', 'localSwatchbook', 'accountSwatchData', 'selectedTab'],\n data: function() {\n return {\n $btn: null,\n previousElementInFocus: null,\n }\n },\n methods: {\n swatchButtonHandler: function(event) {\n this.$btn = $(event.target).closest('button');\n if (this.isInLocalSwatchbook('sw-' + this.swatch.Id)) {\n this.removeSwatch();\n } else {\n this.addSwatch();\n }\n },\n onSwatchbookUpdated: function(action) {\n var eventName = '';\n if (action === 'add') {\n eventName = siteEventNames.ADD_SWATCH;\n } else if (action === 'remove') {\n eventName = siteEventNames.REMOVE_SWATCH;\n } else {\n return;\n }\n dispatchSiteEvent(eventName, {\n // \n item_category: 'Swatches',\n item_category2: capitalize(this.selectedTab),\n item_id: this.swatch.Id,\n item_name: this.swatch.JSSafeColorName,\n price: 0,\n quantity: 1,\n // \n swatch_category: capitalize(this.selectedTab),\n swatch_collection: this.swatch.JSSafeCollectionName,\n swatch_color: this.swatch.JSSafeColorName,\n swatch_id: this.swatch.Id,\n swatch_number: this.swatch.ColorNumber,\n swatch_product: this.swatch.JSSafeStyleTitle,\n swatch_type: this.swatch.JSSafeSwatchCategoryName,\n });\n },\n addSwatch: function() {\n var that = this;\n var id = 'sw-' + this.swatch.Id;\n if (window.isAuthenticated) {\n this.$btn.addClass('btn--disabled');\n window.StorageActions.saveItemToAccount('swatch', this.getSwatchAccountOptions(), function(data) {\n that.$btn.removeClass('btn--disabled');\n if (data.success) {\n that.localSwatchbook.push(id);\n // Update accountSwatchData\n that.$emit('update-account-swatches');\n that.onSwatchbookUpdated('add');\n }\n });\n } else {\n this.localSwatchbook.push(id);\n window.swatchbook.saveItem(this.getLocalStorageOptions());\n this.onSwatchbookUpdated('add');\n }\n },\n removeSwatch: function() {\n var that = this;\n var id = 'sw-' + this.swatch.Id;\n if (window.isAuthenticated) {\n // Get asset id\n var digitalSwatchId;\n for (var i = 0; i < this.accountSwatchData.length; i++) {\n if (id === 'sw-' + this.accountSwatchData[i]['swatch-id'].toString()) {\n digitalSwatchId = this.accountSwatchData[i]['digital-swatch-id']\n }\n }\n if (!digitalSwatchId) {\n console.warn('swatches.js, no digital-swatch-id found, cannot remove.');\n return;\n }\n this.$btn.addClass('btn--disabled');\n window.StorageActions.removeItemFromAccount('swatch', digitalSwatchId, function(data) {\n that.$btn.removeClass('btn--disabled');\n if (data.success) {\n that.localSwatchbook.splice(that.localSwatchbook.indexOf(id), 1);\n // Update accountSwatchData\n that.$emit('update-account-swatches');\n that.onSwatchbookUpdated('remove');\n }\n });\n } else {\n window.swatchbook.removeItem('swatch', id);\n this.localSwatchbook.splice(this.localSwatchbook.indexOf(id), 1);\n this.onSwatchbookUpdated('remove');\n }\n },\n isInLocalSwatchbook: function(id) {\n if (this.localSwatchbook.indexOf(id) !== -1) {\n return true;\n }\n return false;\n },\n getSwatchAccountOptions: function() {\n return {\n productLineCode: this.swatch.SwatchProductLineCode,\n colorNumber: this.swatch.ColorNumber,\n swatchId: this.swatch.Id.toString()\n };\n },\n getLocalStorageOptions: function() {\n return {\n type: 'swatch',\n id: 'sw-' + this.swatch.Id,\n imageUrl: window.swatchImagePath + '/GraberBlindsImages/SwatchImages/' + this.swatch.LargeImagePath,\n description: '',\n page: 'Order Free Swatches',\n dateSaved: new Date(),\n name: this.swatch.JSSafeColorName,\n category: capitalize(this.selectedTab),\n colorNumber: this.swatch.ColorNumber,\n collection: this.swatch.JSSafeCollectionName,\n colorName: this.swatch.JSSafeColorName,\n styleId: this.swatch.StyleId,\n swatchId: this.swatch.Id,\n swatchCatId: this.swatch.SwatchCategoryId,\n swatchCatName: this.swatch.JSSafeSwatchCategoryName,\n newSwatch: this.swatch.NewSwatch,\n productLine: this.swatch.JSSafeProductLineTitle,\n productLineCode: this.swatch.SwatchProductLineCode,\n assetId: this.swatch.AssetId\n };\n },\n openSwatchModal: function(src) {\n this.previousElementInFocus = document.activeElement;\n var gallery = document.getElementById('swatch-modal');\n lightGallery(gallery, {\n dynamic: true,\n dynamicEl: [{\n 'src': src,\n }],\n download: false,\n share: false,\n startClass: 'lg-start-fade',\n speed: 100,\n addClass: 'lg--swatch',\n width: '300px',\n height: '300px',\n counter: false\n });\n gallery.addEventListener('onCloseAfter', this.handleCloseGallery);\n },\n showSwatchMenu: function(event) {\n $(event.target).closest('.o-swatchCard__image').addClass('show-menu');\n },\n hideSwatchMenu: function(event) {\n $(event.target).closest('.o-swatchCard__image').removeClass('show-menu');\n },\n handleCloseGallery: function(event) {\n event.target.removeEventListener('onCloseAfter', this.handleCloseGallery);\n window.lgData[event.target.getAttribute('lg-uid')].destroy(true);\n this.previousElementInFocus.focus();\n }\n }\n});\n\nvar vm = new Vue({\n el: '#swatches-app',\n data: {\n isAuthenticated: window.isAuthenticated,\n initialLineId: 200,\n initialShadesLineId: 200,\n initialBlindsLineId: 332,\n initialDraperyLineId: 1365,\n allSwatches: [],\n availableColorRanges: [],\n productFilterOpen: true,\n collectionFilterOpen: true,\n colorFilterOpen: true,\n catalogUrl: window.swatchCatalogPath,\n productLines: [],\n collections: [],\n colorRanges: [],\n linesToLoad: [],\n linesLoaded: [],\n productStyles: [],\n productLineLoadItr: 0,\n checkedCollections: [],\n checkedColorRanges: [],\n checkedProductStyles: [],\n showAllCollections: false,\n numSwatchesToDisplay: 48,\n selectedTab: 'shades',\n loadedFromParam: false,\n loadedFromParamLineName: '',\n localSwatchbook: [],\n requesting: false,\n currentLineOpen: null,\n visualizerModelId: '',\n visualizerProgamFamilyName: '',\n accountSwatchData: [],\n xhrRequest: null,\n loadedData: {\n shades: {\n loaded: false,\n swatches: [],\n productLines: [],\n collections: [],\n colorRanges: []\n },\n blinds: {\n loaded: false,\n swatches: [],\n productLines: [],\n collections: [],\n colorRanges: []\n },\n drapery: {\n loaded: false,\n swatches: [],\n productLines: [],\n collections: [],\n colorRanges: []\n },\n }\n },\n computed: {\n filteredByProductStyleSwatches: function () {\n var arr = this.computedProductStyles;\n var tempArr = [];\n if (arr.length === 0 && this.currentLineOpen !== null) {\n // *NEW* Auto-populate arr w/ currentLine options\n // to \"show\" all swatches from this product line w/o checking boxes\n // Once box is checked, use existing logic\n if (this.currentLineOpen.options) {\n for (var j = 0; j < this.currentLineOpen.options.length; j++) {\n tempArr.push(this.currentLineOpen.name + ' ' + this.currentLineOpen.options[j]);\n }\n }\n arr = tempArr;\n }\n // Filter by Product Styles\n var s = '';\n for (var i = 0; i < arr.length; i++) {\n if (i === 0) {\n s = s + '^';\n } else {\n s = s + '|^';\n }\n s = s + arr[i];\n s = s + '$';\n }\n var regex = new RegExp(s, 'i');\n var swatches = this.allSwatches.filter(function(swatch){\n var tested = regex.test(swatch.JSSafeProductLineTitle + ' ' + swatch.JSSafeSwatchCategoryName);\n return tested\n });\n return swatches;\n },\n filteredByCollectionAndColorsSwatches: function () {\n var that = this;\n var s = '';\n for (var i = 0; i < this.computedCollections.length; i++) {\n if (i === 0) {\n s = s + '^';\n } else {\n s = s + '|^';\n }\n s = s + this.computedCollections[i].replace(/([^a-z0-9]+)/gi, ' ');\n s = s + '$';\n }\n var regex = new RegExp( s, \"i\" );\n var swatches = this.filteredByProductStyleSwatches.filter(function(swatch){\n var tested;\n if (swatch.JSSafeCollectionName === \"\") { // if swatch has no collection\n if (that.collections.length !== that.computedCollections.length) { // if collections are checked\n tested = false;\n } else {\n tested = true;\n }\n } else {\n tested = regex.test(swatch.JSSafeCollectionName.replace(/([^a-z0-9]+)/gi, ' '));\n }\n return tested\n });\n\n var colorSwatches = swatches.filter(function(swatch){\n var test;\n if (that.colorRanges.length === that.computedColorRanges.length) { // if no color ranges are checked\n test = true;\n } else {\n var match = false;\n if (swatch.SwatchColorRangeIds !== null) {\n for (var n = 0; n < swatch.SwatchColorRangeIds.length; n++) {\n if (that.computedColorRanges.indexOf(parseInt(swatch.SwatchColorRangeIds[n])) !== -1) {\n match = true;\n }\n }\n }\n if (match) {\n test = true;\n } else {\n test = false;\n }\n }\n return test\n });\n\n if (swatches)\n return colorSwatches\n },\n computedColorRanges: function () {\n if (this.checkedColorRanges.length === 0) {\n var gah = [];\n for (var i = 0; i < this.colorRanges.length; i++) {\n gah.push(this.colorRanges[i].num);\n }\n return gah;\n } else {\n return this.checkedColorRanges;\n }\n },\n computedCollections: function () { // Logic used for filtering swatches if no collections checked\n if (this.checkedCollections.length === 0) {\n return this.collections;\n } else {\n return this.checkedCollections;\n }\n },\n displayedCollections: function () { // Logic for what collections to render in filter list\n var checkedArr = this.checkedProductStyles;\n var tempArr = [];\n if (checkedArr.length === 0 && this.currentLineOpen !== null) {\n // *NEW* Auto-populate collections based on currentLine options\n // to \"show\" all swatches from this product line w/o checking boxes\n // Once box is checked, use existing logic\n if (this.currentLineOpen.options) {\n for (var j = 0; j < this.currentLineOpen.options.length; j++) {\n tempArr.push(this.currentLineOpen.name + ' ' + this.currentLineOpen.options[j]);\n }\n checkedArr = tempArr;\n }\n }\n if (checkedArr.length === 0) { // If there are no product styles checked\n return this.collections; // Then return all collections\n } else { // Otherwise return all collections associated with checked product styles\n var arr = [];\n for (var i = 0; i < this.filteredByProductStyleSwatches.length; i++) {\n if (arr.indexOf(this.filteredByProductStyleSwatches[i].JSSafeCollectionName) == -1 && this.filteredByProductStyleSwatches[i].JSSafeCollectionName !== '') {\n arr.push(this.filteredByProductStyleSwatches[i].JSSafeCollectionName);\n }\n }\n return arr.sort();\n }\n },\n computedProductStyles: function () {\n if (this.checkedProductStyles.length === 0) {\n return this.productStyles;\n } else {\n return this.checkedProductStyles;\n }\n },\n truncatedCollections: function () {\n var sortedDisplayedCollections = this.displayedCollections;\n sortedDisplayedCollections.sort();\n if (this.showAllCollections) {\n return sortedDisplayedCollections;\n } else {\n return sortedDisplayedCollections.slice(0, 8);\n }\n },\n truncatedColorRanges: function() {\n if (this.checkedColorRanges.length > 0) {\n return this.availableColorRanges;\n }\n var that = this;\n this.availableColorRanges = [];\n that.colorRanges.forEach((colorRange) => {\n let match = -1;\n that.filteredByCollectionAndColorsSwatches.forEach((swatch) => {\n if (match === -1 && swatch.SwatchColorRangeList) {\n match = swatch.SwatchColorRangeList.findIndex((listItem) => listItem.Id === colorRange.num);\n }\n });\n if (match > -1) {\n this.availableColorRanges.push(colorRange);\n }\n });\n return this.availableColorRanges;\n },\n truncatedSwatches: function () {\n return this.filteredByCollectionAndColorsSwatches.slice(0, this.numSwatchesToDisplay);\n }\n },\n methods: {\n clearFilters: function () {\n this.checkedProductStyles = [];\n this.checkedCollections = [];\n this.checkedColorRanges = [];\n this.resetCurrentLineOpen();\n this.showAllCollections =true;\n },\n clearEverything: function () {\n this.xhrRequest.abort();\n this.allSwatches = [];\n this.availableColorRanges = [];\n this.productLines = [];\n this.collections = [];\n this.colorRanges = [];\n this.linesToLoad = [];\n this.linesLoaded = [];\n this.productStyles = [];\n this.productLineLoadItr = 0;\n this.clearFilters();\n this.requesting = false;\n },\n resetCurrentLineOpen: function() {\n if (this.currentLineOpen) {\n this.currentLineOpen.filterOpen = false;\n this.currentLineOpen = null;\n }\n },\n getParameterByName: function (name, url) {\n if (!url) url = window.location.href;\n name = name.replace(/[\\[\\]]/g, \"\\\\$&\");\n var regex = new RegExp(\"[?&]\" + name + \"(=([^&#]*)|&|#|$)\"),\n results = regex.exec(url);\n if (!results) return null;\n if (!results[2]) return '';\n return decodeURIComponent(results[2].replace(/\\+/g, \" \"));\n },\n getProductNameById: function(id, arr) {\n var mergedArr = [];\n for (var i = 0; i < arr.length; i++) {\n mergedArr = mergedArr.concat(arr[i]);\n }\n // Need to concatenate all arrays?\n for (i = 0; i < mergedArr.length; i++) {\n if (mergedArr[i].Id === id) {\n return mergedArr[i].Name;\n }\n }\n return null;\n },\n getCatalogData: function (category, successCallback) {\n // If category has been changed before catalogData\n // request has finished, abort the XHR request\n var that = this;\n this.xhrRequest = new XMLHttpRequest();\n var request = this.xhrRequest;\n var requestURL = that.catalogUrl + category;\n request.open('GET', requestURL, true);\n this.requesting = true;\n request.onload = function () {\n if (request.status >= 200 && request.status < 400) {\n var data = JSON.parse(request.responseText);\n if (successCallback) {\n successCallback(data);\n }\n }\n };\n request.onerror = function () {\n console.warn('Connection error loading ' + requestURL);\n that.requesting = false;\n };\n request.send();\n },\n getHashedCase: function (value) {\n if (!value) return ''\n return value.toLowerCase().replace(/[\\s]+/g, '-').replace(/-&/g, '');\n },\n getCategoryIndex: function(productLines, categoryName) {\n for (var i = 0; i < productLines.length; i++) {\n var productLine = productLines[i]\n for (var j = 0; j < productLine.length; j++) {\n if (productLine[j].BlindTypeDescription.toLowerCase() === categoryName) {\n return i;\n }\n }\n }\n return -1;\n },\n overrideNaturalDrapesProps: function (data) {\n for (var i = 0; i < data.ProductLines.length; i++) {\n var productLine = data.ProductLines[i]\n for (var j = 0; j < productLine.length; j++) {\n if (productLine[j].Name === 'Natural Drapes') {\n productLine[j].BlindTypeCode = 'D';\n productLine[j].BlindTypeDescription = 'Drapery';\n // Remove from Shades index\n var naturalDrapesIndex = productLine.splice(j, 1);\n // Move to Drapery\n var draperyIndex = this.getCategoryIndex(data.ProductLines, 'drapery');\n if (draperyIndex !== -1) {\n data.ProductLines[draperyIndex].push(naturalDrapesIndex[0]);\n return data;\n }\n }\n }\n }\n return data;\n },\n onCategoryLoadComplete: function () {\n // If we have loaded all of the data, mark that category as\n // loaded and copy all of the data to the main data object\n switch (this.selectedTab) {\n case 'shades':\n this.loadedData.shades.loaded = true;\n this.loadedData.shades.swatches = this.allSwatches;\n this.loadedData.shades.productLines = this.productLines;\n this.loadedData.shades.collections = this.collections;\n this.loadedData.shades.colorRanges = this.colorRanges;\n break;\n case 'blinds':\n this.loadedData.blinds.loaded = true;\n this.loadedData.blinds.swatches = this.allSwatches;\n this.loadedData.blinds.productLines = this.productLines;\n this.loadedData.blinds.collections = this.collections;\n this.loadedData.blinds.colorRanges = this.colorRanges;\n break;\n case 'drapery':\n this.loadedData.drapery.loaded = true;\n this.loadedData.drapery.swatches = this.allSwatches;\n this.loadedData.drapery.productLines = this.productLines;\n this.loadedData.drapery.collections = this.collections;\n this.loadedData.drapery.colorRanges = this.colorRanges;\n break;\n }\n this.requesting = false;\n },\n removeProductLineById: function (id) {\n this.productLines = this.productLines.filter((line) => {\n return line.id !== id;\n });\n },\n onCatalogDataComplete: function (data) {\n // Override BlindTypeDescription and BlindTypeCode for Natural Drapes (HACK!)\n data = this.overrideNaturalDrapesProps(data);\n // If length of Swatches array is 0, then remove it from product from productLines array\n var isSwatchesEmpty = data.Swatches.length === 0;\n // Is line already loaded?\n var isLineLoaded = this.linesLoaded.indexOf(data.SelectedProductId) !== -1;\n // Get product line category name\n var blindTypeDescription = data.SelectedProductLine.BlindTypeDescription.toLowerCase();\n // When loading page w/ url param that is just a category number,\n // need to find what the category is so we can highlight correct tab\n if (this.selectedTab === '') {\n this.selectedTab = blindTypeDescription;\n }\n if (blindTypeDescription !== this.selectedTab) {\n console.warn(`${blindTypeDescription} is not selected tab`);\n this.requesting = false;\n return;\n }\n if (isLineLoaded || isSwatchesEmpty) {\n this.productLineLoadItr++;\n this.requesting = false;\n if (isSwatchesEmpty) {\n this.removeProductLineById(data.SelectedProductId);\n }\n if (this.productLineLoadItr === this.linesToLoad.length) {\n this.onCategoryLoadComplete();\n } else {\n this.getCatalogData(this.linesToLoad[this.productLineLoadItr], this.onCatalogDataComplete);\n }\n return;\n }\n // If initial run, set the tab and grab all the product lines\n if (this.productLines.length === 0) {\n this.linesLoaded = [];\n // Find product line index from blindTypeDescription\n var productLinesIndex = this.getCategoryIndex(data.ProductLines, blindTypeDescription);\n if (productLinesIndex === -1) {\n console.warn(`Product line for ${blindTypeDescription} not found`);\n this.requesting = false;\n return\n }\n // Get the name of the product line if loaded from a param number\n if (this.loadedFromParam) {\n this.loadedFromParamLineName = data.SelectedProductLine.Name;\n }\n // For all the product lines, grab the product line info and\n // add it to the product lines array.\n for (var i = 0; i < data.ProductLines[productLinesIndex].length; i++) {\n var name = data.ProductLines[productLinesIndex][i].Name;\n var line = {};\n line.category = data.ProductLines[productLinesIndex][i].BlindTypeDescription;\n line.name = name;\n line.id = data.ProductLines[productLinesIndex][i].Id;\n line.filterOpen = this.loadedFromParamLineName === name;\n this.productLines.push(line);\n if (line.id !== this.initialLineId) {\n this.linesToLoad.push(line.id);\n }\n }\n } else {\n // Not the first line loaded, increment load counter\n this.productLineLoadItr++;\n }\n this.linesLoaded.push(data.SelectedProductId);\n // Add the swatches to swatch array (and other things lol)\n // Load in product visualizer url params, then add swatches to page\n var prodName = this.getProductNameById(data.SelectedProductId, data.ProductLines);\n var that = this;\n window.swatchbook.getSwatchProductUrlParams(prodName, function(visualizerUrlParams) {\n that.addSwatchesToSwatchArray(data, visualizerUrlParams, blindTypeDescription);\n });\n // If we have not loaded all the lines to load yet,\n // load the next line in the array of lines to load\n if (this.productLineLoadItr === this.linesToLoad.length) {\n this.onCategoryLoadComplete();\n } else {\n this.getCatalogData(this.linesToLoad[this.productLineLoadItr], this.onCatalogDataComplete);\n }\n },\n addSwatchesToSwatchArray: function (data, visualizerUrlParams, blindTypeDescription) {\n for (var i = 0; i < data.Swatches.length; i++) {\n if (this.selectedTab !== blindTypeDescription) {\n return;\n }\n data.Swatches[i].visualizerModelId = visualizerUrlParams.visualizerModelId;\n data.Swatches[i].visualizerProgamFamilyName = visualizerUrlParams.visualizerProgamFamilyName;\n if (visualizerUrlParams.visualizerModelId !== null && visualizerUrlParams.visualizerProgamFamilyName !== null) {\n data.Swatches[i].isProductAvailableInVisualizer = true;\n } else {\n data.Swatches[i].isProductAvailableInVisualizer = false;\n }\n // Add to array\n this.allSwatches.push(data.Swatches[i]);\n\n var collection = data.Swatches[i].JSSafeCollectionName;\n if (this.collections.indexOf(collection) == -1 && collection !== '') {\n this.collections.push(collection);\n }\n }\n var ranges = data.ColorRanges;\n var cr = {};\n for (var i = 0; i < ranges.length; i++) {\n if (this.colorRanges.length === 0) {\n cr = {};\n cr.title = ranges[i].Title;\n cr.hex = this.getHashedCase(cr.title); // ranges[i].CssColor;\n cr.num = ranges[i].Id;\n this.colorRanges.push(cr);\n } else {\n var match = false;\n for (var q = 0; q < this.colorRanges.length; q++) {\n if (this.colorRanges[q].title === ranges[i].Title) {\n match = true;\n }\n }\n if (!match) {\n cr = {};\n cr.title = ranges[i].Title;\n cr.hex = this.getHashedCase(cr.title); // ranges[i].CssColor;\n cr.num = ranges[i].Id;\n this.colorRanges.push(cr);\n }\n }\n }\n\n var optionsArray = [];\n var productLineId = data.SelectedProductId;\n for (var i = 0; i < data.SwatchGrouping.Styles.length; i++) {\n for (var j = 0; j < data.SwatchGrouping.Styles[i].Categories.length; j++) {\n var cat = data.SwatchGrouping.Styles[i].Categories[j].JSSafeSwatchCategoryName;\n if (optionsArray.indexOf(cat) == -1) {\n optionsArray.push(cat);\n if (this.loadedFromParam && this.loadedFromParamLineName === data.SelectedProductLine.Name) {\n this.checkedProductStyles.push(this.loadedFromParamLineName + ' ' + cat);\n }\n }\n }\n }\n\n for (var i = 0; i < this.productLines.length; i++) {\n if (this.productLines[i].id === productLineId) {\n this.productLines[i].options = optionsArray;\n }\n }\n\n },\n removeURLParam: function() {\n window.history.replaceState(null, null, window.location.pathname);\n },\n changeSelectedTab: function(tab) {\n if (tab === this.selectedTab) {\n return\n }\n this.removeURLParam();\n this.clearEverything();\n this.resetSwatchesScroll();\n var selectedTabsLoadedData = {};\n // Setup variables based on selected tab\n switch (tab) {\n case 'shades':\n this.selectedTab = 'shades';\n this.initialLineId = this.initialShadesLineId;\n selectedTabsLoadedData = this.loadedData.shades;\n break;\n case 'blinds':\n this.selectedTab = 'blinds';\n this.initialLineId = this.initialBlindsLineId;\n selectedTabsLoadedData = this.loadedData.blinds;\n break;\n case 'drapery':\n this.selectedTab = 'drapery';\n this.initialLineId = this.initialDraperyLineId;\n selectedTabsLoadedData = this.loadedData.drapery;\n }\n // Tab is changed so so this cant be true anymore\n this.loadedFromParam = false;\n // If all swatches have loaded for the selected tab, populate arrays\n if (selectedTabsLoadedData.loaded) {\n this.allSwatches = selectedTabsLoadedData.swatches;\n this.productLines = selectedTabsLoadedData.productLines;\n this.collections = selectedTabsLoadedData.collections;\n this.colorRanges = selectedTabsLoadedData.colorRanges;\n } else {\n // Continue loading swatch data\n this.getCatalogData(this.initialLineId, this.onCatalogDataComplete);\n }\n },\n getSwatchesInSwatchbook: function() {\n if (window.useLocalStorage || !window.isAuthenticated) {\n var items = swatchbook.data.items;\n for (var i = 0; i < items.length; i++) {\n if (items[i].type === 'swatch') {\n this.localSwatchbook.push(items[i].id);\n }\n }\n } else {\n // Only check for saved swatches if user is logged in\n if (window.isAuthenticated) {\n window.StorageActions.getItemsFromAccount('swatch', this.onSwatchesLoaded);\n }\n }\n },\n onSwatchesLoaded: function(data) {\n this.accountSwatchData = data.swatches;\n for (var i = 0; i < data.swatches.length; i++) {\n this.localSwatchbook.push('sw-' + data.swatches[i]['swatch-id']);\n }\n },\n resetSwatchesScroll: function() {\n var element = document.getElementById('swatches-app');\n if (window.scrollY > element.offsetTop) {\n scrollToElement({\n behavior: 'instant',\n element,\n });\n }\n },\n handleScroll: function(e) {\n var swatchGrid = document.getElementById('swatch-grid');\n if (swatchGrid !== null) {\n var bounds = swatchGrid.getBoundingClientRect();\n if (bounds.bottom <= window.innerHeight) {\n this.numSwatchesToDisplay += 24;\n if (this.numSwatchesToDisplay > this.filteredByCollectionAndColorsSwatches.length) {\n this.numSwatchesToDisplay = this.filteredByCollectionAndColorsSwatches.length;\n }\n }\n }\n },\n onLineClick: function(line) {\n // If product line selected is the same as currently open, only collapse menu\n if (this.currentLineOpen !== null) {\n if (line.name === this.currentLineOpen.name) {\n line.filterOpen = !line.filterOpen;\n return;\n } else {\n // Collapse current product line product menu\n this.currentLineOpen.filterOpen = false;\n }\n }\n var that = this;\n // Load params for swatch visualizer urls before continuing\n // Open selected menu\n line.filterOpen = true;\n // Set current product line to selected\n // Uncheck any styles\n that.checkedColorRanges = [];\n that.checkedProductStyles = [];\n that.productStyles = [];\n // Set current product line to selected\n that.currentLineOpen = line;\n },\n handleUpdateAccountSwatchData: function() {\n var that = this;\n window.StorageActions.getItemsFromAccount('swatch', function(data) {\n that.accountSwatchData.splice(0, that.accountSwatchData.length);\n for (var i = 0; i < data.swatches.length; i++) {\n that.accountSwatchData.unshift(data.swatches[i]);\n }\n });\n }\n },\n watch: {\n checkedProductStyles: function() {\n vm.resetSwatchesScroll();\n // Uncheck all collection, and color range filters every time a product style filter is checked or unchecked.\n if (vm.filteredByCollectionAndColorsSwatches.length === 0) {\n vm.checkedColorRanges = [];\n }\n vm.checkedCollections = [];\n vm.numSwatchesToDisplay = 48;\n },\n checkedCollections: function() {\n vm.resetSwatchesScroll();\n // Uncheck all color range filters every time a collection filter is checked or unchecked.\n if (vm.filteredByCollectionAndColorsSwatches.length === 0) {\n vm.checkedColorRanges = [];\n }\n },\n checkedColorRanges: function() {\n vm.resetSwatchesScroll();\n }\n },\n mounted: function () {\n // Get previously saved swatches and set up the local swatchbook\n this.getSwatchesInSwatchbook();\n // Button for toggling filter content\n const filterToggle = new ToggleContentToModal({\n callbacks: {\n onOpen: () => {\n this.productFilterOpen = true;\n this.collectionFilterOpen = true;\n this.colorFilterOpen = true;\n },\n onClose: () => {\n this.productFilterOpen = true;\n this.collectionFilterOpen = true;\n this.colorFilterOpen = true;\n },\n },\n modalId: 'filter-and-sort-modal',\n toggleSelector: '.btn-filter-sort',\n toggleContent: [\n {\n content: '.product-filter-group',\n modalSelector: '#filter-and-sort-modal .product-filter-wrapper',\n defaultSelector: '#swatches-app .c-twoColumns__left',\n },\n ],\n });\n // See if the `product` parameter from the URL exists and change selected tab.\n // Determine what product line to load first based on selected tab.\n // If loading with product line number param, selectedTab is an empty string.\n // If loading page w/ no param, selectedTab will be `shades`.\n var product = this.getParameterByName('product');\n if (product !== null) {\n product = product.toLowerCase();\n // If the parameter is not a number, set the appropriate tab\n if (isNaN(product)) {\n switch (product) {\n case 'shades':\n this.selectedTab = 'shades';\n this.initialLineId = this.initialShadesLineId;\n break;\n case 'blinds':\n this.selectedTab = 'blinds';\n this.initialLineId = this.initialBlindsLineId;\n break;\n case 'drapery':\n this.selectedTab = 'drapery';\n this.initialLineId = this.initialDraperyLineId;\n break;\n default:\n this.selectedTab = 'shades';\n this.initialLineId = this.initialShadesLineId;\n }\n } else {\n // If it is a number, don't set a tab yet and load the product line by number\n this.selectedTab = '';\n this.initialLineId = parseInt(product);\n this.loadedFromParam = true;\n this.productFilterOpen = true;\n }\n }\n this.getCatalogData(this.initialLineId, this.onCatalogDataComplete);\n window.addEventListener('scroll', this.handleScroll);\n }\n});\n","/* eslint-disable no-console */\nimport SiteModal from './site-modal';\n\nexport default class ToggleContentToModal {\n constructor(options) {\n this.modalId = options.modalId;\n this.toggleSelector = options.toggleSelector;\n this.toggleContent = options.toggleContent;\n this.prevWinWidth = 999999;\n this.mobileBrkpt = 768;\n this.toggleBtn = document.querySelector(this.toggleSelector);\n this.callbacks = options.callbacks;\n if (!this.toggleBtn) {\n return;\n }\n\n if (!this.callbacks) {\n this.callbacks = {};\n }\n\n // Modal\n this.modal = new SiteModal({\n id: this.modalId,\n callbacks: {\n onOpen: () => {\n if (this.callbacks.onOpen) {\n this.callbacks.onOpen();\n }\n },\n onClose: () => {\n if (this.callbacks.onClose) {\n this.callbacks.onClose();\n }\n },\n },\n toggleBtn: this.toggleBtn,\n });\n window.addEventListener('resize', this.onResize.bind(this));\n this.updateContentOnResize();\n }\n\n appendToModal() {\n // console.log(`${window.innerWidth}, ${this.modalId}, appendToModal`);\n this.toggleContent.forEach((item) => {\n const filters = document.querySelector(item.content);\n const wrapper = document.querySelector(item.modalSelector);\n wrapper.append(filters);\n });\n }\n\n detatchFromModal() {\n // console.log(`${window.innerWidth}, ${this.modalId}, detatchFromModal`);\n this.toggleContent.forEach((item) => {\n if (item !== null) {\n const filters = document.querySelector(item.content);\n const wrapper = document.querySelector(item.defaultSelector);\n if (filters !== null && wrapper !== null) {\n wrapper.append(filters);\n }\n }\n });\n }\n\n updateContentOnResize() {\n if (window.innerWidth >= this.mobileBrkpt && this.prevWinWidth < this.mobileBrkpt) {\n this.detatchFromModal();\n this.prevWinWidth = window.innerWidth;\n // Hide modal when reizing from mobile to desktop\n this.modal.close();\n }\n if (window.innerWidth < this.mobileBrkpt && this.prevWinWidth >= this.mobileBrkpt) {\n this.appendToModal();\n this.prevWinWidth = window.innerWidth;\n }\n }\n\n onResize() {\n this.updateContentOnResize();\n }\n}\n/* eslint-enable no-console */\n","/* eslint-disable no-console */\nexport default class SiteModal {\n constructor(options) {\n if (!options.callbacks) {\n options.callbacks = {};\n }\n this.onOpen = options.callbacks.onOpen;\n this.onClose = options.callbacks.onClose;\n this.modalDiv = document.querySelector(`#${options.id}`);\n this.isOpen = false;\n this.previousElementInFocus = null;\n // Modal events\n window.addEventListener('resize', this.onResize.bind(this));\n [].map.call(this.modalDiv.querySelectorAll('.close-btn, .modal-overlay, #modal-refine-btn'), btn => btn.addEventListener('click', this.close.bind(this)));\n document.addEventListener('keyup', this.onDocumentModalKeyUp.bind(this));\n // Add open to toggleBtn\n if (options.toggleBtn) {\n options.toggleBtn.addEventListener('click', this.open.bind(this));\n }\n }\n\n onDocumentModalKeyUp(event) {\n if (event.keyCode === 27 && this.isOpen) {\n this.close(); /* eslint-disable-line no-use-before-define */\n }\n }\n\n setPreviousElementInFocus(element) {\n this.previousElementInFocus = element;\n }\n\n resetFocus() {\n if (this.previousElementInFocus) {\n this.previousElementInFocus.focus();\n }\n }\n\n updateHeight() {\n if (!this.isOpen) {\n return;\n }\n const contentHeight = this.modalDiv.querySelector('.modal-content').offsetHeight;\n this.modalDiv.querySelector('.modal-panel').style.height = `${contentHeight + 30}px`;\n }\n\n onResize() {\n if (!this.isOpen) {\n return;\n }\n this.updateHeight();\n }\n\n close() {\n this.isOpen = false;\n if (this.onClose) {\n this.onClose();\n }\n this.modalDiv.classList.remove('modal-visible');\n this.resetFocus();\n }\n\n open() {\n this.isOpen = true;\n this.modalDiv.classList.add('modal-visible');\n if (this.onOpen) {\n this.onOpen();\n }\n this.setPreviousElementInFocus(document.activeElement);\n this.modalDiv.focus();\n this.updateHeight();\n }\n}\n/* eslint-enable no-console */\n","/* eslint-disable import/prefer-default-export */\n\nconst capitalize = (str) => (\n `${str.charAt(0).toUpperCase()}${str.slice(1)}`\n);\n\nexport {\n capitalize,\n}\n/* eslint-enable import/prefer-default-export */\n","const siteEventNames = {\n ADD_EXPERT: 'addexpert',\n ADD_SWATCH: 'addswatch',\n DEALER_PHONE_CLICK: 'dealerphoneclick',\n DEALER_WEBSITE_CLICK: 'dealerwebsiteclick',\n ON_ACCOUNT_CREATED: 'onaccountcreated',\n ON_DEALER_SEARCH: 'ondealersearch',\n ON_FORM_SUBMIT_SUCCESS: 'onformsubmitsuccess',\n ON_LOGGED_IN: 'onloggedin',\n ON_ORDER_SUBMITTED: 'onordersubmitted',\n ON_ORDER_CONFIRMATION: 'onorderconfirmation',\n REMOVE_SWATCH: 'removeswatch',\n};\n\nconst initSiteEvents = () => {\n if (window.siteEventRegistry) {\n return;\n }\n // Init events and add them to window scope here\n window.siteEventRegistry = {};\n Object.keys(siteEventNames).forEach((key) => {\n const value = siteEventNames[key];\n siteEventRegistry[value] = {\n event: new Event(value),\n data: {},\n }\n });\n};\n\nconst getEventData = (eventName) => {\n const { siteEventRegistry } = window;\n let data = {};\n Object.keys(siteEventRegistry).forEach((key) => {\n if (key === eventName) {\n data = siteEventRegistry[key].data;\n }\n });\n return data;\n}\n\nconst dispatchSiteEvent = (eventName, data) => {\n const { siteEventRegistry } = window;\n Object.keys(siteEventRegistry).forEach((key) => {\n if (key === eventName) {\n const event = siteEventRegistry[key].event;\n siteEventRegistry[key].data = data;\n window.dispatchEvent(event);\n }\n });\n};\n\nexport {\n dispatchSiteEvent,\n getEventData,\n initSiteEvents,\n siteEventNames,\n};\n","/* eslint-disable import/prefer-default-export */\nconst scrollToElement = (options) => {\n const { element, offset, position, behavior } = options;\n let y = 0;\n if (element) {\n // console.log(`scrolling-utils.js, scrollToElement, ${element.offsetTop}`);\n y = element.offsetTop;\n }\n if (position) {\n y = position;\n }\n if (offset) {\n y += offset;\n }\n window.scrollTo({\n top: y,\n behavior,\n });\n};\n\nexport {\n scrollToElement,\n};\n/* eslint-enable import/prefer-default-export */\n"],"sourceRoot":""}