Newer
Older
Position int
Name string
Title string
Sentence string
MinChoices int
MaxChoices int
VoteCount int
VoteOpen bool
VotedAlready bool
VoteError string
VoterPrivateToken string
VoterPublicId string
VoterFullname string
Answers []TemplateAnswer
TotalVoteCount int
Sentence string
VoteCount int
}
const TEMPLATE_CHOICE_STR = `<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vote Électrolab - {{.Title}}</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<script type="text/javascript">
function checkForm() {
{{ if not .VoteOpen }}
return false;
{{ else }}
var nbOfAnswers = 0;
var answers = document.getElementsByName("answer");
for (var i=0; i<answers.length; i++) {
if (answers[i].checked) {
nbOfAnswers++;
}
if (nbOfAnswers < {{.MinChoices}}) {
alert("Vous devez sélectionner au minimum {{.MinChoices}} réponse(s)");
return false;
}
if ({{.MaxChoices}} >=0 && (nbOfAnswers > {{.MaxChoices}})) {
alert("Vous devez sélectionner au maximum {{.MinChoices}} réponse(s)");
return false;
}
return confirm("Tout vote est définitif. Cliquez sur OK pour valider le vote.");
{{ end }}
<style type="text/css">
.vote-page {
padding: 1em;
max-width:50em;
}
</style>
<div class="vote-page">
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item" aria-current="page"><a href="/?private_token={{.VoterPrivateToken}}">Événements</a></li>
<li class="breadcrumb-item" aria-current="page"><a href="/votes?private_token={{.VoterPrivateToken}}">AG Électrolab 2020</a></li>
<li class="breadcrumb-item active" aria-current="page">Vote nº{{.Position}} - {{.Title}}</li>
</ol>
</nav>
{{ if .VoteError }}
<p class="alert alert-danger">
Votre vote n'a pas pu être pris en compte!<br/>
Erreur lors de la procédure: {{.VoteError}}.
</p>
{{ end}}
{{ if .VotedAlready }}
<p>Votre vote a été enregistré. Vous pourrez rafraichir la page au moment de la cloture pour voir les résultats.</p>
{{ else }}
{{ if not .VoteOpen }}
<div class="alert alert-primary">Le vote n'est pas encore ouvert. Vous pourrez <a href="?private_token={{.VoterPrivateToken}}">rafraichir</a> la page au moment de l'ouverture pour voter.</div>
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<form id="answers_form" method="post" onsubmit="return checkForm();">
<label>
Liste des choix
{{ if (and (eq 1 $.MinChoices) (eq 1 $.MaxChoices)) }}
{{ else if (and (gt $.MinChoices 0) (ge $.MaxChoices 0)) }}
(cochez entre {{$.MinChoices}} et {{$.MaxChoices}} réponse{{ if gt $.MaxChoices 1 }}s{{end}})
{{ else if gt $.MinChoices 0 }}
(cochez au minimum {{$.MinChoices}} réponse{{ if gt $.MinChoices 1 }}s{{end}})
{{ else if ge $.MaxChoices 0 }}
(cochez au maximum {{$.MaxChoices}} réponse{{ if gt $.MaxChoices 1 }}s{{end}})
{{ end }}
:
</label>
<div class="form-group">
{{ range .Answers }}
<div class="form-check">
<input class="form-check-input" {{if .Checked}}checked{{end}} type="{{ if (and (eq 1 $.MinChoices) (eq 1 $.MaxChoices)) }}radio{{else}}checkbox{{end}}" id="answer_{{.Name}}" name="answer" value="{{.Name}}">
<label class="form-check-label" for="answer_{{.Name}}">{{.Sentence}}</label>
</div>
{{ end }}
</div>
{{ if .VoteOpen }}
<button type="button" class="btn btn-danger">Voter</button>
{{ end }}
</form>
{{ end }}
</div>