Fichier votetexts.py

# -*- mode: python -*-
# -*- coding: utf-8 -*-

# Miscellaneous messages used by voteano

TXT_ENCODING = 'utf-8' # must be consistent with the encoding of this file

BALLOT_MESSAGE = """BULLETIN DE VOTE ELECTRONIQUE

Pour voter, cliquez sur ce lien:

%(url)s?eid=%(eid)s

Le vote est anonyme, si vous faites confiance à l'administrateur du serveur.
"""

HTML_VOTE_FORM = """

"""

HTML_HEADER = """<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Vote électronique</title>
<script type="text/javascript" src="/jquery-1.3.2.min.js"></script>
<style type="text/css">
body {
   margin: 20px;
   background-color: #DDDDDD;
   font-size: 120%;
}
div.votecb, div.votecb_abs {
   margin-left: 30px;
   margin-bottom: 10px;
}
#submit {
   font-size: 130%;
   margin-top: 20px;
   margin-left: 10px;
}
div.bulletin {
   border-width: 1px;
   border-style: solid;
   padding-left: 10px;
}
p.expl {
   font-size: 80%;
   font-style: italic;
}
</style>
"""

HTML_FOOTER = """

<p class="descr">
Election lancée par Emmanuel Viennet le 1er juin 2009.
<span style="color:red;">Fin du scrutin le 2 juin 2009 à minuit.</span>
</p>

<p class="expl">
Système de vote anonyme. Attention: un administrateur système ou réseaux malhonnête pourrait le trafiquer pour observer ou modifier votre vote. Code source disponible sur <a href="http://www-l2ti.univ-paris13.fr/~viennet/codes.shtml">le site de l'auteur</a>.
</p>
</body></html>"""

HTML_VOTE_FORM = """
<h2>Vote électronique</h2>
<div class="bulletin">
<p>Cocher <span style="color:red;">deux candidats</span> pour la commission ATER:</p>
<form id="voteform" method="get" action="vote">
<input type="hidden" name="eid" value="%(eid)s"/>

<div class="votecb"><input type="checkbox" name="vote" value="1"/>
<i>Motecuhzoma Xocoyotzin</i></div>
<div class="votecb"><input type="checkbox" name="vote" value="2"/>
<i>Hernán Cortés</i></div>
<div class="votecb"><input type="checkbox" name="vote" value="3"/>
<i>Álvar Núñez Cabeza de Vaca</i></div>

<div class="votecb_abs">
<p>Ou bien abstenez-vous:
<input type="checkbox" name="vote" value="0"></input>
</p>
</div>

<p>Puis cliquez sur le bouton:
<input type="submit" name="submit" id="submit" value="Voter !"/>
</p>
</div>

</form>
"""

#
# Code client: vérifie qu'il y a soit N choix cochés, soit abstention
#
SCRIPT_VOTE = """
<script type="text/javascript">

NB_CHOICES = 2;

$(function(){

$("#voteform .votecb_abs input").bind('click', function(event) {
   /* click sur abstention */
   if ( $("#voteform .votecb_abs input")[0].checked ) {
      deselect_all();
   }
});

$("#voteform .votecb input").bind('click', function(event) {
   /* click sur choix */
   if ( event.target.checked ) {
      $("#voteform .votecb_abs input")[0].checked = false;
   }
   /* limite nombre choix */
   var elems = $("#voteform .votecb input");
   if (nb_checked() >= NB_CHOICES) {
      for (var i = 0 ; i < elems.length; i++) {
          if (! elems[i].checked) {
              elems[i].disabled = true;
          }
      }
   } else {
     for (var i = 0 ; i < elems.length; i++) {
         elems[i].disabled = false;
     }
   }
});

$("#voteform").bind('submit', function(event) {
   if (nb_checked() == 0 && $("#voteform .votecb_abs input")[0].checked) {
      return true; /* abstention */
   }
   if (nb_checked() != NB_CHOICES) {
      alert("Nombre de choix incorrect !");
      return false;
   }
});

});

function nb_checked() {
  var elems = $("#voteform .votecb input");
  var n = 0;
  for (var i = 0 ; i < elems.length; i++ ) {
    if (elems[i].checked) {
     n++;
    }
  }
  return n;
}

function deselect_all() {
  var elems = $("#voteform .votecb input");
  for (var i = 0 ; i < elems.length ; i++ ) {
    elems[i].checked = false;
    elems[i].disabled = false;
  }
}


</script>
"""