{"version":3,"sources":["DoorConfigurator.js"],"names":["DoorConfigurator","elem","self","this","$holder","$element","find","holder","init","config","Config","hasLoaded","panels","getPanels","length","setValue","activePanelsFromConfig","adjustTopPanelWidth","accessories","getAccessories","activeAccessoriesFromConfig","color","getColor","material","getMaterial","parent","first","data","attr","setMaterial","setColor","on","e","preventDefault","$","parents","$this","group","hasClass","removeClass","addClass","siblings","getCurrentActiveAccessories","join","setPrice","updateUrl","toggleClass","getCurrentActivePanels","window","location","href","setTimeout","css","$color","title","text","$topPanel","topPanelMode","each","key","item","filter","id","push","loadMaterial","setMaterialForPanel","console","warn","message","div","topPanel","remove","prepend","panelId","info","panel","materialElem","$material","materialId","customColor","replace","$wrapper","hasTopPanel","i","j","sum","parseFloat","formatter","Intl","NumberFormat","style","currency","minimumFractionDigits","maximumFractionDigits","format","$formfield","products","trim","val","keys","value","getQueryVariable","decodeURIComponent","getValue","split","hasValue","localStorage","getItem","setItem","removeValue","removeItem","history","pushState","variable","vars","search","substring","pair"],"mappings":"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","sourcesContent":["var DoorConfigurator = function DoorConfigurator(elem) {\r\n\r\n var self = this;\r\n var $holder = elem;\r\n var $element = elem.find('.door-configurator');\r\n self.elem = $element;\r\n self.holder = $holder;\r\n \r\n self.init = function() {\r\n\r\n self.config = new Config();\r\n\r\n self.hasLoaded = false;\r\n \r\n var panels = self.config.getPanels();\r\n if (panels.length === 0 || panels[0] === '') {\r\n self.config.setValue('panels', 'door');\r\n }\r\n self.activePanelsFromConfig(panels);\r\n self.adjustTopPanelWidth();\r\n\r\n var accessories = self.config.getAccessories();\r\n if (accessories.length > 0) {\r\n self.activeAccessoriesFromConfig(accessories);\r\n }\r\n\r\n var color = self.config.getColor();\r\n var material = self.config.getMaterial();\r\n\r\n if (material !== '') {\r\n // Double check that it exists\r\n if ($holder.find('.section-colors #' + material).length === 0) {\r\n material = '';\r\n }\r\n }\r\n\r\n if (color !== '') {\r\n // Double check that it exists\r\n if ($holder.find('.section-colors .single[data-color=\"' + color + '\"]').length === 0) {\r\n color = '';\r\n }\r\n }\r\n \r\n if (material === '' && color === '') {\r\n var parent = $holder.find('.section-colors .color:not(.material)').first().parent();\r\n\r\n if (parent.length > 0) {\r\n color = parent.data('color');\r\n } else {\r\n //color = 'rgb(0,0,0)';\r\n\r\n parent = $holder.find('.section-colors .color.material').first().parent();\r\n if (parent.length > 0) {\r\n material = parent.attr('id');\r\n }\r\n }\r\n }\r\n\r\n if (material !== '') {\r\n self.setMaterial(material);\r\n } else if (color !== '') {\r\n self.setColor(color);\r\n }\r\n\r\n // Events\r\n $holder.find('.section-colors .color').on('click', function(e) {\r\n e.preventDefault();\r\n var parent = $(this).parents('.single:first');\r\n if (parent.data('images')) {\r\n self.setMaterial(parent.attr('id'), parent.data('images'));\r\n } else {\r\n self.setColor(parent.data('color'));\r\n }\r\n });\r\n\r\n $holder.find('.section-accessories .accessory').on('click', function (e) {\r\n e.preventDefault();\r\n\r\n // Only one active accessory per group!\r\n //$(this).toggleClass('active');\r\n\r\n var $this = $(this);\r\n var group = $this.data('group');\r\n if ($this.hasClass('active')) {\r\n $this.removeClass('active');\r\n } else {\r\n $this.addClass('active').siblings('[data-group=\"' + group + '\"]').removeClass('active');\r\n }\r\n\r\n var accessories = self.getCurrentActiveAccessories();\r\n self.config.setValue('accessories', accessories.join('.'));\r\n\r\n self.setPrice();\r\n self.config.updateUrl();\r\n });\r\n \r\n $element.find('> .panel').on('click', function(e) {\r\n e.preventDefault();\r\n\r\n var $this = $(this);\r\n if ($this.hasClass('inactive'))\r\n return;\r\n\r\n // Active/deactivate skin \r\n $this.toggleClass('active');\r\n\r\n // Selecting double doors should deactivate side panels\r\n if ($this.hasClass('double-door')) {\r\n $('.door-configurator .panel:not(.double-door)').removeClass('active');\r\n } else if ($this.hasClass('garage-door')) {\r\n $('.door-configurator .panel:not(.garage-door)').removeClass('active');\r\n }\r\n \r\n // Selecting side panels should disable double doors\r\n if ($this.hasClass('side-panel') || $this.hasClass('top-panel')) {\r\n $('.door-configurator .double-door, .door-configurator .garage-door').removeClass('active');\r\n }\r\n\r\n if ($('.door-configurator .double-door.active, .door-configurator .garage-door.active, .door-configurator .door.active').length === 0) {\r\n $('.door-configurator .door').addClass('active');\r\n }\r\n\r\n var panels = self.getCurrentActivePanels();\r\n self.config.setValue('panels', panels.join('.'));\r\n self.config.updateUrl();\r\n self.adjustTopPanelWidth();\r\n self.setPrice();\r\n\r\n });\r\n\r\n $holder.find('.section-actions a.btn.contact').on('click', function (e) {\r\n e.preventDefault();\r\n\r\n $(this).removeClass('active');\r\n\r\n var $formholder = $(this).siblings('.contact-form');\r\n $formholder.addClass('active');\r\n });\r\n\r\n $holder.find('.section-actions a.btn.reset').on('click', function (e) {\r\n e.preventDefault();\r\n\r\n self.config.setValue('panels', '');\r\n self.config.setValue('material', '');\r\n self.config.setValue('color', '');\r\n self.config.setValue('accessories', '');\r\n\r\n self.config.updateUrl();\r\n window.location.href = window.location.href;\r\n });\r\n\r\n setTimeout(function() {\r\n self.hasLoaded = true;\r\n }, 1000);\r\n\r\n self.setPrice();\r\n };\r\n\r\n self.setColor = function (color) {\r\n self.elem.removeClass('material');\r\n self.elem.find('.color').css('background-color', color);\r\n self.config.setValue('color', color);\r\n self.config.setValue('material', '');\r\n self.setPrice();\r\n self.config.updateUrl();\r\n\r\n // Find the name and set to product\r\n var $color = self.holder.find('.section-colors .single[data-color=\"' + color + '\"]');\r\n\r\n $color.addClass('active').siblings().removeClass('active');\r\n\r\n var title = $color.data('title');\r\n if (title.length > 0) {\r\n self.holder.find('.section-productname span.material-color').text(title);\r\n }\r\n };\r\n \r\n self.adjustTopPanelWidth = function() {\r\n var $topPanel = $element.find('.top-panel');\r\n var topPanelMode = \"panel\";\r\n\r\n if ($topPanel.hasClass('inactive')) {\r\n topPanelMode += \" inactive\";\r\n }\r\n\r\n // Check which panels are active\r\n $element.find('.active').each(function(key, item) {\r\n if ($(item).hasClass('side-panel')) {\r\n if ($(item).hasClass('left')) {\r\n topPanelMode += \" left\";\r\n }\r\n\r\n if ($(item).hasClass('right')) {\r\n topPanelMode += ' right';\r\n }\r\n }\r\n });\r\n\r\n // Check if top panel is active\r\n if ($topPanel.hasClass('active')) {\r\n topPanelMode += \" active\";\r\n }\r\n\r\n // Add classes to top panel\r\n $topPanel.attr('class', 'top-panel ' + topPanelMode);\r\n };\r\n\r\n self.activePanelsFromConfig = function(config) {\r\n\r\n config = config.filter(function(item) {\r\n return (item != \"\");\r\n });\r\n\r\n for (var key in config) {\r\n self.elem.addClass(config[key]);\r\n self.elem.find('.panel#' + config[key]).addClass('active');\r\n }\r\n };\r\n\r\n self.getCurrentActivePanels = function() {\r\n var panels = [];\r\n self.elem.find('.panel.active').each(function(key, item) {\r\n var id = $(item).attr('id');\r\n panels.push(id);\r\n });\r\n return panels;\r\n };\r\n\r\n self.activeAccessoriesFromConfig = function (config) {\r\n\r\n config = config.filter(function (item) {\r\n return (item != \"\");\r\n });\r\n\r\n for (var key in config) {\r\n self.holder.find('.section-accessories .accessory[data-id=\"' + config[key] + '\"]').addClass('active');\r\n }\r\n };\r\n\r\n self.getCurrentActiveAccessories = function () {\r\n var accessories = [];\r\n self.holder.find('.section-accessories .accessory.active').each(function (key, item) {\r\n var id = $(item).data('id');\r\n accessories.push(id);\r\n });\r\n return accessories;\r\n };\r\n\r\n self.loadMaterial = function(id) {\r\n\r\n var item = $('.section-colors #' + id);\r\n var config = item.data('images');\r\n\r\n if (config === null) {\r\n return;\r\n }\r\n\r\n self.setPrice();\r\n\r\n self.elem.addClass('material');\r\n\r\n try {\r\n self.setMaterialForPanel(\".door\", config[\"door\"]);\r\n self.setMaterialForPanel(\".double-door\", config[\"double_door\"]);\r\n self.setMaterialForPanel(\".garage-door\", config[\"garage_door\"]);\r\n self.setMaterialForPanel(\".side-panel.left\", config[\"side_panel_left\"]);\r\n self.setMaterialForPanel(\".side-panel.right\", config[\"side_panel_right\"]);\r\n } catch (e) {\r\n console.warn(e.message);\r\n }\r\n\r\n\r\n var topPanel = self.elem.find('.top-panel');\r\n topPanel.find('.material').remove();\r\n\r\n if (config[\"top_panel_large\"] != null) {\r\n var div = $('
');\r\n div.addClass('material large');\r\n div.attr('style', 'background-image : url(' + config[\"top_panel_large\"] + ')');\r\n topPanel.prepend(div);\r\n }\r\n\r\n if (config[\"top_panel_medium\"] != null) {\r\n var div = $('');\r\n div.addClass('material medium');\r\n div.attr('style', 'background-image : url(' + config[\"top_panel_medium\"] + ')');\r\n topPanel.prepend(div);\r\n }\r\n\r\n if (config[\"top_panel_small\"] != null) {\r\n var div = $('');\r\n div.addClass('material small');\r\n div.attr('style', 'background-image : url(' + config[\"top_panel_small\"] + ')');\r\n topPanel.prepend(div);\r\n }\r\n\r\n self.config.setValue('material', id);\r\n };\r\n\r\n self.setMaterialForPanel = function(panelId, material) {\r\n console.info(\"Setting panel material for\", panelId, material);\r\n\r\n if (material !== null) {\r\n var panel = self.elem.find(panelId);\r\n\r\n panel.find('.material').remove();\r\n\r\n var materialElem = $('');\r\n materialElem.addClass('material');\r\n materialElem.attr('style', 'background-image : url(' + material + ')');\r\n panel.prepend(materialElem);\r\n panel.removeClass('inactive');\r\n\r\n //console.log(self.elem.find(panelId))\r\n }\r\n };\r\n\r\n self.setMaterial = function(id) {\r\n //config = JSON.parse(config);\r\n\r\n self.elem.addClass('material');\r\n self.config.setValue('material', id);\r\n self.config.setValue('color', '');\r\n self.config.updateUrl();\r\n\r\n // Find the name and set to product\r\n var $material = self.holder.find('.section-colors #' + id);\r\n\r\n $material.addClass('active').siblings().removeClass('active');\r\n\r\n var title = $material.data('title');\r\n if (title.length > 0) {\r\n self.holder.find('.section-productname span').text(title);\r\n }\r\n\r\n self.loadMaterial(id);\r\n };\r\n\r\n self.setPrice = function() {\r\n\r\n var color = self.config.getColor();\r\n var material = self.config.getMaterial();\r\n \r\n var materialId = '';\r\n if (color !== '') {\r\n materialId = 'color';\r\n\r\n // Double-check if it's a custom color\r\n var customColor = self.holder.find('.section-colors .single[data-color=\"' + color + '\"][data-iscustomcolor=\"true\"]');\r\n if (customColor.length === 1) {\r\n materialId = customColor.attr('id');\r\n }\r\n\r\n } else if (material !== '') {\r\n materialId = material.replace('material-', '');\r\n }\r\n\r\n var $wrapper = self.holder.find('.section-prices');\r\n if (!$wrapper || $wrapper.length === 0) {\r\n return;\r\n }\r\n\r\n $wrapper.find('p').removeClass('active');\r\n if (materialId === '') {\r\n return;\r\n }\r\n\r\n var panels = self.config.getPanels();\r\n \r\n var hasTopPanel = false;\r\n for (var i = 0; i < panels.length; i++) {\r\n\r\n if (panels[i] === 'top') {\r\n hasTopPanel = true;\r\n continue;\r\n }\r\n\r\n $wrapper.find('p[data-id=\"' + panels[i] + '\"][data-material=\"' + materialId + '\"]').addClass('active');\r\n }\r\n\r\n if (hasTopPanel) {\r\n $wrapper.find('p[data-id=\"top' + (panels.length - 1) + '\"][data-material=\"' + materialId + '\"]').addClass('active');\r\n }\r\n\r\n var accessories = self.config.getAccessories();\r\n for (var j = 0; j < accessories.length; j++) {\r\n $wrapper.find('p[data-id=\"' + accessories[j] + '\"][data-isaccessory=\"true\"]').addClass('active');\r\n }\r\n\r\n var sum = 0.0;\r\n $wrapper.find('p.active').each(function() {\r\n sum += parseFloat($(this).data('price'));\r\n });\r\n\r\n var formatter = new Intl.NumberFormat('sv-SE', {\r\n style: 'currency',\r\n currency: 'SEK',\r\n\r\n // These options are needed to round to whole numbers if that's what you want.\r\n minimumFractionDigits: 0, // (this suffices for whole numbers, but will print 2500.10 as $2,500.1)\r\n maximumFractionDigits: 0, // (causes 2500.99 to be printed as $2,501)\r\n });\r\n\r\n if (sum > 0) {\r\n $wrapper.find('p.sum span').text(formatter.format(sum)).parent().addClass('active');\r\n }\r\n\r\n var $formfield = self.holder.find('.contact-form form .product-information textarea');\r\n if ($formfield.length === 0)\r\n $formfield = self.holder.find('.contact-form form .produktinformation textarea');\r\n\r\n if ($formfield.length === 0)\r\n return;\r\n\r\n //$formfield.addClass('disabled').prop('disabled', true);\r\n\r\n // Gather productinformation\r\n var products = [];\r\n products.push(self.holder.find('.section-productname').text());\r\n self.holder.find('.section-prices p.active').each(function () {\r\n products.push($(this).text().trim());\r\n });\r\n $formfield.val(products.join('\\r\\n'));\r\n\r\n self.holder.find('.contact-form form .url input').val(window.location.href);\r\n };\r\n\r\n if ($holder.length) {\r\n self.init();\r\n }\r\n};\r\n\r\n\r\nvar Config = function(){\r\n\r\n\tvar self = this;\r\n\r\n\tthis.keys = [ \"color\", \"panels\", \"material\", \"accessories\" ];\r\n\r\n this.init = function() {\r\n\r\n // Load key values from url on load\r\n\r\n for (var i in this.keys) {\r\n var key = this.keys[i];\r\n var value = this.getQueryVariable(this.keys[i]);\r\n\r\n if (!value) {\r\n value = '';\r\n }\r\n\r\n if (value) {\r\n value = decodeURIComponent(value);\r\n self.setValue(key, value);\r\n }\r\n }\r\n };\r\n\r\n this.getColor = function() {\r\n return this.getValue('color');\r\n };\r\n\r\n this.getPanels = function() {\r\n return this.getValue('panels').split('.');\r\n };\r\n\r\n this.getAccessories = function () {\r\n return this.getValue('accessories').split('.');\r\n };\r\n\r\n this.getMaterial = function() {\r\n return this.getValue('material');\r\n };\r\n\r\n this.hasValue = function(key) {\r\n return (this.getValue(key) !== \"\");\r\n };\r\n\r\n this.getValue = function(key) {\r\n var value = localStorage.getItem(key);\r\n //console.info(\"Reading from storage\", key, value);\r\n\r\n if (value) {\r\n return value;\r\n } else {\r\n return \"\";\r\n }\r\n };\r\n\r\n this.setValue = function(key, value) {\r\n console.info(\"Saving to storage\", key, value);\r\n\r\n value = value.replace(/ /g, '');\r\n localStorage.setItem(key, value);\r\n };\r\n\r\n this.removeValue = function(key) {\r\n //console.info(\"Removing value for key\", key);\r\n localStorage.removeItem(key);\r\n };\r\n\r\n this.updateUrl = function() {\r\n window.history.pushState('color',\r\n 'color',\r\n '?color=' +\r\n this.getValue(\"color\") +\r\n '&panels=' +\r\n this.getValue(\"panels\") +\r\n '&material=' +\r\n this.getValue(\"material\") +\r\n '&accessories=' +\r\n this.getValue(\"accessories\"));\r\n };\r\n\r\n this.getQueryVariable = function(variable) {\r\n var query = window.location.search.substring(1);\r\n var vars = query.split(\"&\");\r\n for (var i = 0; i < vars.length; i++) {\r\n var pair = vars[i].split(\"=\");\r\n if (pair[0] == variable) {\r\n return pair[1];\r\n }\r\n }\r\n\r\n return(false);\r\n };\r\n\r\n\tthis.init();\r\n\r\n};"],"file":"doorconfigurator.js"}