add initial version
This commit is contained in:
parent
836c15d320
commit
98dbe93f1f
2 changed files with 70 additions and 0 deletions
11
package.json
Normal file
11
package.json
Normal 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
59
validation.js
Normal 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;
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue