@optionfactory/ful 6.0.3 → 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.mjs CHANGED
@@ -1356,7 +1356,7 @@ class Form extends ParsedElement {
1356
1356
  form.addEventListener('submit', async (e) => {
1357
1357
  e.preventDefault();
1358
1358
  e.stopPropagation();
1359
- await this.submit(e.submitter);
1359
+ await this.submit(e.submitter ?? undefined);
1360
1360
  });
1361
1361
  if (this.hasAttribute("clear-invalid-on-change")) {
1362
1362
  this.addEventListener('change', (/** @type any */evt) => {
@@ -1377,19 +1377,20 @@ class Form extends ParsedElement {
1377
1377
  const values = Bindings.extractFrom(this.form, submitter);
1378
1378
  let request = await loader.prepare(values, this);
1379
1379
  try {
1380
- 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 } });
1381
1381
  if (!this.dispatchEvent(se)) {
1382
1382
  return;
1383
1383
  }
1384
- const sre = new CustomEvent('submit:requested', { bubbles: true, cancelable: false, detail: { values: se.detail.values, request: se.detail.request} });
1384
+ this.errors = [];
1385
+ const sre = new CustomEvent('submit:requested', { bubbles: true, cancelable: false, detail: { submitter, values: se.detail.values, request: se.detail.request} });
1385
1386
  let response = await AsyncEvents.fireAsync(this, sre);
1386
1387
  request = sre.detail.request;
1387
1388
 
1388
1389
  response = await loader.submit(request, this, response);
1389
1390
  const mapped = await loader.transform(response, this);
1390
- 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 } }));
1391
1392
  } catch (e) {
1392
- 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 } }));
1393
1394
  if (e instanceof Failure) {
1394
1395
  this.errors = e.problems;
1395
1396
  }
@@ -1470,7 +1471,21 @@ class Input extends ParsedElement {
1470
1471
  this.required = observed.required;
1471
1472
  this.value = observed.value;
1472
1473
  }
1473
-
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
+ });
1474
1489
  this._input.addEventListener('change', (evt) => {
1475
1490
  evt.stopPropagation();
1476
1491
  this.dispatchEvent(new CustomEvent('change', {
@@ -1518,7 +1533,7 @@ class Input extends ParsedElement {
1518
1533
  this.reflect(() => {
1519
1534
  Attributes.toggle(this, 'required', d);
1520
1535
  });
1521
- }
1536
+ }
1522
1537
  focus(options) {
1523
1538
  this._input.focus(options);
1524
1539
  }