{"version":3,"sources":["Areas/Products/Views/Customization/customization.js"],"names":["_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","err","normalCompletion","didErr","step","next","_e2","minLen","_arrayLikeToArray","Object","prototype","toString","call","slice","constructor","name","from","test","arr","len","arr2","FD","Page","$color","numberFormatter","Intl","NumberFormat","maximumFractionDigits","minimumFractionDigits","pomTemplate","$","html","notify","Notify","isLoaded","saveHistory","params","URLSearchParams","document","location","search","form","Utility","getControlValuesByContainer","data","widthInFeet","WidthInFeet","widthInInches","WidthInInches","lengthInFeet","LengthInFeet","lengthInInches","LengthInInches","selectedPalette","SelectedPalette","colorId","ColorId","productRegistryName","ProductRegistryName","hasBorder","is","get","back","history","replaceState","window","pathname","decodeURIComponent","param","replaceAll","updateSquareFootage","Number","val","totalWidthInFeet","$lengthInFeet","$lengthInInches","totalLengthInFeet","valid","addClass","calculateCost","serializeArray","reduce","acc","_ref","each","$this","this","attr","undefined","text","fdAjax","url","calculateCostAction","serialize","contentType","callback","result","format","updateCityState","$zip","$form","App","updateCityStateFromZip","loadPreview","show","applyPalette","css","parent","removeClass","end","setTimeout","prev","page","init","on","_ref2","arguments","state","editPalette","parentid","has","colors","indexOf","split","getAll","idx","item","concat","$selection","find","colorHex","colorCode","element","selectColor","_step","hilight","navigator","userAgent","doc","contentDocument","_iterator","styleSheets","cssRules","rule","selectorText","includes","style","fill","className","color","filter","click","insertRule","toggleControls","sticky","Sticky","countryChanged","closest","Constant","unitedStatesCode","prop","blur","zipCodeChanged","ignoreDimensionValidation","validate","destroy","rebuildValidate","sizeUpdated","openProjectModal","xhr","stopLadda","Modal","openModal","onCreate","$modal","href","replace","origin","map","_","toArray","join","productId","ProductId","colorVisualizerImageUrl","$newProject","toggleClass","clone","appendTo","removeAttr","saveToProject","preventDefault","target","customizingElem","isCustomizing","hasClass","submit","saveToProjectAction","contentTypeHelper","AddToQuote","projectId","customizationIds","id","downloadQuoteUrl","link","remove","hideModal","projectUrl","addProjectAction","append","addOrUpdateCart","event","focus","$trigger","popTriggerElement","hide","updateDimensions","trigger","downloadTearSheet","queryString","beforeDownloadQuote","promptLogin","_FD$Page$sticky","update","submitInquiry","doSumbit","tradeStatus","submitInquiryAction","success","then","submitPomForm","submitPomFormAction","borderColor","palette","$selected","applyColor","siblings","updateUrl","colorid","_step2","classes","_iterator2","display","hasBorderUpdated","index","prevPage","grid","pages","nextPage","addPomSample","enableControls","alert","removePomSample","assign"],"mappings":"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","file":"customization.min.js","sourcesContent":["FD.Page = function () {\r\n 'use strict';\r\n let $color;\r\n\r\n const numberFormatter = Intl.NumberFormat(\"en-US\", { maximumFractionDigits: 2, minimumFractionDigits: 2 });\r\n const pomTemplate = $(\"#POM_SELECTED\").html();\r\n const notify = new Notify();\r\n let isLoaded = false;\r\n\r\n function saveHistory() {\r\n const params = new URLSearchParams(document.location.search);\r\n const form = FD.Utility.getControlValuesByContainer(\"#FORM\");\r\n const data = {\r\n widthInFeet: form.WidthInFeet,\r\n widthInInches: form.WidthInInches,\r\n lengthInFeet: form.LengthInFeet,\r\n lengthInInches: form.LengthInInches,\r\n selectedPalette: form.SelectedPalette,\r\n colorId: form.ColorId,\r\n productRegistryName: form.ProductRegistryName,\r\n hasBorder: $(\"#FORM input[type=checkbox][name$=HasBorder]\").is(':checked')\r\n }\r\n if (params.get('back')) {\r\n data.back = params.get('back');\r\n }\r\n history.replaceState(null, '', window.location.pathname + '?' + decodeURIComponent($.param(data)).replaceAll(\"[]\", ''));\r\n }\r\n\r\n function updateSquareFootage() {\r\n const widthInFeet = Number($(\"#Customization_WidthInFeet\").val());\r\n const widthInInches = Number($(\"#Customization_WidthInInches\").val());\r\n const totalWidthInFeet = widthInInches / 12.0 + widthInFeet;\r\n\r\n // determine if we need to set the length programmatically\r\n const $lengthInFeet = $(\"#Customization_LengthInFeet\");\r\n const $lengthInInches = $(\"#Customization_LengthInInches\");\r\n\r\n // calculate square footage and total lengths because we must validate them\r\n const lengthInFeet = Number($lengthInFeet.val());\r\n const lengthInInches = Number($lengthInInches.val());\r\n const totalLengthInFeet = lengthInInches / 12.0 + lengthInFeet;\r\n \r\n $(\"#Customization_SidesAtMost20Feet\").val((totalWidthInFeet <= 20 ? 1 : 0) + (totalLengthInFeet <= 20 ? 1 : 0));\r\n $(\"#Customization_SideAtMost13Feet\").val((totalWidthInFeet > 13 ? 1 : 0) + (totalLengthInFeet > 13 ? 1 : 0));\r\n $(\"#Customization_SideAtMost30Feet\").val((totalWidthInFeet > 30 || totalLengthInFeet > 30) ? 2 : 0);\r\n $(\"#Customization_SquareFootage\").val(totalWidthInFeet * totalLengthInFeet);\r\n \r\n if ($(\"#FORM\").valid()) {\r\n $(\".size-required-cart\").addClass(\"d-none\");\r\n return totalWidthInFeet * totalLengthInFeet\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n function syncFields() {\r\n const data = $(\"#FORM\").serializeArray().reduce((acc, { name, value }) => {\r\n acc[name] = value\r\n return acc\r\n }, {});\r\n\r\n $('[data-fd-sync-field').each(function () {\r\n const $this = $(this);\r\n const val = data[$this.attr('data-fd-sync-field')];\r\n if (val !== undefined) {\r\n if ($this.is('input')) {\r\n $this.val(val);\r\n } else {\r\n $this.text(val);\r\n }\r\n\r\n }\r\n });\r\n }\r\n\r\n function openDimensionsOverlay() {\r\n $('body').trigger('fd:toggle-set', [\"dimensions\", true]);\r\n }\r\n\r\n function calculateCost() {\r\n syncFields();\r\n $.fdAjax({\r\n url: FD.Page.calculateCostAction,\r\n params: $(\"#FORM\").serialize(),\r\n contentType: 'application/x-www-form-urlencoded; charset=UTF-8',\r\n callback: (result) => $(\"[data-fd-cost]\").text(numberFormatter.format(result.data))\r\n });\r\n }\r\n\r\n function updateCityState($zip, $form) {\r\n return App.updateCityStateFromZip($zip, $(\"input[name$=City]\", $form), $(\"input[name$=State]\", $form));\r\n }\r\n\r\n function submit(form) {\r\n\r\n const doSumbit = () => {\r\n const tradeStatus = $(\"[name$=TradeStatus]:checked\", form).val();\r\n const valid = tradeStatus == \"DesignerOrArchitect\" || tradeStatus == \"WorkingWithDesigner\";\r\n\r\n if (form.valid() && valid) {\r\n $.fdAjax({\r\n url: FD.Page.submitInquiryAction,\r\n params: form.serialize(),\r\n contentTypeHelper: \"form\",\r\n callback: (result) => {\r\n\r\n if (!result?.success) {\r\n $('#SUBMIT_ERROR').html('Unable to send message.');\r\n return;\r\n }\r\n\r\n $('#INQUIRY_FORM').toggleClass('hidden', true);\r\n $('#INQUIRY_CONFIRMATION').toggleClass('hidden', false);\r\n }\r\n });\r\n }\r\n }\r\n\r\n if (!form.valid()) {\r\n if ($(\"select[name$=Country]\", form).val() == FD.Constant.unitedStatesCode) {\r\n updateCityState($(\"input[name$=ZipCode]\", form), form).then(() => {\r\n doSumbit();\r\n });\r\n }\r\n } else {\r\n doSumbit();\r\n }\r\n }\r\n\r\n function submitPomRequestForm(form) {\r\n\r\n const doSumbit = () => {\r\n if (form.valid()) {\r\n $.fdAjax({\r\n url: FD.Page.submitPomFormAction,\r\n params: form.serialize(),\r\n contentTypeHelper: \"form\",\r\n callback: (result) => {\r\n if (!result?.success) {\r\n $('#SUBMIT_ERROR').html('Unable to send message.');\r\n return;\r\n }\r\n\r\n $('#NEW_POM_FORM').toggleClass('hidden', true);\r\n $('#NEW_POM_FORM_CONFIRMATION').html(result.data.html).toggleClass('hidden', false);\r\n }\r\n });\r\n }\r\n }\r\n\r\n if (!form.valid()) {\r\n if ($(\"select[name$=Country]\", form).val() == FD.Constant.unitedStatesCode) {\r\n updateCityState($(\"input[name$=ZipCode]\", form), form).then(() => {\r\n doSumbit();\r\n });\r\n }\r\n } else {\r\n doSumbit();\r\n }\r\n }\r\n\r\n function setupPreview() {\r\n if ($('.palette-list').length) {\r\n $(\"#PREVIEW\").on('load', function () {\r\n const selectedPalette = +$(\"input[name$=SelectedPalette]\").val();\r\n FD.Page.editPalette({ parentid: selectedPalette }, false);\r\n\r\n const params = new URLSearchParams(document.location.search);\r\n if (params.has('selectedPalette')) {\r\n // Apply custom colors form url\r\n if (params.get('colorId')) {\r\n const colors = params.get('colorId').indexOf(',') > -1 ? params.get('colorId').split(',') : params.getAll('colorId');\r\n if (colors.length) {\r\n $(\".color-visualizer-customization [name$=ColorId]\").each((idx, item) => {\r\n const $color = $(`.palette-item .palette[data-fd-parentid=${selectedPalette}] [data-color=${idx}]`);\r\n const $selection = $(`.grid-palette .palette-color[data-fd-parentid=${colors[idx]}]`);\r\n\r\n // Update top color and form values\r\n $color.find('.palette-color').data({\r\n colorId: colors[idx],\r\n colorHex: $selection.data('fdValue'),\r\n colorCode: $selection.data('code')\r\n });\r\n $color.find('.palette-color').css(\"--color\", $selection.data('fdValue')).css(\"--border-color\", $selection.css('--border-color'));\r\n });\r\n }\r\n }\r\n\r\n const element = $(`.palette-item .palette[data-fd-parentid='${selectedPalette}'] .palette-color:first`);\r\n FD.Page.selectColor.call({ element });\r\n }\r\n FD.Page.applyPalette(selectedPalette, false);\r\n if (!isLoaded) {\r\n isLoaded = true;\r\n loadPreview();\r\n }\r\n\r\n const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\r\n const hilight = isSafari ? 'fill: #dedad6;' : 'filter: invert(15%);';\r\n\r\n const doc = $(\"#PREVIEW\")[0].contentDocument;\r\n for (const rule of doc.styleSheets[0].cssRules) {\r\n if (rule.selectorText.includes('g:has') || !rule.style.fill) {\r\n break;\r\n }\r\n $(rule.selectorText, doc).on('click', function () {\r\n const className = `.${$(this).attr('class')}`;\r\n const color = $(\"input[name*=PaletteClasses]\").filter((idx, item) => $(item).val() == className).data('color');\r\n $(`[data-color=\"${color}\"] i`, '.palette-item .palette:visible').click();\r\n });\r\n doc.styleSheets[0].insertRule(`g:has(${rule.selectorText}:hover) ${rule.selectorText} { ${hilight} }`, doc.styleSheets[0].cssRules.length)\r\n }\r\n const hasBorder = $(\"#FORM input[type=checkbox][name$=HasBorder]\").is(':checked');\r\n doc.styleSheets[0].insertRule(`#TextureMain { pointer-events: none; }`, doc.styleSheets[0].cssRules.length);\r\n doc.styleSheets[0].insertRule(`#TextureNoBorder { pointer-events: none;display: ${hasBorder ? 'none' : 'block'} }`, doc.styleSheets[0].cssRules.length);\r\n doc.styleSheets[0].insertRule(`#TextureBorder { pointer-events: none; display: ${!hasBorder ? 'none' : 'block'} }`, doc.styleSheets[0].cssRules.length);\r\n });\r\n }\r\n }\r\n\r\n function loadPreview() {\r\n const show = $('.product-image').is('.semi-custom-customize');\r\n if (isLoaded) {\r\n const selectedPalette = +$(\"input[name$=SelectedPalette]\").val();\r\n FD.Page.applyPalette(selectedPalette, show);\r\n }\r\n $(\"#PREVIEW\")\r\n .css('height', \"600px\")\r\n .css('height', \"\");\r\n if (show) {\r\n $(\"#PREVIEW\")\r\n .parent().removeClass('d-none').end()\r\n setTimeout(() => {\r\n $(\"#PREVIEW\")\r\n .parent().removeClass('hide-preview')\r\n .prev();\r\n }, 500);\r\n }\r\n }\r\n\r\n const page = {\r\n init: function () {\r\n $('[data-fd-toggle-target=\"dimensions\"]').on('fd:toggle', function (e, { state, data } = {}) {\r\n // Can be used for behavior that happens when overlay opens\r\n });\r\n\r\n setupPreview();\r\n\r\n const params = new URLSearchParams(document.location.search);\r\n if (params.has('selectedPalette')) {\r\n if ($(\"#START_CUSTOMIZING\").length) {\r\n this.toggleControls();\r\n } else {\r\n $(\"#LOGIN_START_CUSTOMIZING\").click();\r\n }\r\n }\r\n\r\n this.sticky = new Sticky('[data-sticky]');\r\n },\r\n\r\n countryChanged: function (data) {\r\n const $form = this.element.closest('form');\r\n if (data.value == FD.Constant.unitedStatesCode) {\r\n updateCityState($(\"input[name$=ZipCode]\", $form), $form);\r\n } else {\r\n $(\"input[name$=City]\", $form).val('');\r\n $(\"input[name$=State]\", $form).val('');\r\n }\r\n $(\"input[name$=City],input[name$=State]\").prop('readonly', data.value == FD.Constant.unitedStatesCode);\r\n $(\"input[name$=ZipCode]\").attr('type', data.value == FD.Constant.unitedStatesCode ? 'number' : 'text').blur();\r\n },\r\n\r\n zipCodeChanged: function () {\r\n const form = this.element.closest('form');\r\n if ($(\"select[name$=Country]\", form).val() == FD.Constant.unitedStatesCode) {\r\n updateCityState(this.element, form);\r\n }\r\n },\r\n\r\n ignoreDimensionValidation: function () {\r\n\r\n /** @type {JQLite} */\r\n this.element.closest(\"form\").validate().destroy();\r\n $(\"#Customization_WidthInFeet,#Customization_WidthInInches,#Customization_LengthInFeet,#Customization_LengthInInches, #Customization_SquareFootage, #Customization_SidesAtMost20Feet\")\r\n .addClass(\"ignore-validators\");\r\n $form.data(\"fdControl_form\").rebuildValidate();\r\n },\r\n\r\n sizeUpdated: function () {\r\n updateSquareFootage();\r\n calculateCost();\r\n saveHistory();\r\n },\r\n\r\n /**\r\n * User wants to save a new customization to a project. First validate the form before opening the modal.\r\n * @param {any} xhr\r\n */\r\n openProjectModal: function (xhr) {\r\n FD.Utility.stopLadda.call(this);\r\n\r\n FD.Modal.openModal(xhr, {\r\n onCreate: function ($modal) {\r\n $modal.find('img').attr('src', $('#PRODUCT_IMG').attr('src')); // add img on login screen\r\n var url = window.location.href.replace(window.location.origin, '');\r\n if (!url.includes('selectedPalette')) {\r\n url += url.includes('?') ? '&selectedPalette=0' : '?selectedPalette=0';\r\n }\r\n $modal.find('[data-return-url]').val(url);\r\n\r\n $('#AddToProject_Customization_LengthInFeet').val($('#Customization_LengthInFeet').val());\r\n $('#AddToProject_Customization_LengthInInches').val($('#Customization_LengthInInches').val());\r\n $('#AddToProject_Customization_WidthInFeet').val($('#Customization_WidthInFeet').val());\r\n $('#AddToProject_Customization_WidthInInches').val($('#Customization_WidthInInches').val());\r\n\r\n if ($(\".color-visualizer-customization\").is(\":visible\")) {\r\n const form = FD.Utility.getControlValuesByContainer(\"#FORM\");\r\n const colors = $('.palette-item .palette:visible .palette-color').map((_, s) => $(s).data('colorHex')).toArray().join('|')\r\n const data = {\r\n colors: colors,\r\n productId: form.ProductId,\r\n hasBorder: $(\"#FORM input[type=checkbox][name$=HasBorder]\").is(':checked'),\r\n format: 'svg'\r\n }\r\n\r\n const url = FD.Page.colorVisualizerImageUrl + \"?\" + $.param(data).replaceAll(\"[]\", '');\r\n $modal.find('img').attr('src', url);\r\n }\r\n const $newProject = $modal.find('#newProject');\r\n $modal.find('#project').on('change', function () {\r\n $newProject.toggleClass(\"d-none\", this.value > 0);\r\n });\r\n\r\n $(\".color-visualizer-customization [name$=ColorId]\").clone().appendTo('#PROJECT_FORM');\r\n $(\"#FORM [name$=HasBorder]\").clone().removeAttr('data-fd-control').appendTo('#PROJECT_FORM')\r\n }\r\n });\r\n },\r\n /**\r\n * User is adding the customization to a project and submitted their choice of project to save it to.\r\n * @param {any} data\r\n */\r\n saveToProject: function (data, e) {\r\n e.preventDefault();\r\n const element = e.target;\r\n const customizingElem = $('#AddToProject_Customization_IsCustomizing');\r\n if (customizingElem) {\r\n const isCustomizing = !$('.semi-custom').hasClass('d-none');\r\n customizingElem.val(isCustomizing);\r\n }\r\n\r\n const submit = () => {\r\n $.fdAjax({\r\n url: FD.Page.saveToProjectAction,\r\n params: $(element).serialize(),\r\n contentTypeHelper: 'form',\r\n callback: (result) => {\r\n if (FD.Utility.getControlValuesByContainer(element).AddToQuote == 'true') {\r\n const param = {\r\n projectId: result.data.projectId,\r\n customizationIds: result.data.id,\r\n }\r\n const href = FD.Page.downloadQuoteUrl + '?' + $.param(param);\r\n const link = $('').attr({ href, target: '_blank', id: 'DOWNLOAD_QUOTE_REMOVE' });\r\n link.appendTo('body');\r\n link[0].click();\r\n link.remove();\r\n FD.Modal.hideModal.call(element.closest('.modal'));\r\n } else {\r\n window.location = FD.Page.projectUrl.replace('0', result.data.projectId);\r\n }\r\n }\r\n });\r\n }\r\n\r\n if ($(\"#project\").val() == \"0\") {\r\n if ($(element).valid()) {\r\n const name = $('#newProject_Name').val();\r\n\r\n $.fdAjax({\r\n url: FD.Page.addProjectAction,\r\n params: $(element).serialize(),\r\n contentTypeHelper: \"form\",\r\n callback: (result) => {\r\n $(\"#project\").append($(``));\r\n $(\"#project\").val(result.data);\r\n submit();\r\n }\r\n });\r\n }\r\n } else {\r\n submit();\r\n }\r\n },\r\n addOrUpdateCart: function (data, event) {\r\n if (updateSquareFootage() == 0) {\r\n $(\".size-required-cart\").removeClass(\"d-none\");\r\n $(\"#Customization_WidthInFeet\").focus();\r\n event?.preventDefault();\r\n return false;\r\n }\r\n return true;\r\n },\r\n /**\r\n * There are a few buttons which submit this form that shouldn't enforce strict validation.\r\n * This function provides the ability to override validation.\r\n */\r\n submit: function () {\r\n\r\n /** @type {JQLite} */\r\n const $trigger = this.popTriggerElement();\r\n\r\n if (!this.valid() && $trigger.hasClass(\"ignore-validation\")) {\r\n // allow the form to submit since the button that triggered the form specified it\r\n $(\":input\", this.element).addClass(\"ignore-validators\");\r\n $(\".field-validation-error\").hide();\r\n\r\n setTimeout(() => $trigger.click());\r\n }\r\n },\r\n updateDimensions: function (data, e) {\r\n e.preventDefault();\r\n openDimensionsOverlay();\r\n },\r\n downloadTearSheet: function (data, e) {\r\n const id = +data.parentid;\r\n const queryString = id ? '' : window.location.search;\r\n const href = this.element.attr('href').split('?')[0] + queryString;\r\n this.element.attr('href', decodeURIComponent(href));\r\n },\r\n beforeDownloadQuote: function () {\r\n return FD.Page.addOrUpdateCart();\r\n },\r\n promptLogin: function (data, e) {\r\n e.preventDefault();\r\n $('#LOGIN').trigger('click');\r\n },\r\n toggleControls: function (data, e) {\r\n $('.semi-custom').removeClass('d-none');\r\n $('.semi-custom-block').addClass('d-none');\r\n $('.product-image').removeClass('semi-custom').addClass('semi-custom-customize');\r\n\r\n $(\"#START_CUSTOMIZING\").addClass('d-none');\r\n FD.Page.sticky?.update();\r\n\r\n loadPreview();\r\n },\r\n submitInquiry: function (data, e) {\r\n e.preventDefault();\r\n submit(this.element);\r\n },\r\n submitPomForm: function (data, e) {\r\n e.preventDefault();\r\n submitPomRequestForm(this.element);\r\n },\r\n\r\n editPalette: function (data, applyPalette = true) {\r\n $(\"input[name$=SelectedPalette]\").val(data.parentid);\r\n $(\".palette-item .palette\").each(function () {\r\n $(this).toggleClass('d-none', $(this).data('fdParentid') != data.parentid);\r\n $(this).toggleClass('d-flex', $(this).data('fdParentid') == data.parentid);\r\n // Rest the palette colors.\r\n if ($(this).data('fdParentid') == data.parentid) {\r\n $(this).find('.palette-color').each(function () {\r\n const data = $(this).parent().data();\r\n $(this).data(data);\r\n $(this).css(\"--color\", data.colorHex);\r\n $(this).css(\"--border-color\", data.borderColor);\r\n });\r\n }\r\n });\r\n $(\".palette-item\").removeClass('d-none');\r\n\r\n const palette = $(`.palette-item .palette[data-fd-parentid='${data.parentid}'] .palette-color:first`);\r\n FD.Page.selectColor.call({ element: palette });\r\n if (applyPalette) {\r\n FD.Page.applyPalette(data.parentid);\r\n }\r\n\r\n $(`.palette-list .palette i.selected`).removeClass('selected');\r\n $(`.palette-list .palette[data-fd-parentid='${data.parentid}'] i`).addClass('selected');\r\n },\r\n selectColor: function () {\r\n const $selected = $(\".selected-color\");\r\n $color = this.element.parent();\r\n $selected.find('div').text(this.element.data(\"colorCode\"));\r\n $selected.find('i').css(\"--color\", this.element.data(\"colorHex\"));\r\n\r\n this.element.closest('.palette').find('.palette-color.selected').removeClass('selected');\r\n this.element.addClass('selected');\r\n $('.grid-palette .palette-color.selected').removeClass('selected');\r\n $(`.grid-palette .palette-color[data-code=${this.element.data(\"colorCode\")}]`).addClass('selected');\r\n },\r\n applyColor: function (data) {\r\n this.element.siblings('.selected').removeClass('selected');\r\n this.element.addClass('selected');\r\n\r\n // Update left \"selected color\"\r\n const $selected = $(\".selected-color\");\r\n $selected.find('div').text(this.element.data('code'));\r\n $selected.find('.palette-color').css(\"--color\", data.value);\r\n\r\n // Update top color and form values\r\n $color.find('.palette-color').data({\r\n colorId: data.parentid,\r\n colorHex: data.value,\r\n colorCode: this.element.data('code')\r\n });\r\n $color.find('.palette-color').css(\"--color\", data.value).css(\"--border-color\", this.element.css('--border-color'));\r\n\r\n FD.Page.applyPalette($color.closest('.palette').data('fdParentid'));\r\n },\r\n applyPalette: function (palette, updateUrl = true) {\r\n const hasBorder = $(\"#FORM input[type=checkbox][name$=HasBorder]\").is(':checked');\r\n // Update the form values\r\n $(\".color-visualizer-customization [name$=ColorId]\").each((_, item) => {\r\n const color = $(item).data('color');\r\n const colorid = $(`.palette-item .palette[data-fd-parentid=${palette}] [data-color=${color}] .palette-color`).data('colorId');\r\n $(item).val(colorid);\r\n })\r\n\r\n // Update the preview\r\n const classes = $(\".color-visualizer-customization input[name*=PaletteClasses]\").map((_, item) => $(item).val()).toArray();\r\n for (const rule of $(\"#PREVIEW\")[0].contentDocument.styleSheets[0].cssRules) {\r\n if (rule.selectorText.includes('g:has')) {\r\n continue;\r\n }\r\n if (rule.selectorText == '#TextureNoBorder') {\r\n rule.style.display = !hasBorder ? 'block' : 'none';\r\n } else if (rule.selectorText == '#TextureBorder') {\r\n rule.style.display = hasBorder ? 'block' : 'none';\r\n } else {\r\n const color = $(`.palette-item .palette[data-fd-parentid=${palette}] [data-color=${classes.indexOf(rule.selectorText)}] .palette-color`).data('colorHex');\r\n if (rule.style.fill) {\r\n rule.style.fill = color;\r\n }\r\n if (classes.indexOf(rule.selectorText) == classes.length - 1) {\r\n rule.style.display = hasBorder ? 'block' : 'none';\r\n }\r\n }\r\n }\r\n if (updateUrl) {\r\n saveHistory();\r\n }\r\n\r\n },\r\n hasBorderUpdated: function (data) {\r\n const selectedPalette = +$(\"input[name$=SelectedPalette\").val();\r\n $('.palette-item .palette').each(function () {\r\n $('.palette-colors > *:last-child', this)\r\n .toggleClass('d-none', !data.value)\r\n .toggleClass('d-flex', data.value);\r\n\r\n });\r\n if (!data.value && $color.index() == $(`.palette-item .palette[data-fd-parentid=${selectedPalette}] .palette-colors > *:last-child`).index()) {\r\n FD.Page.selectColor.call({ element: $color.prev().find('.palette-color') });\r\n }\r\n FD.Page.applyPalette(selectedPalette);\r\n },\r\n\r\n prevPage: function (data) {\r\n const grid = this.element.closest('.d-flex').find('.grid-palette');\r\n let page = grid.data('page');\r\n const pages = grid.data('pages');\r\n page = page == 0 ? pages - 1 : page - 1;\r\n grid.data('page', page).attr('data-page', page);\r\n },\r\n nextPage: function (data) {\r\n const grid = this.element.closest('.d-flex').find('.grid-palette');\r\n let page = grid.data('page');\r\n const pages = grid.data('pages');\r\n page = page == pages - 1 ? 0 : page + 1;\r\n grid.data('page', page).attr('data-page', page);\r\n },\r\n addPomSample: function (data) {\r\n if ($(`.pom-selections .pom-selection[data-fd-parentid=${data.parentid}]`).length) {\r\n // Item already seelcted.\r\n return;\r\n }\r\n\r\n if ($('.pom-selections .pom-selection').length == 6) {\r\n notify.alert(\"Each order is limited to six colors.\");\r\n return;\r\n }\r\n\r\n const item = $(pomTemplate)\r\n .attr('data-fd-parentid', data.parentid)\r\n .find('input').val(data.parentid).end()\r\n .find('.palette-color').css('--color', data.value).css('--border-color', this.element.css('--border-color')).end()\r\n .find('.pom-color').text(this.element.data('code')).end();\r\n\r\n $('.pom-selections').append(item).enableControls();\r\n $(\"input[name$=ColorCount]\").val($('.pom-selections .pom-selection').length);\r\n },\r\n removePomSample: function (data) {\r\n this.element.closest('.pom-selection').remove();\r\n $(\"input[name$=ColorCount]\").val($('.pom-selections .pom-selection').length);\r\n },\r\n\r\n };\r\n\r\n return Object.assign({}, FD.Page, page);\r\n}();"]}