105 lines
4.2 KiB
Go Template
105 lines
4.2 KiB
Go Template
{{define "input"}}
|
||
<input style="padding: .375rem .75rem;" class="form-control{{if .Error}} is-invalid{{end}}" {{if .Type}}type="{{.Type}}" {{end}}name="{{.Name}}"
|
||
value="{{.Value}}" {{if .Required}}required {{end}}{{if .MinLength}}minlength="{{.MinLength}}" {{end}} aria-describedby="{{if .Error}}{{.Name}}Error{{end}}">
|
||
{{with .Error}}
|
||
<div id="{{$.Name}}Error" class="invalid-feedback">
|
||
{{.}}
|
||
</div>
|
||
{{else}}
|
||
<div style="margin-top: .25rem; font-size: .875em;">
|
||
|
||
</div>
|
||
{{end}}
|
||
{{end}}
|
||
|
||
{{define "head"}}
|
||
<title>Lishwist</title>
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
|
||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"
|
||
integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
|
||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"
|
||
integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz"
|
||
crossorigin="anonymous"></script>
|
||
|
||
<script>
|
||
function getSubmissionNames(form) {
|
||
return Array.from(new FormData(form).keys());
|
||
}
|
||
function acceptNames(form, submitId, ...acceptedNames) {
|
||
const submissionNames = getSubmissionNames(form);
|
||
const submitter = document.getElementById(submitId);
|
||
const accepted = submissionNames.length > 0 && submissionNames.every((name) => acceptedNames.includes(name));
|
||
submitter.disabled = !accepted;
|
||
}
|
||
function acceptAttribute(form, submitId, acceptedAttribute) {
|
||
const checkedInputs = Array.from(form.querySelectorAll("input")).filter((i) => i.checked);
|
||
const submitter = document.getElementById(submitId);
|
||
const accepted = checkedInputs.length > 0 && checkedInputs.every((i) => i.hasAttribute(acceptedAttribute));
|
||
submitter.disabled = !accepted;
|
||
}
|
||
</script>
|
||
{{end}}
|
||
|
||
{{define "navbar"}}
|
||
<div class="navbar navbar-expand-lg bg-body-tertiary">
|
||
<div class="container-fluid">
|
||
<div class="navbar-brand">Lishwist</div>
|
||
{{with .}}
|
||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarToggle"
|
||
aria-controls="navbarToggle" aria-expanded="false" aria-label="Toggle navigation">
|
||
<span class="navbar-toggler-icon"></span>{{if and .AccountLink .AccountLink.Alert}} <span
|
||
class="badge text-bg-danger">!</span>{{end}}
|
||
</button>
|
||
<div class="collapse navbar-collapse" id="navbarToggle">
|
||
{{with .Links}}
|
||
<nav>
|
||
<ul class="navbar-nav">
|
||
{{range .}}
|
||
<li class="nav-item">
|
||
<a class="nav-link" href="{{.Href}}">{{.Name}}</a>
|
||
</li>
|
||
{{end}}
|
||
</ul>
|
||
</nav>
|
||
{{end}}
|
||
<div class="flex-grow-1"></div>
|
||
{{with .User}}
|
||
<ul class="navbar-nav">
|
||
{{with .CopyList}}
|
||
<li class="nav-item"><button class="btn btn-success"
|
||
onclick="navigator.clipboard.writeText('{{.Domain}}/lists/{{.Reference}}'); alert('The share link to your wishlist has been copied to your clipboard. Anyone with the link will be able to claim gifts for you. Share it with someone!');">Copy
|
||
share link</button></li>
|
||
{{end}}
|
||
<li class="nav-item">
|
||
<div class="dropdown">
|
||
<button class="nav-link dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
|
||
Logged in as '{{.Name}}'
|
||
</button>
|
||
<ul class="dropdown-menu">
|
||
{{with $.AccountLink}}
|
||
<li>
|
||
<a class="dropdown-item" href="/account">Account{{if .Alert}} <span
|
||
class="badge text-bg-danger">!</span>{{end}}</a>
|
||
</li>
|
||
{{end}}
|
||
<li>
|
||
<form class="d-contents" method="post" action="/logout">
|
||
<button class="dropdown-item" type="submit">Logout</button>
|
||
</form>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
{{end}}
|
||
</div>
|
||
{{end}}
|
||
</div>
|
||
</div>
|
||
{{end}}
|
||
|
||
{{define "login_prompt"}}
|
||
<a href="/">Login</a> or <a href="/register">register</a>
|
||
{{end}}
|