forked from andrewcmyers/civs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcivs_create.html.pt
executable file
·293 lines (276 loc) · 12.7 KB
/
civs_create.html.pt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<title>Condorcet Internet Voting Service</title>
<link rel="stylesheet" type="text/css" href="@CIVSURL@/style.css" />
<link href="@CIVSURL@/images/check123b.png" rel="shortcut icon">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<script type="text/javascript">
function trim(str)
{
return str.replace(/^\s+|\s+$/g, '')
}
function validateEmail(str) // element to be validated
{
var str = trim(str); // value of field with whitespace trimmed off
var email = /^[^@]+@[^@.]+\.[^@]*\w\w$/
return email.test(str);
}
function validate() {
var numerrs = 0;
var errs = new Array;
if (!validateEmail(document.forms.CreateElection.email_addr.value)) {
errs[numerrs++] = 'O e-mail do supervisor é inválido.';
}
if (!(document.forms.CreateElection.num_winners.value >= 1)) {
errs[numerrs++] = 'Deve haver no mínimo um vencedor.';
}
if (document.forms.CreateElection.proportional.checked &&
!(document.forms.CreateElection.num_winners.value > 1)) {
errs[numerrs++] =
'A representação proporcional requer no mínimo um vencedor.';
}
if (document.forms.CreateElection.choices.value == '' &&
document.forms.CreateElection.choices_file.value == '') {
errs[numerrs++] = 'Deve haver no mínimo duas opções para a votação.';
}
if (document.forms.CreateElection.restrict_results.checked) {
var rs = document.forms.CreateElection.result_addrs.value;
var ra = rs.split(/[\r\n]+/g);
var nr = 0;
for (i = 0; i < ra.length; i++) {
if (ra[i] == '') continue;
if (!validateEmail(ra[i])) {
errs[numerrs++] =
'O e-mail do destinatário dos resultados é inválido: ' + ra[i];
} else {
nr++;
}
}
if (nr == 0) {
errs[numerrs++] =
'Você não indicou nenhum usuário que possa consultar o resultado da votação.';
}
}
if (numerrs == 0) return true;
if (numerrs == 1) {
alert(errs[0]);
} else {
var msg = 'Erros:\n';
for (i = 0; i < numerrs; i++) {
msg += (i+1);
msg += '. ';
msg += errs[i];
msg += "\n";
}
alert(msg);
}
return false;
}
function render_text(prefix, ta_id, span_id, clss) {
var span = document.getElementById(span_id);
var ta = document.getElementById(ta_id);
span.innerHTML = prefix + '<div class="' + clss + '">' + ta.value + "</div>";
return 1;
}
function render_list(ta_id, span_id) {
var span = document.getElementById(span_id);
var ta = document.getElementById(ta_id);
var names = ta.value.split(/[\r\n]+/g);
var html = "";
for (i = 0; i < names.length; i++) {
if (names[i] != "")
html = html + "<li>" + names[i] + "</li>";
}
span.innerHTML = "<ul>" + html + "</ul>";
return 1;
}
function make_invisible(id) {
document.getElementById(id).style.display = 'none'
}
function make_visible(id) {
document.getElementById(id).style.display = 'block'
}
</script>
</head>
<body>
<table class="banner" border="0" width="100%" cellspacing="0" cellpadding="7">
<tbody><tr>
<td width="100%" valign="top" nowrap>
<h1> Serviço de Votação Condorcet pela Internet (CIVS)</h1>
</td>
<td width=0% nowrap valign=top align=right>
<a href="@CIVSHOME@">Sobre o CIVS</a><br>
<a href="@CIVSURL@/publicized_polls.html">Votações públicas</a><br>
<a class="here" href="@CIVSURL@/civs_create.html">Criar uma nova votação</a><br>
<a href="@CIVSURL@/sec_priv.html">Sobre segurança e privacidade</a><br>
<a href="@CIVSURL@/faq.html">Perguntas frequentes</a>
</td>
</tr>
<tr>
<td width="100%" valign="top" nowrap colspan=2>
<h2 align="center">Criar uma nova votação</h2>
</td>
</tr>
</tbody>
</table>
<div class="contents">
<form method="POST"
action="@CIVSBINURL@/create_election@PERLEXT@"
enctype="multipart/form-data"
accept-charset="UTF-8"
name="CreateElection"
onsubmit="return validate()">
<table class="form">
<tr>
<td align=right>Nome da votação (p. ex., <b>Representante para o Colegiado</b>):</td>
<td><input type="text" name="title" size="50"></td>
<tr>
<td align=right>Nome do supervisor (você):</td>
<td><input type="text" name="name" size="20">
</td>
<tr>
<td align=right>E-mail do supervisor:</td>
<td><input type="text" name="email_addr" size="20"
onchange="if (!validateEmail(this.value)) { alert('E-mail inválido') }" >
</td>
</tr>
<tr>
<td valign=top align=right>Data e hora de encerramento da votação:<br>
<small>(<b>Obs.:</b> votações devem ser encerradas manualmente)</small>
</td>
<td><input type="text" name="election_end" id="election_end" size="30"
onchange="render_text('<br><i>Visualizar</i>: Encerramento da votação ', 'election_end', 'rendered_end', 'poll_end', 'poll_end_preview')">
<span class="rendering" id="rendered_end"></span>
</td>
</tr>
</table>
<div class="emphasized">
Seu nome e endereço de e-mail são usados para envio de e-mail aos
eleitores. Seu nome deve ser conhecido pelos eleitores e seu
e-mail deve ser válido, pois o CIVS enviará a você toda a
informação necessária para controlar a votação. Certifique-se de
que seu filtro de spam não bloqueie e-mails de <kbd>@SUPERVISOR@</kbd>
(ou verifique sua caixa de spam se não receber a mensagem do CIVS!).
</div>
<p>Descrição da votação e opções disponíveis (você pode incluir tags HTML):<br>
<table class="form">
<tr>
<td><textarea id="description" valign="top" rows="5" name="description" cols="60"></textarea>
</td>
<td><input type="button" value="Visualizar ▸"
onClick="render_text('<h2>Descrição da votação</h2>',
'description',
'rendered_description',
'description')"></td>
<td valign="top"><span class="rendering" id="rendered_description"></span></td>
</tr>
</table>
</p>
<p>Digite as opções (candidatos), uma por linha,
ou faça upload de um arquivo contendo todas as opções:</p>
<p align="left">
<table class="form">
<tr><td>
<textarea rows="5" name="choices" cols="60" id="choices"></textarea></td>
<td>
<td><input type="button" value="Visualizar ▸"
onClick="render_list('choices', 'rendered_choices')"></td>
<td valign="top"><span class="rendering" id="rendered_choices"></span></td>
</tr>
</table>
</p>
<p align="left"><input type=file name="choices_file"></p>
<p>Quantas opções vencerão: <input type="text" name="num_winners" size="5" value="1"></p>
<p>E-mails de até 1000 eleitores, um por linha.
É possível adicionar eleitores mais tarde.</p>
<p><textarea rows="2" name="addresses" cols="50"></textarea></p>
<p><input type=file name="addresses_file"></p>
<h3>Mais configurações <small>(passe o mouse sobre cada caixa de opção para ver mais informações)</small></h3>
<input type="checkbox" name="public" value="yes"
onClick="make_visible('publicize')"
title="Em uma votação pública, você receberá uma única URL para uso de todos os eleitores. Esta URL poderá ser enviada a listas de e-mail. Para evitar que um eleitor vote várias vezes, o CIVS verifica apenas o endereço IP do eleitor. Se você quer garantir que os eleitores votem apenas uma vez, é preverível fazer uma votação privada.">
Habilitar como votação pública.
<div class="suboption" id="publicize">
<input type="checkbox" name="publicize" value="yes"
title="CIVS irá anunciar esta votação na sua lista de votações públicas e possivelmente em outros locais. Quem visualizar a lista será capaz de votar.">
Permitir que o CIVS anuncie esta votação.
</div>
<div>
<input type="checkbox" name="external_ballots" value="yes"
title="Marque esta opção se você desejar fazer upload dos votos. Eleitores não podem votar neste tipo de votação. Esta opção é útil se você quiser entender como funcionam os métodos de votação, ou se você obtiver os votos de outras fontes externas ao CIVS.">
Habilitar como votação de teste: leitura de votos a partir de um arquivo.
</div>
<div>
<input type="checkbox" name="restrict_results" value="yes"
onClick="make_visible('rrcontrol')"
title="Por padrão, os resultados da votação podem ser vistos por todos os eleitores. Se você quiser restringir os resultados a algum outro grupo de pessoas, use esta opção.">
Divulgar os resultados somente a alguns usuários.
<div class="suboption" id="rrcontrol">
Digite os e-mails de usuários habilitados a visualizar o resultado da votação:
(todos os eleitores poderão ver esses e-mails)
<br>
<textarea rows="2" name="result_addrs" cols="50"></textarea>
</div>
</div>
<div>
<input type="checkbox" name="ballot_reporting" value="yes"
onClick="make_visible('reveal_voters')"
title="Esta opção permite que qualquer participante da votação veja os detalhes de cada voto. Entretanto, a identificação dos eleitores não é revelada a não ser que esta opção seja habilitada.">
Habilitar relatório detalhado de votos.
<div class="suboption" id="reveal_voters">
<input type="checkbox" name="reveal_voters" value="yes">
No relatório detalhado de votos, revele também a identidade do eleitor.<br>
Com esta opção, eleitores <i class="warning">não</i> ficarão anônimos e o sistema
não irá descartar os e-mails de eleitores como normalmente é feito. Os eleitores
serão advertidos sobre esta falta de anonimato.
</div>
</div>
<div>
<input type="checkbox" name="writeins" value="yes"
title="Você pode permitir que eleitores indiquem novas opções de candidatos. Entretanto, novos candidatos estarão em desvantagem se forem adicionados após a votação começar. Assim, quando esta opção for selecionada, haverá uma fase de indicação de novos candidatos, durante a qual os eleitores não poderão votar. O supervisor deverá habilitar a votação explicitamente.">
Permitir que eleitores indiquem outras opções.
</div>
<div>
<input type="checkbox" name="shuffle" value="no"
title="Por padrão, a página de votação mostra as opções em uma ordem aleatória para cada eleitor. Para algumas votações, como por exemplo para escolha de um horário de reunião, é mais conveniente que os eleitores vejam as opções exatamente na ordem em que foram especificadas.">
Mostrar opções na página de votação exatamente na ordem especificada.
</div>
<div>
<input type="checkbox" name="no_opinion" value="yes"
title="A opção "abstenção" pode ter efeitos inesperados. Consulte a seção de Perguntas Frequentes para saber como usar corretamente esta opção e informe os eleitores sobre esta configuração.">
Permitir que eleitores escolham “abstenção” para algumas opções.<br>
<input type="checkbox" name="proportional" value="yes"
onClick="make_visible('prcontrol')"
title="O modo de representação proporcional é útil somente para eleições com múltiplos vencedores, onde deseja-se garantir que as preferências dos eleitores sejam expressas proporcionalmente. Em caso contrário, a maioria dos eleitores pode decidir todos os vencedores. O modo proporcional é muito mais lento que o modo não proporcional, e não deve ser usado em casos onde existam muitas opções e muitos vencedores. Na maioria dos casos, mas não em todos, os resultados dos modos proporcional e não-proporcional são os mesmos. Clique no link 'mais informações' para saber mais sobre como este modo funciona.">
Forçar representação proporcional [<a href="proportional.html">mais informações</a>]</br>
<div class="suboption" id="prcontrol">
Na representação proporcional, assume-se que os eleitores irão maximizar:<br>
<input type="radio" name="rating_interpretation"
value="best_choice"
checked> a classificação da sua opção favorita<br>
<input type="radio" name="rating_interpretation"
value="combined_ratings"> os pesos combinados das opções escolhidas<br>
</div>
</div>
<div class="emphasized">
Certifique-se de que seu endereço de e-mail esteja correto, pois as informações sobre a votação
serão enviadas a você por e-mail. Eleitores não serão informados sobre a existência da
votação enquanto você não responder a este e-mail.
</div>
<p style="margin-left: 5ex">
<input type="submit" value="Criar votação" name="submit">
</p>
</form>
</div>
<script type="text/javascript">
make_invisible('publicize');
make_invisible('prcontrol');
make_invisible('reveal_voters');
make_invisible('rrcontrol');
</script>
</body>
</html>