2 import { refresh_page } from '../lib/stores.js';
3 import { SvelteURLSearchParams } from 'svelte/reactivity';
5 let { page, content } = $props();
7 function serialize_form(form) {
8 var params = new SvelteURLSearchParams();
10 Array.prototype.slice.call(form.elements).forEach(function (field) {
11 if (!field.name || field.disabled || ['submit', 'button'].indexOf(field.type) > -1) return;
13 if (['checkbox', 'radio'].indexOf(field.type) > -1 && !field.checked) return;
14 if (typeof field.value === 'undefined' || field.value === '') return;
16 // Default value for /search endpoint
17 if (field.name === 'dedupe' && (field.value === 1 || field.value === '1')) return;
19 params.set(field.name, field.value);
25 // https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/HTML5/Constraint_validation
26 // doesn't support hidden fields, so we check those in an extra step
27 function validate_field(field) {
28 if (field.type === 'hidden') {
29 if (field.value.length) {
30 if (field.pattern && !field.value.match(field.pattern)) return false;
33 return field.checkValidity(); // for hidden field always true
36 function handle_submit(event) {
37 event.preventDefault();
39 let form = event.target;
41 let allow_submit = true;
43 Array.prototype.slice.call(form.elements).forEach(function (field) {
44 if (!validate_field(field)) {
45 alert('Invalid input in ' + field.name);
50 if (allow_submit) refresh_page(page, serialize_form(form));
54 <form onsubmit={handle_submit}
57 accept-charset="UTF-8"