More robust functions in table elements

This commit is contained in:
Martin Asprusten
2026-08-29 09:29:49 +02:00
parent ccbf9c12a0
commit 1042c6f240
2 changed files with 860 additions and 26 deletions
+64 -26
View File
@@ -388,41 +388,79 @@ function populateDistancesTable() {
}
distanceInput.value = distance.toFixed(3);
distanceInput.addEventListener('focus', _ => {
distanceInput.addEventListener('focus', e => {
let distanceInput = e.target;
if (!(distanceInput instanceof HTMLInputElement)) {
return;
}
if (distanceInput.classList.contains('unchanged')) {
distanceInput.classList.remove('unchanged');
distanceInput.value = '';
}
});
distanceInput.addEventListener('input', _ => {
var value = distanceInput.value;
var valueFloat = parseFloat(value);
if (value != '' && isNaN(valueFloat)) {
if (!distanceInput.classList.contains('wrong')) {
distanceInput.classList.add('wrong');
function createInputFunction(firstLatLng: LatLng | undefined, secondLatLng: LatLng | undefined) {
return function (event: Event) {
let distanceInput = event.target;
if (!(distanceInput instanceof HTMLInputElement)) {
return;
}
} else {
if (distanceInput.classList.contains('wrong')) {
distanceInput.classList.remove('wrong');
}
if (!lockedDistance) {
lockedDistance = [firstLatLng!, secondLatLng!, 0.0];
state.distances.push(lockedDistance);
}
lockedDistance[2] = valueFloat;
}
});
distanceInput.addEventListener('blur', _ => {
if (distanceInput.value == '') {
distanceInput.value = distance.toFixed(3);
if (wasUnchanged) {
distanceInput.classList.add('unchanged');
state.distances = state.distances.filter(tuple => tuple != lockedDistance);
let lockedDistance = state.distances.find(
d => (d[0] == firstLatLng && d[1] == secondLatLng)
|| (d[0] == secondLatLng && d[1] == firstLatLng)
);
var value = distanceInput.value;
var valueFloat = parseFloat(value);
if (value != '' && isNaN(valueFloat)) {
if (!distanceInput.classList.contains('wrong')) {
distanceInput.classList.add('wrong');
}
} else {
if (distanceInput.classList.contains('wrong')) {
distanceInput.classList.remove('wrong');
}
if (!isNaN(valueFloat)) {
if (!lockedDistance) {
lockedDistance = [firstLatLng!, secondLatLng!, 0.0];
state.distances.push(lockedDistance);
}
lockedDistance[2] = valueFloat;
}
}
}
});
};
};
distanceInput.addEventListener('input', createInputFunction(firstLatLng, secondLatLng));
function createBlurFunction(distance: number, wasUnchanged: boolean, firstLatLng: LatLng | undefined, secondLatLng: LatLng | undefined) {
return function (event: Event) {
let distanceInput = event.target;
if (!(distanceInput instanceof HTMLInputElement)) {
return;
}
let lockedDistance = state.distances.find(
d => (d[0] == firstLatLng && d[1] == secondLatLng)
|| (d[0] == secondLatLng && d[1] == firstLatLng)
);
if (distanceInput.value == '') {
distanceInput.value = distance.toFixed(3);
if (wasUnchanged) {
distanceInput.classList.add('unchanged');
state.distances = state.distances.filter(tuple => tuple != lockedDistance);
} else if (lockedDistance) {
lockedDistance[2] = distance;
}
}
};
};
distanceInput.addEventListener('blur', createBlurFunction(distance, wasUnchanged, firstLatLng, secondLatLng));
}
}
}