Commit 24f1051c6720bca5301e5541a0daa77977cd1f47
1 parent
7c5719d8
Exists in
master
and in
1 other branch
- login and maintopics ok.
- generating question for topics not working... in progress...
Showing
6 changed files
with
90 additions
and
23 deletions
Show diff stats
serve.py
| @@ -30,11 +30,11 @@ class WebApplication(tornado.web.Application): | @@ -30,11 +30,11 @@ class WebApplication(tornado.web.Application): | ||
| 30 | handlers = [ | 30 | handlers = [ |
| 31 | (r'/login', LoginHandler), | 31 | (r'/login', LoginHandler), |
| 32 | (r'/logout', LogoutHandler), | 32 | (r'/logout', LogoutHandler), |
| 33 | - (r'/change_password', ChangePasswordHandler), | ||
| 34 | - (r'/question', QuestionHandler), | 33 | + # (r'/change_password', ChangePasswordHandler), |
| 34 | + (r'/question', QuestionHandler), # each question | ||
| 35 | + (r'/topic/(.+)', TopicHandler), # page for doing a topic | ||
| 35 | (r'/', RootHandler), # show list of topics | 36 | (r'/', RootHandler), # show list of topics |
| 36 | - (r'/topic/(.+)', TopicHandler), | ||
| 37 | - (r'/(.+)', FileHandler), | 37 | + # (r'/(.+)', FileHandler), |
| 38 | ] | 38 | ] |
| 39 | settings = { | 39 | settings = { |
| 40 | 'template_path': path.join(path.dirname(__file__), 'templates'), | 40 | 'template_path': path.join(path.dirname(__file__), 'templates'), |
| @@ -135,7 +135,7 @@ class TopicHandler(BaseHandler): | @@ -135,7 +135,7 @@ class TopicHandler(BaseHandler): | ||
| 135 | self.render('topic.html', | 135 | self.render('topic.html', |
| 136 | uid=uid, | 136 | uid=uid, |
| 137 | name=self.learn.get_student_name(uid), | 137 | name=self.learn.get_student_name(uid), |
| 138 | - title=self.learn.get_title() | 138 | + # title=self.learn.get_title() |
| 139 | ) | 139 | ) |
| 140 | 140 | ||
| 141 | 141 | ||
| @@ -218,23 +218,35 @@ class QuestionHandler(BaseHandler): | @@ -218,23 +218,35 @@ class QuestionHandler(BaseHandler): | ||
| 218 | } | 218 | } |
| 219 | 219 | ||
| 220 | @tornado.web.authenticated | 220 | @tornado.web.authenticated |
| 221 | - def get(self, topic=''): | 221 | + def get(self): |
| 222 | logging.debug('QuestionHandler.get') | 222 | logging.debug('QuestionHandler.get') |
| 223 | - print("topic: " + topic) | 223 | + |
| 224 | uid = self.current_user | 224 | uid = self.current_user |
| 225 | - question = self.learn.get_student_question(self, uid) | ||
| 226 | - print(question) | ||
| 227 | 225 | ||
| 228 | - question_html = self.render_string(self.templates[question['type']],question=question, md=md) | ||
| 229 | - response = { | 226 | + question = self.learn.get_student_question(uid) |
| 227 | + print(question) # FIXME its returning different questions on reload... | ||
| 228 | + template = self.templates[question['type']] | ||
| 229 | + question_html = self.render_string(template, question=question, md=md) | ||
| 230 | + print(question_html) | ||
| 231 | + | ||
| 232 | + self.write({ | ||
| 230 | 'method': 'new_question', | 233 | 'method': 'new_question', |
| 231 | 'params': { | 234 | 'params': { |
| 232 | 'question': tornado.escape.to_unicode(question_html), | 235 | 'question': tornado.escape.to_unicode(question_html), |
| 233 | - 'state': tornado.escape.to_unicode(topics_html), | ||
| 234 | - 'progress': progress, | 236 | + 'progress': 0.3, #self.learn.get_student_progress(uid) , |
| 235 | } | 237 | } |
| 236 | - } | ||
| 237 | - self.write(response) | 238 | + }) |
| 239 | + | ||
| 240 | + | ||
| 241 | + # question_html = self.render_string(self.templates[question['type']],question=question, md=md) | ||
| 242 | + # response = { | ||
| 243 | + # 'method': 'new_question', | ||
| 244 | + # 'params': { | ||
| 245 | + # 'question': tornado.escape.to_unicode(question_html), | ||
| 246 | + # 'progress': progress, | ||
| 247 | + # } | ||
| 248 | + # } | ||
| 249 | + # self.write(response) | ||
| 238 | 250 | ||
| 239 | # handles answer posted | 251 | # handles answer posted |
| 240 | @tornado.web.authenticated | 252 | @tornado.web.authenticated |
static/logo_horizontal.png
23.2 KB
templates/login.html
| @@ -18,7 +18,7 @@ | @@ -18,7 +18,7 @@ | ||
| 18 | <div class="row"> | 18 | <div class="row"> |
| 19 | 19 | ||
| 20 | <div class="col-sm-4"> | 20 | <div class="col-sm-4"> |
| 21 | - <img src="/static/logo_horizontal.png" class="img-responsive" width="60%"> | 21 | + <img src="/static/logo_horizontal_login.png" class="img-responsive" width="60%"> |
| 22 | </div> | 22 | </div> |
| 23 | 23 | ||
| 24 | <div class="col-sm-8"> | 24 | <div class="col-sm-8"> |
templates/maintopics.html
| @@ -15,7 +15,14 @@ | @@ -15,7 +15,14 @@ | ||
| 15 | <link rel="stylesheet" href="/static/font-awesome/css/font-awesome.min.css"> | 15 | <link rel="stylesheet" href="/static/font-awesome/css/font-awesome.min.css"> |
| 16 | 16 | ||
| 17 | <!-- Other --> | 17 | <!-- Other --> |
| 18 | - <link rel="stylesheet" href="/static/css/learn.css"> | 18 | + <!-- <link rel="stylesheet" href="/static/css/learn.css"> --> |
| 19 | + | ||
| 20 | + <style> | ||
| 21 | + body { | ||
| 22 | + margin: 0; | ||
| 23 | + padding-top: 100px; | ||
| 24 | + } | ||
| 25 | + </style> | ||
| 19 | 26 | ||
| 20 | </head> | 27 | </head> |
| 21 | <!-- ===================================================================== --> | 28 | <!-- ===================================================================== --> |
templates/topic.html
| @@ -75,14 +75,10 @@ | @@ -75,14 +75,10 @@ | ||
| 75 | 75 | ||
| 76 | <div id="notifications"></div> | 76 | <div id="notifications"></div> |
| 77 | 77 | ||
| 78 | - <!-- Question body --> | ||
| 79 | <form action="/question" method="post" id="question_form" autocomplete="off"> | 78 | <form action="/question" method="post" id="question_form" autocomplete="off"> |
| 80 | {% module xsrf_form_html() %} | 79 | {% module xsrf_form_html() %} |
| 81 | 80 | ||
| 82 | - <div id="question_div"> | ||
| 83 | - Question goes here!!!! | ||
| 84 | - <!-- questions go here --> | ||
| 85 | - </div> | 81 | + <div id="question_div">Question goes here!!!!</div> |
| 86 | 82 | ||
| 87 | </form> | 83 | </form> |
| 88 | <button class="btn btn-primary" id="submit" data-toggle="tooltip" data-placement="right" title="Shift-Enter">Continuar</button> | 84 | <button class="btn btn-primary" id="submit" data-toggle="tooltip" data-placement="right" title="Shift-Enter">Continuar</button> |
| @@ -97,13 +93,65 @@ | @@ -97,13 +93,65 @@ | ||
| 97 | <script src="/static/bootstrap/js/bootstrap.min.js"></script> | 93 | <script src="/static/bootstrap/js/bootstrap.min.js"></script> |
| 98 | 94 | ||
| 99 | <script> | 95 | <script> |
| 96 | + // Process the response given by the server | ||
| 97 | + function updateQuestion(response){ | ||
| 98 | + switch (response["method"]) { | ||
| 99 | + case "new_question": | ||
| 100 | + $("#question_div").html(response["params"]["question"]); | ||
| 101 | + $('#topic_progress').css('width', (100*response["params"]["progress"])+'%').attr('aria-valuenow', 100*response["params"]["progress"]); | ||
| 102 | + | ||
| 103 | + MathJax.Hub.Queue(["Typeset",MathJax.Hub,"question_div"]); | ||
| 104 | + | ||
| 105 | + // enable shift+enter to submit and tab to spaces conversion | ||
| 106 | + $("input:text, input:radio, input:checkbox").keydown(function (e) { | ||
| 107 | + if (e.keyCode == 13) { | ||
| 108 | + e.preventDefault(); | ||
| 109 | + if (e.shiftKey) postQuestion(); | ||
| 110 | + return false; | ||
| 111 | + }}); | ||
| 112 | + $("textarea").keydown(function (e) { | ||
| 113 | + if (e.keyCode == 13 && e.shiftKey) { // shift enter | ||
| 114 | + e.preventDefault(); | ||
| 115 | + postQuestion(); | ||
| 116 | + } | ||
| 117 | + else if (e.keyCode === 9) { // tab | ||
| 118 | + e.preventDefault(); // prevent loosing focus | ||
| 119 | + // get caret position/selection | ||
| 120 | + var start = this.selectionStart; | ||
| 121 | + var end = this.selectionEnd; | ||
| 122 | + var value = $(this).val(); | ||
| 123 | + | ||
| 124 | + // set textarea value to: text before caret + tab + text after caret | ||
| 125 | + $(this).val(value.substring(0, start) + " " + value.substring(end)); | ||
| 126 | + | ||
| 127 | + // put caret at right position again (add one for the tab) | ||
| 128 | + this.selectionStart = this.selectionEnd = start + 4; | ||
| 129 | + }}); | ||
| 130 | + $('#question_div').animateCSS('zoomIn'); | ||
| 131 | + break; | ||
| 132 | + | ||
| 133 | + case "shake": | ||
| 134 | + $('#topic_progress').css('width', (100*response["params"]["progress"])+'%').attr('aria-valuenow', 100*response["params"]["progress"]); | ||
| 135 | + $('#question_div').animateCSS('shake'); | ||
| 136 | + break; | ||
| 137 | + | ||
| 138 | + case "finished_topic": | ||
| 139 | + $('#topic_progress').css('width', '100%').attr('aria-valuenow', 100); | ||
| 140 | + $("#question_div").html('<img src="/static/trophy.png" alt="trophy" class="img-rounded img-responsive center-block">'); // FIXME size | ||
| 141 | + break; | ||
| 142 | + } | ||
| 143 | + } | ||
| 144 | + | ||
| 145 | + | ||
| 146 | + | ||
| 100 | // Get current question | 147 | // Get current question |
| 101 | function getQuestion() { | 148 | function getQuestion() { |
| 102 | $.ajax({ | 149 | $.ajax({ |
| 150 | + type: "GET", | ||
| 103 | url: "/question", | 151 | url: "/question", |
| 104 | // headers: {"X-XSRFToken": token}, | 152 | // headers: {"X-XSRFToken": token}, |
| 105 | dataType: "json", // expected from server | 153 | dataType: "json", // expected from server |
| 106 | - success: function(r) {alert(r); },//updateQuestion, | 154 | + success: updateQuestion, |
| 107 | error: function() {alert("O servidor não responde.");} | 155 | error: function() {alert("O servidor não responde.");} |
| 108 | }); | 156 | }); |
| 109 | } | 157 | } |