* Macro plus propre : 1 seul script au milieu du body
* Ajout du calcul du pourcentage * Ajout d'un afficheur pour le pourcentage et pour le maximum de point * Plusieurs zone d'affichage de score sont supporte darcs-hash:20070130221230-9e428-ed8afdef281a339462d4107c93cd4f60e75cb21d.gz
This commit is contained in:
parent
0a1f4dac53
commit
8f8675e92b
1 changed files with 92 additions and 35 deletions
|
@ -3,6 +3,18 @@
|
|||
|
||||
#generation d'une question de questionnaire si il y a des arguments, sinon affiche le résultat
|
||||
|
||||
class questionnaire:
|
||||
execute = 0
|
||||
liste_questions = []
|
||||
max_point = 0
|
||||
fonction_affiche = True
|
||||
|
||||
def int_try(point):
|
||||
try:
|
||||
return int(point)
|
||||
except ValueError :
|
||||
return 0
|
||||
|
||||
def parse(text):
|
||||
ligne = text.split("\\")
|
||||
question = []
|
||||
|
@ -12,59 +24,104 @@ def parse(text):
|
|||
question+=[(l[0],l[1])]
|
||||
return question
|
||||
|
||||
def question_choix_unique(f,QR):
|
||||
def question_choix_unique(f,QR,quest):
|
||||
r=""
|
||||
id = QR[0][0]
|
||||
r+=f.rawHTML("""<script type="text/javascript">
|
||||
var point_%(id)s = 0
|
||||
var point_globale = 0
|
||||
function ajoute_Q%(id)s(point)
|
||||
{
|
||||
point_globale = point_globale + point - point_%(id)s
|
||||
point_%(id)s = point
|
||||
document.getElementById('result').innerHTML = point_globale
|
||||
}
|
||||
</script>
|
||||
<p> %(Q)s </p>
|
||||
""" % { "id" : id , "Q" : QR[0][1]})
|
||||
r+=f.rawHTML("""
|
||||
<p> %(id)i : %(Q)s <br>
|
||||
""" % { "id" : quest.execute , "Q" : QR[0][1]})
|
||||
QR=QR[1:]
|
||||
max = 0
|
||||
for (point,rep) in QR:
|
||||
r+=f.rawHTML("""<input type="radio" name="radio%(id)s" onclick="ajoute_Q%(id)s(%(point)s)" > %(rep)s<br>\n"""% { "point" : point , "id" : id, "rep" : rep})
|
||||
point = int_try(point)
|
||||
if (max<point):
|
||||
max = point
|
||||
r+=f.rawHTML("""<input type="radio" name="radio%(id)i" onclick="ajoute(%(id)i,%(point)i)" > %(rep)s<br>\n"""% { "point" : point , "id" : quest.execute, "rep" : rep})
|
||||
quest.max_point += max
|
||||
r += f.rawHTML("\n</p>\n")
|
||||
return r
|
||||
|
||||
|
||||
def question_choix_multiple(f,QR):
|
||||
r=""
|
||||
id = QR[0][0]
|
||||
r+=f.rawHTML("""<script type="text/javascript">
|
||||
def question_choix_multiple(f,QR,quest):
|
||||
r = ""
|
||||
r +=f.rawHTML("<p> %(id)i : %(Q)s <br>\n" % { "id" : quest.execute , "Q" : QR[0][1]})
|
||||
QR=QR[1:]
|
||||
for (point,rep) in QR:
|
||||
point = int_try(point)
|
||||
quest.max_point += point
|
||||
r+=f.rawHTML("""<input type="checkbox" name="radio%(id)i" onclick="ajoute_multiple(%(point)i,this.checked)" > %(rep)s<br>\n"""% { "point" : point , "id" : quest.execute, "rep" : rep})
|
||||
r +=f.rawHTML("\n</p>\n")
|
||||
return r
|
||||
|
||||
def fonction_javascript(f,quest):
|
||||
if (quest.fonction_affiche==True):
|
||||
quest.fonction_affiche = False
|
||||
return f.rawHTML("""
|
||||
<script type="text/javascript">
|
||||
var point_globale = 0
|
||||
var pointQ = new Array(%(nb_quest)i)
|
||||
var i=0
|
||||
function update()
|
||||
{
|
||||
var result_p = document.getElementsByName('result_p')
|
||||
var point_result_p = Math.round(point_globale / %(max_point)i*10000)/100
|
||||
for (var i=0;i<result_p.length;i++)
|
||||
{
|
||||
result_p[i].innerHTML = point_result_p
|
||||
}
|
||||
var result = document.getElementsByName('result')
|
||||
for (var i=0;i<result.length;i++)
|
||||
{
|
||||
result[i].innerHTML = point_globale
|
||||
}
|
||||
}
|
||||
function ajoute_multiple(point,on)
|
||||
{
|
||||
if(on)
|
||||
{point_globale = point_globale + point}
|
||||
else
|
||||
{point_globale = point_globale - point}
|
||||
document.getElementById('result').innerHTML = point_globale
|
||||
if(on)
|
||||
{point_globale = point_globale + point}
|
||||
else
|
||||
{point_globale = point_globale - point}
|
||||
update()
|
||||
}
|
||||
</script>
|
||||
<p> %(Q)s </p>
|
||||
""" % { "id" : id , "Q" : QR[0][1]})
|
||||
QR=QR[1:]
|
||||
for (point,rep) in QR:
|
||||
r+=f.rawHTML("""<input type="checkbox" name="radio%(id)s" onclick="ajoute_multiple(%(point)s,this.checked)" > %(rep)s<br>\n"""% { "point" : point , "id" : id, "rep" : rep})
|
||||
return r
|
||||
function ajoute(id_Q,point)
|
||||
{
|
||||
if(isNaN(pointQ[id_Q])){pointQ[id_Q]=0}
|
||||
point_globale = point_globale + point - pointQ[id_Q]
|
||||
pointQ[id_Q] = point
|
||||
update()
|
||||
}
|
||||
</script>
|
||||
""" % {"max_point" : quest.max_point , "nb_quest" : quest.execute})
|
||||
else:
|
||||
return ""
|
||||
|
||||
def result(f,quest):
|
||||
return f.rawHTML("""<span name="result"> 0 </span>""")
|
||||
|
||||
def result(f):
|
||||
return """<span id="result"> 0 </span>"""
|
||||
def result_pourcent(f,quest):
|
||||
return f.rawHTML("""<span name="result_p"> 0 </span>""")
|
||||
|
||||
def result_max(f,quest):
|
||||
return f.text("%i" % quest.max_point)
|
||||
|
||||
def execute(macro,text):
|
||||
try:
|
||||
macro._macro_questionnaire.execute +=1
|
||||
except :
|
||||
macro._macro_questionnaire = questionnaire()
|
||||
|
||||
f = macro.formatter
|
||||
quest = macro._macro_questionnaire
|
||||
|
||||
if text == "":
|
||||
return result(f)
|
||||
return fonction_javascript(f,quest) + result(f,quest)
|
||||
elif text == "%":
|
||||
return fonction_javascript(f,quest) + result_pourcent(f,quest)
|
||||
elif text == "m":
|
||||
return fonction_javascript(f,quest) + result_max(f,quest)
|
||||
else:
|
||||
QR = parse(text)
|
||||
if QR[0][0][0]=='*':
|
||||
return question_choix_multiple(f,QR)
|
||||
return question_choix_multiple(f,QR,quest)
|
||||
else:
|
||||
return question_choix_unique(f,QR)
|
||||
return question_choix_unique(f,QR,quest)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue