{"version":3,"file":"100.06dc0b46ee0da2e7b781.js","mappings":"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","sources":["webpack://iflyworld.web/./wwwroot/app/src/js/form-number-control.js"],"sourcesContent":["const event = new Event('formNumberControlUpdate');\r\nconst changeEvent = new Event('change');\r\n\r\nclass NumberControl {\r\n constructor(el) {\r\n this.el = el;\r\n this.inputField = el.querySelector('input');\r\n this.value = 0;\r\n this.minButton = el.querySelector('.decrease-btn');\r\n this.maxButton = el.querySelector('.increase-btn');\r\n this.min = parseInt(this.inputField.dataset.min);\r\n this.max = parseInt(this.inputField.dataset.max);\r\n // is there an increment setting?\r\n this.incrementBy = 1; //default\r\n let inc = this.inputField.dataset.increment;\r\n if(typeof(inc) != 'undefined') {\r\n this.incrementBy = parseInt(inc);\r\n }\r\n // is there a range slider to tether to this control?\r\n this.hasSlider = false;\r\n let slider = this.inputField.dataset.sliderId;\r\n if(typeof(slider) != 'undefined') {\r\n this.slider = document.getElementById(slider);\r\n if(this.slider != null) this.hasSlider = true;\r\n }\r\n // validate number\r\n this.validateNumber();\r\n // behaviours\r\n this.minButton.onclick = (e) => {\r\n e.preventDefault();\r\n this.increment(false);\r\n };\r\n this.maxButton.onclick = (e) => {\r\n e.preventDefault();\r\n this.increment(true);\r\n };\r\n this.inputField.onblur = () => {\r\n this.validateNumber(false);\r\n };\r\n this.inputField.addEventListener('valueChange', (e) => {\r\n this.inputField.value = e.detail.Quantity;\r\n this.value = e.detail.Quantity;\r\n }, false);\r\n // slider behaviours\r\n if(this.hasSlider) {\r\n this.slider.addEventListener('input', () => {\r\n this.valueFromSlider();\r\n });\r\n this.slider.addEventListener('change', () => {\r\n this.valueFromSlider();\r\n });\r\n }\r\n // disabled return key on input field\r\n this.inputField.addEventListener('keydown', (e) => {\r\n switch (e.key) {\r\n case 'Enter':\r\n case 'Return':\r\n e.preventDefault();\r\n break;\r\n }\r\n });\r\n }\r\n increment(mode) {\r\n if(mode && this.value < this.max) {\r\n this.value += this.incrementBy;\r\n } else if(!mode && this.value > this.min) {\r\n this.value -= this.incrementBy;\r\n }\r\n this.inputField.value = this.value;\r\n this.inputField.dispatchEvent(event);\r\n this.inputField.dispatchEvent(changeEvent);\r\n this.checkButtons();\r\n // update slider ?\r\n if(this.hasSlider) this.valueToSlider();\r\n }\r\n checkButtons() {\r\n if(this.value <= this.min) {\r\n this.minButton.setAttribute('disabled', 'disabled');\r\n } else {\r\n this.minButton.removeAttribute('disabled');\r\n }\r\n if(this.value >= this.max) {\r\n this.maxButton.setAttribute('disabled', 'disabled');\r\n } else {\r\n this.maxButton.removeAttribute('disabled');\r\n }\r\n }\r\n validateNumber() {\r\n this.value = parseInt(this.inputField.value);\r\n if(isNaN(this.value)) this.value = 0;\r\n // check value is a multiple of the incrementBy amount\r\n this.value = this.incrementBy * Math.round(this.value / this.incrementBy);\r\n // apply limits\r\n if(this.value < this.min) this.value = this.min;\r\n if(this.value > this.max) this.value = this.max;\r\n // update\r\n this.inputField.value = this.value;\r\n this.inputField.dispatchEvent(event);\r\n this.inputField.dispatchEvent(changeEvent);\r\n this.checkButtons();\r\n // update slider ?\r\n if(this.hasSlider) this.valueToSlider();\r\n }\r\n valueFromSlider() {\r\n let sliderValue = this.slider.value;\r\n if(sliderValue !== this.value) {\r\n this.inputField.value = this.slider.value;\r\n this.validateNumber();\r\n }\r\n }\r\n valueToSlider() {\r\n let sliderValue = parseInt(this.slider.value);\r\n if(sliderValue !== this.value) this.slider.value = this.value;\r\n }\r\n}\r\n\r\nexport function createFrom(wrappers) {\r\n wrappers.forEach((node) => {\r\n // if node is an element\r\n if (node.nodeType === 1) {\r\n new NumberControl(node);\r\n }\r\n });\r\n}\r\n"],"names":["event","Event","changeEvent","NumberControl","constructor","el","this","inputField","querySelector","value","minButton","maxButton","min","parseInt","dataset","max","incrementBy","inc","increment","hasSlider","slider","sliderId","document","getElementById","validateNumber","onclick","e","preventDefault","onblur","addEventListener","detail","Quantity","valueFromSlider","key","mode","dispatchEvent","checkButtons","valueToSlider","setAttribute","removeAttribute","isNaN","Math","round","createFrom","wrappers","forEach","node","nodeType"],"sourceRoot":""}