This commit is contained in:
2025-12-29 07:09:03 +02:00
parent eb3a761a71
commit d80513a8a0
22 changed files with 958 additions and 1393 deletions
+8 -3
View File
@@ -2,8 +2,11 @@ const stamp = Date.now();
export class Ut {
static EventsUID = 'Events' + stamp;
static DataUID = 'Data' + stamp;
static EventsUID = `Events_${stamp}`;
static DataUID = `Data_${stamp}`;
static WidgetUID = `Widget_${stamp}`;
static evKey = 0;
static isSet = (val) => typeof val !== 'undefined';
static isFn = (val) => typeof val === 'function';
@@ -18,6 +21,9 @@ export class Ut {
static each = (obj, callback, context) => obj && Object.keys(obj).forEach(key => callback.call(context ?? this, obj[key], key) );
static tplString = (str, context) => new Function('return `' + str + '`;').call(context || {});
static nextKey = () => ++Ut.evKey;
static resetKey = () => Ut.evKey = 0;
static extendNode(name, value) {
@@ -60,7 +66,6 @@ export class Ut {
moveevent : ('ontouchstart' in window) ? 'touchmove' : 'mousemove'
}
/**
* Redirect
*/
+91 -46
View File
@@ -139,10 +139,9 @@
events.split(' ').forEach(function(evt) {
evt = evt.split('.');
let eName = evt[0];
let namespace = nsPref + (evt[1] || '*');
const i = evt.indexOf('.');
const eName = i === -1 ? evt : evt.slice(0, i);
const namespace = nsPref + (i === -1 ? '*' : evt.slice(i + 1) );
if (!this[ Ut.EventsUID ][ eName ]) {
this[ Ut.EventsUID ][ eName ] = [];
@@ -169,10 +168,9 @@
events.split(' ').forEach(function(evt) {
evt = evt.split('.');
let eName = evt[0];
let namespace = nsPref + (evt[1] || '*');
const i = evt.indexOf('.');
const eName = i === -1 ? evt : evt.slice(0, i);
const namespace = nsPref + (i === -1 ? '*' : evt.slice(i + 1) );
if (!this[ Ut.EventsUID ][ eName ]) {
this[ Ut.EventsUID ][ eName ] = [];
@@ -201,9 +199,9 @@
this[ Ut.EventsUID ][ eName ].push([ namespace, selector, _handler ]);
if (eName.startsWith('swipe')) {
// if (eName.startsWith('swipe')) {
// new SwipeEvents(this, eName, target, _handler, opts);
}
//}
this.addEventListener(eName, _handler, opts);
@@ -213,58 +211,73 @@
return this;
},
/**
* Remove an event handler.
*/
off(events, selector) {
/**
* Remove an event handler.
*/
off(events, selector) {
let nsPref = (EvtOptions.nsEvent && EvtOptions.section) ? (EvtOptions.section + '.') : '';
const target = this;
if (!this[Ut.EventsUID]) {
return this;
}
if (!target[Ut.EventsUID]) {
return target;
}
if (!events) {
this.replaceWith(this.cloneNode(true));
return this;
}
events = events ?? [ '' ];
events.split(' ').forEach(function(evt) {
events.split(' ').forEach(event => {
evt = evt.split('.');
const eventToken = event.split('.');
let eName = evt[0];
let namespace = nsPref + (evt[1] || '*');
let [ eventName, eventNs ] = eventToken;
let eList = this[Ut.EventsUID][eName];
if (eventName === '') {
if (eList) {
const eventRoot = target[Ut.EventsUID];
let i = eList.length;
Ut.each(eventRoot, (eventList, realEventName) => {
let i = (eventList && eventList.length) || 0;
while (i--) {
const eventData = eventList[i];
if ((eventToken.length === 1 || eventNs === eventData[0] || eventData[0].startsWith(`${eventNs}.`)) && (!selector || eventData[1] === selector) ) {
target.removeEventListener(realEventName, eventData[2]);
eventList.splice(i, 1);
}
}
});
return;
}
if (EvtOptions.nsEvent && EvtOptions.section) {
eventNs = `${eventNs}.${EvtOptions.section}`;
}
const eventList = target[Ut.EventsUID][ eventName ];
let i = (eventList && eventList.length) || 0;
while(i--) {
let et = eList[i];
const eventData = eventList[i];
if ((et[0] == namespace || namespace == nsPref + '*') && (!selector || (et[1] == selector)) ) {
if ((eventToken.length === 1 || eventNs === eventData[0] || eventData[0].startsWith(`${eventNs}.`)) && (!selector || eventData[1] === selector) ) {
//if (customEvents[eName]) {
// customEvents[eName].destroy.call(this, eName, et[1]);
//if (customEvents[eventName]) {
// customEvents[eventName].destroy.call(this, eventName, eventData[1]);
//}
//if (eventName.startsWith('swipe')) {}
if (eName.startsWith('swipe')) {
}
this.removeEventListener(eName, et[2]);
eList.splice(i, 1);
this.removeEventListener(eventName, eventData[2]);
eventList.splice(i, 1);
}
}
}
}, this);
}
});
return this;
return target;
},
/**
@@ -506,6 +519,7 @@
left: rect.left + win.scrollX
};
},
/**
* Store / Retreive Arbitrary Data
*/
@@ -521,6 +535,34 @@
return this;
},
/**
* Store / Retreive Arbitrary Widget Data
*/
widget(data) {
if (data) {
this[ Ut.WidgetUID ] = data;
return this;
}
return this[ Ut.WidgetUID ] || null;
},
/**
* Get Widget Data Value
*/
nval() {
return this[ Ut.WidgetUID ]?.getValue();
},
/**
* Remove widget data
*/
removeWidget() {
delete this[ Ut.WidgetUID ];
return this;
},
/**
* Remove Arbitrary Data
@@ -994,9 +1036,12 @@
continue;
}
if ('value' in target.dataset) {
const widget = domUtils.widget.call(target);
if (widget) {
widget.restoreValue(Ut.unescape(val));
target.dataset.value = Ut.unescape(val);
target.value = Ut.unescape(data[key + '_value'] ?? val);
if (domUtils.data.call(target, 'datepicker')) {
+4 -2
View File
@@ -272,8 +272,10 @@ export class Validator {
let value;
let displayedVal = null;
if ('value' in el.dataset) {
value = el.dataset.value;
const widget = el.dxWidget();
if (widget) {
value = widget.getValue();
displayedVal = el.value.trim();
}
else {