Release v2.5.6

This commit is contained in:
2026-08-05 19:38:16 +01:00
parent a8ef35b287
commit 9f831f04bc
161 changed files with 8487 additions and 1295 deletions
+129 -6
View File
@@ -157,10 +157,14 @@
return Boolean(form && form.dataset && form.dataset.dirty === 'true');
}
function isRegionEditorField(target) {
return Boolean(target && typeof target.closest === 'function' && target.closest('.region-item'));
}
function initDirtyTracking() {
document.addEventListener('input', function (event) {
var target = event.target;
if (!target || !target.form) {
if (!target || !target.form || isRegionEditorField(target)) {
return;
}
markFormDirty(target.form);
@@ -168,13 +172,101 @@
document.addEventListener('change', function (event) {
var target = event.target;
if (!target || !target.form) {
if (!target || !target.form || isRegionEditorField(target)) {
return;
}
markFormDirty(target.form);
}, true);
}
function clampLimitedInputValue(input) {
if (!input || !input.matches || !input.matches('input[data-limit-input-value]')) {
return;
}
var minAttr = input.getAttribute('min');
var maxAttr = input.getAttribute('max');
var minValue = minAttr === null || minAttr === '' ? null : Number(minAttr);
var maxValue = maxAttr === null || maxAttr === '' ? null : Number(maxAttr);
var rawValue = String(input.value || '').trim();
if (!rawValue) {
return;
}
var numericValue = Number(rawValue);
if (!Number.isFinite(numericValue)) {
return;
}
if (Number.isFinite(minValue) && numericValue < minValue) {
input.value = String(minValue);
return;
}
if (Number.isFinite(maxValue) && numericValue > maxValue) {
input.value = String(maxValue);
}
}
function initLimitedInputValues() {
document.addEventListener('input', function (event) {
clampLimitedInputValue(event.target);
}, true);
document.addEventListener('change', function (event) {
clampLimitedInputValue(event.target);
}, true);
document.addEventListener('paste', function (event) {
var target = event.target;
if (!target || !target.matches || !target.matches('input[data-limit-input-value]')) {
return;
}
window.setTimeout(function () {
clampLimitedInputValue(target);
}, 0);
}, true);
}
function clampLimitedTextValue(input) {
if (!input || !input.matches || !input.matches('input[data-limit-text-length], textarea[data-limit-text-length]')) {
return;
}
var maxLength = Number(input.getAttribute('maxlength'));
if (!Number.isFinite(maxLength) || maxLength < 1) {
return;
}
var value = String(input.value || '');
if (value.length > maxLength) {
input.value = value.slice(0, maxLength);
}
}
function initLimitedTextInputValues() {
document.addEventListener('input', function (event) {
clampLimitedTextValue(event.target);
}, true);
document.addEventListener('change', function (event) {
clampLimitedTextValue(event.target);
}, true);
document.addEventListener('paste', function (event) {
var target = event.target;
if (!target || !target.matches || !target.matches('input[data-limit-text-length], textarea[data-limit-text-length]')) {
return;
}
window.setTimeout(function () {
clampLimitedTextValue(target);
}, 0);
}, true);
}
function initCancelConfirm() {
document.addEventListener('click', function (event) {
var cancelTarget = event.target.closest('[data-confirm-unsaved]');
@@ -219,6 +311,15 @@
return String(responseText || '').trim();
}
function isWarningSaveError(error) {
var status = Number(error && error.status);
if (status === 400 || status === 422) {
return true;
}
return /region names must be unique/i.test(String(error && error.message || ''));
}
function getAsyncSaveActionField(form) {
if (!form || !form.querySelector) {
return null;
@@ -312,7 +413,9 @@
if (!response.ok) {
var responseText = await response.text();
throw new Error(parseAsyncSaveErrorMessage(responseText) || (settings.errorMessage || 'Unable to save changes.'));
var error = new Error(parseAsyncSaveErrorMessage(responseText) || (settings.errorMessage || 'Unable to save changes.'));
error.status = response.status;
throw error;
}
if (isLoginRedirect(response)) {
@@ -363,11 +466,25 @@
})
: parseAsyncSaveResponseMessage(responseText);
showToast(successMessage || String(settings.fallbackSuccessMessage || 'Saved.'), 'success');
var resolvedSuccessMessage = successMessage || String(settings.fallbackSuccessMessage || 'Saved.');
if (form.dataset && form.dataset.asyncSaveRefreshPage === 'true') {
if (typeof window.queueToastAfterRefresh === 'function') {
window.queueToastAfterRefresh(resolvedSuccessMessage, 'success');
} else if (typeof showToast === 'function') {
showToast(resolvedSuccessMessage, 'success');
}
window.setTimeout(function () {
window.location.reload();
}, 1000);
return true;
}
showToast(resolvedSuccessMessage, 'success');
return true;
} catch (error) {
if (typeof showToast === 'function') {
var variant = Number(error && error.status) >= 400 && Number(error && error.status) < 500 ? 'warning' : 'danger';
var variant = isWarningSaveError(error) ? 'warning' : 'danger';
showToast(error && error.message ? error.message : (settings.errorMessage || 'Unable to save changes.'), variant);
} else {
window.alert(error && error.message ? error.message : (settings.errorMessage || 'Unable to save changes.'));
@@ -822,7 +939,7 @@
return;
}
element.textContent = formatDashboardDate(date);
element.textContent = formatDashboardDate(date, element.getAttribute('data-local-datetime-format') === '24h');
});
}
@@ -862,6 +979,8 @@
initConfirmForms();
initDeleteButtons();
initDirtyTracking();
initLimitedInputValues();
initLimitedTextInputValues();
initCancelConfirm();
initAsyncCommandForms();
initAsyncSaveForms();
@@ -872,6 +991,10 @@
attachSlideThumbFallbacks(document);
window.initJsonTogglePanels = initJsonTogglePanels;
window.initLocalDateTimes = initLocalDateTimes;
window.clampLimitedInputValue = clampLimitedInputValue;
window.initLimitedInputValues = initLimitedInputValues;
window.clampLimitedTextValue = clampLimitedTextValue;
window.initLimitedTextInputValues = initLimitedTextInputValues;
window.createSlideThumbPlaceholder = createSlideThumbPlaceholder;
window.attachSlideThumbFallbacks = attachSlideThumbFallbacks;
}());