Skip to content

Commit 8ff39fb

Browse files
form improvements with new types of field: header and switch
1 parent f205b65 commit 8ff39fb

2 files changed

Lines changed: 43 additions & 1 deletion

File tree

examples/official-site/sqlpage/migrations/01_documentation.sql

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,24 @@ When loading the page, the value for `:username` will be `NULL` if no value has
347347
json('[{"component":"form"}, '||
348348
'{"name": "Your account", "prefix_icon": "mail", "prefix": "Email:", "suffix": "@mydomain.com"}, ' ||
349349
']')),
350+
351+
('form','With the header type, you can group your input fields based on a theme. For example, you can categorize fields according to a person''s identity and their contact information.',
352+
json('[{"component":"form","title":"Information about the person"}, '||
353+
'{"type": "header", "label": "Identity"},' ||
354+
'{"name": "Name"},' ||
355+
'{"name": "Surname"},' ||
356+
'{"type": "header","label": "Contact"},' ||
357+
'{"name": "phone", "label": "Phone number"},' ||
358+
'{"name": "Email"},' ||
359+
']')),
360+
361+
('form','A toggle switch in an HTML form is a user interface element that allows users to switch between two states, typically "on" and "off." It visually resembles a physical switch and is often used for settings or options that can be enabled or disabled.',
362+
json('[{"component":"form"}, '||
363+
'{"type": "switch", "label": "Dark theme", "description": "Enable dark theme"},' ||
364+
'{"type": "switch", "label": "A required toggle switch", "required": true},' ||
365+
'{"type": "switch", "label": "A disabled toggle switch", "disabled": true},' ||
366+
']')),
367+
350368
('form', 'This example illustrates the use of the `select` type.
351369
In this select input, the various options are hardcoded, but they could also be loaded from a database table,
352370
[using a function to convert the rows into a json array](/blog.sql?post=JSON%20in%20SQL%3A%20A%20Comprehensive%20Guide) like

sqlpage/templates/form.handlebars

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
{{/if}}
1616
<div class="row">
1717
{{#each_row}}
18+
{{#if (eq type "header")}}
19+
<h3 class="text-center mb-2"{{#if id}} id="{{id}}"{{/if}}>{{label}}</h3>
20+
{{else}}
1821
{{#if (or (eq type "radio") (eq type "checkbox"))}}
1922
<div class="form-selectgroup form-selectgroup-boxes d-flex flex-column mx-0 my-1 col-md-{{default width 12}}">
2023
<label class="form-selectgroup-item flex-fill mx-0">
@@ -39,6 +42,25 @@
3942
</label>
4043
</div>
4144
{{else}}
45+
{{~#if (eq type "switch")}}
46+
<div class="form-selectgroup form-selectgroup-boxes d-flex flex-column mx-0 my-1 col-md-{{default width 12}}">
47+
<label class="form-check form-switch">
48+
<input class="form-check-input" type="checkbox" {{#if id}}id="{{id}}" {{/if}}name="{{name}}" value="{{value}}"{{#if required}} required{{/if}}{{#if checked}} checked{{/if}}{{#if disabled}} disabled{{/if~}}/>
49+
<span class="form-check-label">
50+
{{default label value}}
51+
{{~#if required}}
52+
<span class="text-danger ms-1" aria-label="required" title="required">*</span>
53+
{{/if}}
54+
{{#if description}}
55+
<small class="form-hint mt-0">{{description}}</small>
56+
{{/if}}
57+
{{#if description_md}}
58+
<small class="form-hint mt-0">{{{markdown description_md}}}</small>
59+
{{/if}}
60+
</span>
61+
</label>
62+
</div>
63+
{{else}}
4264
{{~#if (eq type "hidden")}}
4365
<input type="hidden" name="{{name}}" {{#if id}}id="{{id}}" {{/if}}value="{{value}}">
4466
{{else}}
@@ -129,9 +151,11 @@
129151
{{~#if description_md~}}
130152
<small class="form-hint mt-0">{{{markdown description_md}}}</small>
131153
{{~/if~}}
132-
</label>
154+
</label>
133155
{{~/if~}}
134156
{{/if}}
157+
{{/if}}
158+
{{/if}}
135159
{{#if (eq type "file")}}
136160
<!-- Change the form encoding type if this is a file input-->
137161
{{#delay}}formenctype="multipart/form-data"{{/delay}}

0 commit comments

Comments
 (0)