class eventBinding { constructor() { this.element = {} } static event = {} getEvent(name) { return eventBinding.event[name] } getEventAll() { return eventBinding.event } setEvent(name, event) { eventBinding.event[name] = event } on(that, elements) { for (let i = 0; i < elements.length; i++) { let Event = [] let isEvent = false let removeName = [] if (!elements[i] || !elements[i].attributes) { continue } for (let m of elements[i].attributes) { switch (m.name) { case '@model': { isEvent = true if (elements[i].type == 'checkbox') { Event.push((e) => { that[m.value] = e.target.checked }) elements[i].checked = that[m.value] } else { Event.push((e) => { let value = e.target.value if (e.target.type == 'number') { if (e.data != '.' && (e.data != '-' || e.target.value)) { value = Number(value) if ((e.target.max) && value > Number(e.target.max)) { value = Number(e.target.max) e.target.value = value } if ((e.target.min) && value < Number(e.target.min)) { value = Number(e.target.min) e.target.value = value } if ((e.target.dataset.min) && value < Number(e.target.dataset.min)) { value = Number(e.target.dataset.min) } that[m.value] = value } } else { that[m.value] = value } }) if (elements[i].nodeName == 'IMG') { elements[i].src = that[m.value] } else { elements[i].value = that[m.value] } } if (this.element[m.value]) { this.element[m.value].push(elements[i]) } else { this.element[m.value] = [elements[i]] } removeName.push(m.name) break; } case '@click': { elements[i].addEventListener('click', (e) => { if (typeof (that[m.value]) === 'function') { that[m.value](e) } }); removeName.push(m.name) // elements[i].attributes.removeNamedItem(m.name) break; } case '@change': { isEvent = true Event.push((e) => { let value = e.target.value if (e.target.type == 'number' && value != '') { value = Number(value) e.target.value = value } if (typeof (that[m.value]) === 'function') { that[m.value](e, value) } }) break; } } // elements[i].attributes[m] = undefined } for (let n = 0; n < removeName.length; n++) { elements[i].attributes.removeNamedItem(removeName[n]) } if (isEvent) { let ventType = 'input' if (elements[i].tagName != 'INPUT' || elements[i].type == 'checkbox') { ventType = 'change' } elements[i].addEventListener(ventType, (e) => { for (let t = 0; t < Event.length; t++) { Event[t](e) } }); } } } } const EventBinding = new eventBinding(); export default EventBinding;