Commit 2fff21e4eddbcb79a766b618cdf6ff489e57fdd8
1 parent
c68f0ced
Exists in
master
and in
1 other branch
- templates simplified using a base question and blocks for each type of answer.
Showing
6 changed files
with
72 additions
and
104 deletions
Show diff stats
serve.py
| ... | ... | @@ -130,19 +130,9 @@ class LearnHandler(BaseHandler): |
| 130 | 130 | # ---------------------------------------------------------------------------- |
| 131 | 131 | # respond to AJAX to get a JSON question |
| 132 | 132 | class QuestionHandler(BaseHandler): |
| 133 | - # @tornado.web.authenticated | |
| 134 | - # def get(self): | |
| 135 | - # question = self.application.learn.next_question() | |
| 136 | - # print('---> question.get') | |
| 137 | - # print(question) | |
| 138 | - # if question['type'] == 'checkbox': | |
| 139 | - # self.render('question-checkbox.html', | |
| 140 | - # question=question, | |
| 141 | - # md=md, | |
| 142 | - # ) | |
| 143 | - | |
| 144 | - # else: | |
| 145 | - # self.write('Error!!!') | |
| 133 | + @tornado.web.authenticated | |
| 134 | + def get(self): | |
| 135 | + self.redirect('/') | |
| 146 | 136 | |
| 147 | 137 | @tornado.web.authenticated |
| 148 | 138 | def post(self): |
| ... | ... | @@ -189,12 +179,6 @@ class QuestionHandler(BaseHandler): |
| 189 | 179 | 'correct': correct, |
| 190 | 180 | }) |
| 191 | 181 | |
| 192 | - # if question['type'] == 'checkbox': | |
| 193 | - # self.render('question-checkbox.html', | |
| 194 | - # question=question, # the dictionary with the question?? | |
| 195 | - # md=md, # passes function that renders markdown to html | |
| 196 | - # ) | |
| 197 | - | |
| 198 | 182 | |
| 199 | 183 | # ---------------------------------------------------------------------------- |
| 200 | 184 | def main(): | ... | ... |
templates/learn.html
| ... | ... | @@ -100,7 +100,41 @@ $.fn.extend({ |
| 100 | 100 | } |
| 101 | 101 | }); |
| 102 | 102 | |
| 103 | +// function getCookie(name) { | |
| 104 | +// var r = document.cookie.match("\\b" + name + "=([^;]*)\\b"); | |
| 105 | +// return r ? r[1] : undefined; | |
| 106 | +// } | |
| 107 | + | |
| 108 | +// jQuery.postJSON = function(url, args, callback) { | |
| 109 | +// args._xsrf = getCookie("_xsrf"); | |
| 110 | +// alert(args); | |
| 111 | +// $.ajax({url: url, data: $.param(args), dataType: "text", type: "POST", | |
| 112 | +// success: function(response) { | |
| 113 | +// callback(eval("(" + response + ")")); | |
| 114 | +// }}); | |
| 115 | +// } | |
| 116 | + | |
| 103 | 117 | function getQuestion() { |
| 118 | + // var data = $("#question_form").serialize(); | |
| 119 | + // $.postJSON('/question', data, function(response){ | |
| 120 | + // $("#question_div").html(response["html"]); | |
| 121 | + // MathJax.Hub.Queue(["Typeset",MathJax.Hub,"question"]); | |
| 122 | + | |
| 123 | + // if (response["correct"]) { | |
| 124 | + // $('#question_div').animateCSS('pulse'); | |
| 125 | + // } | |
| 126 | + // else { | |
| 127 | + // $('#question_div').animateCSS('shake'); | |
| 128 | + // } | |
| 129 | + | |
| 130 | + // $("input:text").bind("keypress", function (e) { | |
| 131 | + // if (e.keyCode == 13) { | |
| 132 | + // e.preventDefault(); | |
| 133 | + // getQuestion(); | |
| 134 | + // } | |
| 135 | + // }); | |
| 136 | + // }); | |
| 137 | + | |
| 104 | 138 | $.ajax({ |
| 105 | 139 | type: "POST", |
| 106 | 140 | url: "/question", | ... | ... |
templates/question-checkbox.html
| 1 | +{% extends "question.html" %} | |
| 1 | 2 | {% autoescape %} |
| 2 | 3 | |
| 3 | -<div class="panel panel-default"> | |
| 4 | - <div class="panel-heading"> | |
| 5 | - <!-- <h3 id="title"> --> | |
| 6 | - {{ question['title'] }} | |
| 7 | - <!-- </h3> --> | |
| 4 | +{% block answer %} | |
| 5 | +<fieldset data-role="controlgroup"> | |
| 6 | + <div class="list-group"> | |
| 7 | + {% for n,opt in enumerate(question['options']) %} | |
| 8 | + <a class="list-group-item"> | |
| 9 | + <input type="checkbox" id="{{ n }}" name="answer" value="{{ n }}"> | |
| 10 | + {{ opt }} | |
| 11 | + </a> | |
| 12 | + {% end %} | |
| 8 | 13 | </div> |
| 9 | - <div class="panel-body"> | |
| 10 | - | |
| 11 | - <div id="text"> | |
| 12 | - {{ md(question['text']) }} | |
| 13 | - </div> | |
| 14 | - | |
| 15 | - <fieldset data-role="controlgroup"> | |
| 16 | - <div class="list-group"> | |
| 17 | - {% for n,opt in enumerate(question['options']) %} | |
| 18 | - <a class="list-group-item"> | |
| 19 | - <input type="checkbox" id="{{ n }}" name="answer" value="{{ n }}"> | |
| 20 | - {{ opt }} | |
| 21 | - </a> | |
| 22 | - {% end %} | |
| 23 | - </div> | |
| 24 | - </fieldset> | |
| 25 | - </div> | |
| 26 | -</div> | |
| 14 | +</fieldset> | |
| 15 | +{% end %} | |
| 27 | 16 | \ No newline at end of file | ... | ... |
templates/question-radio.html
| 1 | +{% extends "question.html" %} | |
| 1 | 2 | {% autoescape %} |
| 2 | 3 | |
| 3 | -<div class="panel panel-default"> | |
| 4 | - <div class="panel-heading"> | |
| 5 | - <!-- <h3 id="title"> --> | |
| 6 | - {{ question['title'] }} | |
| 7 | - <!-- </h3> --> | |
| 4 | +{% block answer %} | |
| 5 | +<fieldset data-role="controlgroup"> | |
| 6 | + <div class="list-group"> | |
| 7 | + {% for n,opt in enumerate(question['options']) %} | |
| 8 | + <a class="list-group-item"> | |
| 9 | + <input type="radio" id="{{ n }}" name="answer" value="{{ n }}"> | |
| 10 | + {{ md(opt) }} | |
| 11 | + </a> | |
| 12 | + {% end %} | |
| 8 | 13 | </div> |
| 9 | - | |
| 10 | - <div class="panel-body"> | |
| 11 | - | |
| 12 | - <div id="text"> | |
| 13 | - {{ md(question['text']) }} | |
| 14 | - </div> | |
| 15 | - | |
| 16 | - <fieldset data-role="controlgroup"> | |
| 17 | - <div class="list-group"> | |
| 18 | - {% for n,opt in enumerate(question['options']) %} | |
| 19 | - <a class="list-group-item"> | |
| 20 | - <input type="radio" id="{{ n }}" name="answer" value="{{ n }}"> | |
| 21 | - {{ md(opt) }} | |
| 22 | - </a> | |
| 23 | - {% end %} | |
| 24 | - </div> | |
| 25 | - </fieldset> | |
| 26 | - | |
| 27 | - </div> | |
| 28 | -</div> | |
| 29 | 14 | \ No newline at end of file |
| 15 | +</fieldset> | |
| 16 | +{% end %} | |
| 30 | 17 | \ No newline at end of file | ... | ... |
templates/question-text.html
| 1 | -{% autoescape %} | |
| 1 | +{% extends "question.html" %} | |
| 2 | 2 | |
| 3 | - | |
| 4 | -<div class="panel panel-default"> | |
| 5 | - <div class="panel-heading"> | |
| 6 | - <!-- <h3 id="title"> --> | |
| 7 | - {{ question['title'] }} | |
| 8 | - <!-- </h3> --> | |
| 9 | - </div> | |
| 10 | - | |
| 11 | - <div class="panel-body"> | |
| 12 | - | |
| 13 | - <div id="text"> | |
| 14 | - {{ md(question['text']) }} | |
| 15 | - </div> | |
| 16 | - | |
| 17 | - <fieldset data-role="controlgroup"> | |
| 18 | - <input type="text" class="form-control" id="answer" name="answer" value=""> | |
| 19 | - </fieldset> | |
| 20 | - </div> | |
| 21 | -</div> | |
| 3 | +{% block answer %} | |
| 4 | +<fieldset data-role="controlgroup"> | |
| 5 | + <input type="text" class="form-control" id="answer" name="answer" value=""> | |
| 6 | +</fieldset> | |
| 7 | +{% end %} | |
| 22 | 8 | \ No newline at end of file | ... | ... |
templates/question-textarea.html
| 1 | +{% extends "question.html" %} | |
| 1 | 2 | {% autoescape %} |
| 2 | 3 | |
| 3 | - | |
| 4 | -<div class="panel panel-default"> | |
| 5 | - <div class="panel-heading"> | |
| 6 | - <!-- <h3 id="title"> --> | |
| 7 | - {{ question['title'] }} | |
| 8 | - <!-- </h3> --> | |
| 9 | - </div> | |
| 10 | - | |
| 11 | - <div class="panel-body"> | |
| 12 | - <div id="text"> | |
| 13 | - {{ md(question['text']) }} | |
| 14 | - </div> | |
| 15 | - | |
| 16 | - <textarea class="form-control" rows="{{ question['lines'] }}" name="answer"></textarea><br /> | |
| 17 | - <input type="hidden" name="question_ref" value="{{ question['ref'] }}"> | |
| 18 | - </div> | |
| 19 | -</div> | |
| 4 | +{% block answer %} | |
| 5 | +<textarea class="form-control" rows="{{ question['lines'] }}" name="answer"></textarea><br /> | |
| 6 | +<input type="hidden" name="question_ref" value="{{ question['ref'] }}"> | |
| 7 | +{% end %} | |
| 20 | 8 | \ No newline at end of file | ... | ... |