2023-12-12 09:58:20 +00:00
|
|
|
<!doctype html>
|
|
|
|
<html>
|
|
|
|
<head>
|
|
|
|
<meta charset="utf8">
|
2024-01-18 17:23:50 +00:00
|
|
|
{{#if BASE}}
|
|
|
|
<base href="{{ BASE }}">
|
|
|
|
{{/if}}
|
2024-01-24 16:14:34 +00:00
|
|
|
<title>{{ TITLE }}</title>
|
|
|
|
<link rel="icon" type="image/x-icon" href="icons/favicon.png" />
|
2023-12-12 09:58:20 +00:00
|
|
|
<script src="forms/grist-form-submit.js"></script>
|
|
|
|
<script src="forms/purify.min.js"></script>
|
2024-01-23 20:52:57 +00:00
|
|
|
<script>
|
|
|
|
// Make all links open in a new tab.
|
|
|
|
DOMPurify.addHook('uponSanitizeAttribute', (node) => {
|
|
|
|
if (!('target' in node)) { return; }
|
|
|
|
node.setAttribute('target', '_blank');
|
|
|
|
// Make sure that this is set explicitly, as it's often set by the browser.
|
|
|
|
node.setAttribute('rel', 'noopener');
|
|
|
|
});
|
|
|
|
</script>
|
2024-01-18 17:23:50 +00:00
|
|
|
<link rel="stylesheet" href="forms/form.css">
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
2023-12-12 09:58:20 +00:00
|
|
|
</head>
|
|
|
|
|
|
|
|
<body>
|
|
|
|
<main class='grist-form-container'>
|
|
|
|
<form class='grist-form'
|
2024-01-18 17:23:50 +00:00
|
|
|
onsubmit="event.target.parentElement.querySelector('.grist-form-confirm').style.display = 'flex', event.target.style.display = 'none'"
|
|
|
|
data-grist-doc="{{ DOC_URL }}"
|
|
|
|
data-grist-table="{{ TABLE_ID }}"
|
|
|
|
data-grist-success-url="{{ SUCCESS_URL }}"
|
|
|
|
>
|
|
|
|
{{ dompurify CONTENT }}
|
|
|
|
<div class="grist-power-by">
|
|
|
|
<a href="https://getgrist.com" target="_blank">
|
|
|
|
<div>Powered by</div>
|
|
|
|
<div class="grist-logo"></div>
|
|
|
|
</a>
|
|
|
|
</div>
|
2023-12-12 09:58:20 +00:00
|
|
|
</form>
|
2024-01-24 09:58:19 +00:00
|
|
|
|
|
|
|
<div class="grist-form-confirm-container">
|
|
|
|
<div class='grist-form-confirm' style='display: none'>
|
|
|
|
<div class="grist-form-confirm-body">
|
|
|
|
<img class='grist-form-confirm-image' src="forms/form-submitted.svg">
|
|
|
|
<div class='grist-form-confirm-text'>
|
|
|
|
{{ SUCCESS_TEXT }}
|
|
|
|
</div>
|
|
|
|
{{#if ANOTHER_RESPONSE }}
|
|
|
|
<div class='grist-form-confirm-buttons'>
|
|
|
|
<button
|
|
|
|
class='grist-form-confirm-new-response-button'
|
|
|
|
onclick='window.location.reload()'
|
|
|
|
>
|
|
|
|
Submit new response
|
|
|
|
</button>
|
|
|
|
</div>
|
|
|
|
{{/if}}
|
|
|
|
</div>
|
|
|
|
<div class='grist-form-confirm-footer'>
|
|
|
|
<div class="grist-power-by">
|
|
|
|
<a href="https://www.getgrist.com" target="_blank">
|
|
|
|
<div>Powered by</div>
|
|
|
|
<div class="grist-logo"></div>
|
|
|
|
</a>
|
|
|
|
</div>
|
|
|
|
<div class='grist-form-confirm-build-form'>
|
2024-01-24 17:19:18 +00:00
|
|
|
<a class='grist-form-confirm-build-form-link' href="https://www.getgrist.com" target="_blank">
|
2024-01-24 09:58:19 +00:00
|
|
|
Build your own form
|
|
|
|
<div class="grist-form-icon grist-form-icon-expand"></div>
|
|
|
|
</a>
|
|
|
|
</div>
|
|
|
|
</div>
|
2024-01-18 17:23:50 +00:00
|
|
|
</div>
|
2023-12-12 09:58:20 +00:00
|
|
|
</div>
|
|
|
|
</main>
|
2024-01-18 17:23:50 +00:00
|
|
|
<script>
|
|
|
|
// Validate choice list on submit
|
|
|
|
document.querySelector('.grist-form input[type="submit"]').addEventListener('click', function(event) {
|
|
|
|
// When submit is pressed make sure that all choice lists that are required
|
|
|
|
// have at least one option selected
|
2024-01-23 20:52:57 +00:00
|
|
|
const choiceLists = document.querySelectorAll('.grist-checkbox-list.required:not(:has(input:checked))');
|
2024-01-18 17:23:50 +00:00
|
|
|
Array.from(choiceLists).forEach(function(choiceList) {
|
|
|
|
// If the form has at least one checkbox make it required
|
|
|
|
const firstCheckbox = choiceList.querySelector('input[type="checkbox"]');
|
|
|
|
firstCheckbox?.setAttribute('required', 'required');
|
|
|
|
});
|
|
|
|
|
|
|
|
// All other required choice lists with at least one option selected are no longer required
|
2024-01-23 20:52:57 +00:00
|
|
|
const choiceListsRequired = document.querySelectorAll('.grist-checkbox-list.required:has(input:checked)');
|
2024-01-18 17:23:50 +00:00
|
|
|
Array.from(choiceListsRequired).forEach(function(choiceList) {
|
|
|
|
// If the form has at least one checkbox make it required
|
|
|
|
const firstCheckbox = choiceList.querySelector('input[type="checkbox"]');
|
|
|
|
firstCheckbox?.removeAttribute('required');
|
|
|
|
});
|
|
|
|
});
|
|
|
|
</script>
|
2023-12-12 09:58:20 +00:00
|
|
|
</body>
|
|
|
|
|
|
|
|
</html>
|