diff --git a/src/Global/efflect/Sunshine/eventBinding.js b/src/Global/efflect/Sunshine/eventBinding.js index 6e1b840..321dbdb 100644 --- a/src/Global/efflect/Sunshine/eventBinding.js +++ b/src/Global/efflect/Sunshine/eventBinding.js @@ -1,45 +1,89 @@ -class eventBinding { +class EventBinding { constructor() { this.element = {} } static event = {} getEvent(name) { - return eventBinding.event[name] + return EventBinding.event[name] } getEventAll() { - return eventBinding.event + return EventBinding.event } setEvent(name, event) { - eventBinding.event[name] = event + EventBinding.event[name] = event } on(that, elements) { + this.element = {} for (let i = 0; i < elements.length; i++) { - let Event = [] - let isEvent = false - let removeName = [] if (!elements[i] || !elements[i].attributes) { continue; } + let Event = { + 'input': [], + 'change': [], + 'blur': [], + 'click': [] + } + let isEvent = false + let removeName = [] 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 }) + Event.change.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') { - value = Number(value) - } - that[m.value] = value - }) + if (elements[i].type == 'number') { + Event.input.push((e) => { + if (e.target.value || e.target.value === 0) { + let value = e.target.value + value = Number(value) + if (e.data != '.' && (e.data != '-' || e.target.value)) { + if (((!e.target.max) && (!e.target.min)) || ((value <= Number(e.target.max)) && value >= Number(e.target.min))) { + // that[m.value] = value + value = value + } + if ((e.target.max) && value > Number(e.target.max)) { + value = Number(e.target.max) + } + if ((e.target.min) && value < Number(e.target.min)) { + value = Number(e.target.min) + } + // if ((e.target.dataset.min) && value < Number(e.target.dataset.min)) { + // value = Number(e.target.dataset.min) + // } + that[m.value] = value + } + } + }) + Event.blur.push((e) => { + let value = e.target.value + if (e.target.value || (e.target.dataset.null !== 'undefined' && e.target.dataset.null !== '' && !Boolean(e.target.dataset.null))) { + value = Number(value) + if ((e.target.max) && value > Number(e.target.max)) { + value = Number(e.target.max) + } + if ((e.target.min) && value < Number(e.target.min)) { + value = Number(e.target.min) + } + if ((e.target.dataset.min) && value < Number(e.target.dataset.min)) { + value = Number(e.target.dataset.min) + } + } + that[m.value] = value + }) + } + else { + Event.input.push((e) => { + that[m.value] = e.target.value + }) + } if (elements[i].nodeName == 'IMG') { elements[i].src = that[m.value] } @@ -57,13 +101,13 @@ class eventBinding { break; } case '@click': { - elements[i].addEventListener('click', (e) => { - if (typeof (that.Dialog[m.value]) === 'function') { - that.Dialog[m.value](e) + isEvent = true + Event.click.push((e) => { + if (typeof (that[m.value]) === 'function') { + that[m.value](e) } - }); + }) removeName.push(m.name) - // elements[i].attributes.removeNamedItem(m.name) break; } } @@ -74,19 +118,18 @@ class eventBinding { } 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) + for (let key in Event) { + if (Event[key].length > 0) { + elements[i].addEventListener(key, (e) => { + for (let t = 0; t < Event[key].length; t++) { + Event[key][t](e) + } + }); } - }); + } } } } } -const EventBinding = new eventBinding(); export default EventBinding; diff --git a/src/Global/efflect/Sunshine/index.js b/src/Global/efflect/Sunshine/index.js index 12119d5..4a921a1 100644 --- a/src/Global/efflect/Sunshine/index.js +++ b/src/Global/efflect/Sunshine/index.js @@ -3,7 +3,7 @@ */ import Dialog from '../../../Obj/Element/Dialog'; import { html } from "./_element"; -import EventBinding from '../../../Obj/Element/Dialog/eventBinding'; +import EventBinding from './eventBinding'; import { syncData } from '../../MultiViewportMode' import Tools from '../../../Tools' import TimeLine from './TimeLine' diff --git a/src/Obj/Element/Dialog/eventBinding.js b/src/Obj/Element/Dialog/eventBinding.js index 6bd6b26..18074c5 100644 --- a/src/Obj/Element/Dialog/eventBinding.js +++ b/src/Obj/Element/Dialog/eventBinding.js @@ -45,10 +45,6 @@ class EventBinding { let value = e.target.value value = Number(value) if (e.data != '.' && (e.data != '-' || e.target.value)) { - if (((!e.target.max) && (!e.target.min)) || ((value <= Number(e.target.max)) && value >= Number(e.target.min))) { - // that[m.value] = value - value = value - } if ((e.target.max) && value > Number(e.target.max)) { value = Number(e.target.max) } @@ -58,10 +54,8 @@ class EventBinding { if ((e.target.dataset.min) && value < Number(e.target.dataset.min)) { value = Number(e.target.dataset.min) } - that[m.value] = value } - } - }) + }) Event.blur.push((e) => { let value = e.target.value if (e.target.value || (e.target.dataset.null !== 'undefined' && e.target.dataset.null !== '' && !Boolean(e.target.dataset.null))) {