aboutsummaryrefslogtreecommitdiff
path: root/_www/src/InputAddress.svelte
diff options
context:
space:
mode:
Diffstat (limited to '_www/src/InputAddress.svelte')
-rw-r--r--_www/src/InputAddress.svelte48
1 files changed, 48 insertions, 0 deletions
diff --git a/_www/src/InputAddress.svelte b/_www/src/InputAddress.svelte
new file mode 100644
index 0000000..014004a
--- /dev/null
+++ b/_www/src/InputAddress.svelte
@@ -0,0 +1,48 @@
+<script>
+ export let value = "";
+ let isInvalid = false;
+ let error = "";
+
+ function onBlur() {
+ const ipport = value.split(":");
+ if (ipport.length !== 2) {
+ isInvalid = true;
+ return;
+ }
+ const ip = ipport[0];
+ if (ip.length > 0) {
+ const nums = ip.split(".");
+ if (nums.length != 4) {
+ isInvalid = true;
+ error = "invalid IP address";
+ return;
+ }
+ }
+ const port = parseInt(ipport[1]);
+ if (isNaN(port) || port <= 0 || port >= 65535) {
+ isInvalid = true;
+ error = "invalid port number";
+ return;
+ }
+ isInvalid = false;
+ value = ip +":"+ port;
+ }
+</script>
+
+<style>
+ .invalid {
+ color: red;
+ }
+</style>
+
+<div class="input-address">
+ <input
+ type="text"
+ bind:value={value}
+ on:blur={onBlur}
+ class:invalid={isInvalid}
+ >
+ {#if isInvalid}
+ <span class="invalid">{error}</span>
+ {/if}
+</div>