if (['checkbox', 'radio'].indexOf(field.type) > -1 && !field.checked) return;
if (typeof field.value === 'undefined' || field.value === '') return;
+ // Default value for /search endpoint
+ if (field.name === 'dedupe' && (field.value === 1 || field.value === '1')) return;
+
params.set(field.name, field.value);
});
return params;
}
+
+ // https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/HTML5/Constraint_validation
+ // doesn't support hidden fields, so we check those in an extra step
+ function validate_field(field) {
+ if (field.type === 'hidden') {
+ if (field.value.length) {
+ if (field.pattern && !field.value.match(field.pattern)) return false;
+ }
+ }
+ return field.checkValidity(); // for hidden field always true
+ }
+
+ function handle_submit(event) {
+ let form = event.target;
+
+ let allow_submit = true;
+
+ Array.prototype.slice.call(form.elements).forEach(function (field) {
+ if (!validate_field(field)) {
+ alert('Invalid input in ' + field.name);
+ allow_submit = false;
+ }
+ });
+
+ if (allow_submit) refresh_page(page, serialize_form(form));
+ }
</script>
-<form on:submit|preventDefault={(e) => refresh_page(page, serialize_form(e.target))} class="form-inline" role="search" accept-charset="UTF-8" action="">
- <slot></slot>
+<form on:submit|preventDefault={handle_submit}
+ class="form-inline"
+ role="search"
+ accept-charset="UTF-8"
+ action="">
+ <div class="row g-2">
+ <slot></slot>
+ </div>
</form>