@optionfactory/ful 6.0.2 → 6.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ful.iife.js +24 -11
- package/dist/ful.iife.js.map +1 -1
- package/dist/ful.iife.min.js +1 -1
- package/dist/ful.iife.min.js.map +1 -1
- package/dist/ful.min.mjs +1 -1
- package/dist/ful.min.mjs.map +1 -1
- package/dist/ful.mjs +24 -11
- package/dist/ful.mjs.map +1 -1
- package/package.json +5 -5
package/dist/ful.mjs
CHANGED
|
@@ -1219,10 +1219,8 @@ class Bindings {
|
|
|
1219
1219
|
static extractFrom(form, submitter){
|
|
1220
1220
|
let result = {};
|
|
1221
1221
|
for(const el of form.elements){
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
}
|
|
1225
|
-
if(submitter && (el.type==='submit' || el.type === 'reset') && el !== submitter){
|
|
1222
|
+
// we are assuming submitters are disabled during submit.
|
|
1223
|
+
if(!el.hasAttribute("name") || (el.matches(":disabled") && el !== submitter)){
|
|
1226
1224
|
continue;
|
|
1227
1225
|
}
|
|
1228
1226
|
result = Bindings.providePath(result, /** @type {string} */(el.getAttribute('name')), Bindings.extract(el));
|
|
@@ -1358,7 +1356,7 @@ class Form extends ParsedElement {
|
|
|
1358
1356
|
form.addEventListener('submit', async (e) => {
|
|
1359
1357
|
e.preventDefault();
|
|
1360
1358
|
e.stopPropagation();
|
|
1361
|
-
await this.submit(e.submitter);
|
|
1359
|
+
await this.submit(e.submitter ?? undefined);
|
|
1362
1360
|
});
|
|
1363
1361
|
if (this.hasAttribute("clear-invalid-on-change")) {
|
|
1364
1362
|
this.addEventListener('change', (/** @type any */evt) => {
|
|
@@ -1379,19 +1377,20 @@ class Form extends ParsedElement {
|
|
|
1379
1377
|
const values = Bindings.extractFrom(this.form, submitter);
|
|
1380
1378
|
let request = await loader.prepare(values, this);
|
|
1381
1379
|
try {
|
|
1382
|
-
const se = new CustomEvent('submit', { bubbles: true, cancelable: true, detail: { values, request } });
|
|
1380
|
+
const se = new CustomEvent('submit', { bubbles: true, cancelable: true, detail: { submitter, values, request } });
|
|
1383
1381
|
if (!this.dispatchEvent(se)) {
|
|
1384
1382
|
return;
|
|
1385
1383
|
}
|
|
1386
|
-
|
|
1384
|
+
this.errors = [];
|
|
1385
|
+
const sre = new CustomEvent('submit:requested', { bubbles: true, cancelable: false, detail: { submitter, values: se.detail.values, request: se.detail.request} });
|
|
1387
1386
|
let response = await AsyncEvents.fireAsync(this, sre);
|
|
1388
1387
|
request = sre.detail.request;
|
|
1389
1388
|
|
|
1390
1389
|
response = await loader.submit(request, this, response);
|
|
1391
1390
|
const mapped = await loader.transform(response, this);
|
|
1392
|
-
this.dispatchEvent(new CustomEvent('submit:success', { bubbles: true, cancelable: false, detail: { values, request, response: mapped } }));
|
|
1391
|
+
this.dispatchEvent(new CustomEvent('submit:success', { bubbles: true, cancelable: false, detail: { submitter, values, request, response: mapped } }));
|
|
1393
1392
|
} catch (e) {
|
|
1394
|
-
this.dispatchEvent(new CustomEvent('submit:failure', { bubbles: true, cancelable: false, detail: { values, request, exception: e } }));
|
|
1393
|
+
this.dispatchEvent(new CustomEvent('submit:failure', { bubbles: true, cancelable: false, detail: { submitter, values, request, exception: e } }));
|
|
1395
1394
|
if (e instanceof Failure) {
|
|
1396
1395
|
this.errors = e.problems;
|
|
1397
1396
|
}
|
|
@@ -1472,7 +1471,21 @@ class Input extends ParsedElement {
|
|
|
1472
1471
|
this.required = observed.required;
|
|
1473
1472
|
this.value = observed.value;
|
|
1474
1473
|
}
|
|
1475
|
-
|
|
1474
|
+
this._input.addEventListener('input', (evt) => {
|
|
1475
|
+
const re = this.getAttribute('mask');
|
|
1476
|
+
if (!re) {
|
|
1477
|
+
return;
|
|
1478
|
+
}
|
|
1479
|
+
const before = evt.target.value;
|
|
1480
|
+
const after = before.replace(new RegExp(re, 'g'), '');
|
|
1481
|
+
if (before === after) {
|
|
1482
|
+
return;
|
|
1483
|
+
}
|
|
1484
|
+
const start = evt.target.selectionStart;
|
|
1485
|
+
const offset = before.length - after.length;
|
|
1486
|
+
evt.target.value = after;
|
|
1487
|
+
evt.target.setSelectionRange(start - offset, start - offset);
|
|
1488
|
+
});
|
|
1476
1489
|
this._input.addEventListener('change', (evt) => {
|
|
1477
1490
|
evt.stopPropagation();
|
|
1478
1491
|
this.dispatchEvent(new CustomEvent('change', {
|
|
@@ -1520,7 +1533,7 @@ class Input extends ParsedElement {
|
|
|
1520
1533
|
this.reflect(() => {
|
|
1521
1534
|
Attributes.toggle(this, 'required', d);
|
|
1522
1535
|
});
|
|
1523
|
-
}
|
|
1536
|
+
}
|
|
1524
1537
|
focus(options) {
|
|
1525
1538
|
this._input.focus(options);
|
|
1526
1539
|
}
|