This repository has been archived on 2024-08-06. You can view files and clone it, but cannot push or open issues or pull requests.
comicinfo-editor-v2/src/lib/IntegerInput.svelte

45 lines
1.3 KiB
Svelte
Raw Normal View History

2023-10-11 21:17:03 +02:00
<script lang="ts">
export let id: string;
export let value: number;
export let negative = false;
2023-10-11 23:04:07 +02:00
export let defaultValue = 0;
if (typeof value === "undefined") {
value = defaultValue;
}
2023-10-11 21:17:03 +02:00
function inputInteger(event: Event & {currentTarget: (EventTarget & HTMLInputElement)}) {
let newValue = event.currentTarget.value;
if (newValue.startsWith("0") && newValue.length > 1) {
newValue = newValue.slice(1, newValue.length)
}
2023-10-11 23:04:07 +02:00
if (newValue != "" && !isNaN(Number(newValue))) {
2023-10-11 21:17:03 +02:00
value = Number(newValue);
}
else if (negative && newValue.startsWith("-")) {
if (isNaN(Number(newValue.slice(1, newValue.length)))) {
event.currentTarget.value = value.toString();
}
}
else if (newValue === "") {
2023-10-11 23:04:07 +02:00
event.currentTarget.value = defaultValue.toString();
value = defaultValue;
2023-10-11 21:17:03 +02:00
}
else {
event.currentTarget.value = value.toString();
}
}
</script>
<input {id} type="text" class="digitInput" style="--valuelen: {value.toString().length + 3}ch" on:input|preventDefault={inputInteger} {value}>
<style>
.digitInput {
width: var(--valuelen);
padding-left: 1ch;
}
</style>