1
Fork 0

add initial version

This commit is contained in:
Conduitry 2022-07-21 22:20:13 -04:00
parent 836c15d320
commit 98dbe93f1f
2 changed files with 70 additions and 0 deletions

11
package.json Normal file
View file

@ -0,0 +1,11 @@
{
"name": "@conduitry/svelte-tiny-validation",
"version": "0.0.0",
"description": "A tiny unframework for form validation in Svelte.",
"private": true,
"homepage": "https://git.chor.date/Conduitry/svelte-tiny-validation",
"type": "module",
"exports": {
".": "./validation.js"
}
}

59
validation.js Normal file
View file

@ -0,0 +1,59 @@
import { get, writable } from 'svelte/store';
export const field = (validator) => {
let node = null;
let value;
let message_enabled = false;
const validity = { valid: true, message: null };
const { set, subscribe } = writable(validity);
const update = () => {
const message = node && validator(value);
validity.valid = !message;
validity.message = message_enabled ? message : null;
set(validity);
};
const enable_message = () => {
message_enabled = true;
update();
};
const action = (new_node, new_value) => {
node = new_node;
value = new_value;
update();
node.addEventListener('blur', enable_message);
return {
update(new_value) {
value = new_value;
update();
},
destroy() {
node.removeEventListener('blur', enable_message);
node = null;
message_enabled = false;
update();
},
};
};
action.validate = () => node && enable_message();
action.subscribe = subscribe;
return action;
};
export const validate = (...fields) => {
let valid = true;
for (const field of fields) {
field.validate();
valid = valid && get(field).valid;
}
return valid;
};