Commit e6915ba05f9c4729557ff39bb12f8c476312ccc8

Authored by Miguel Barão
1 parent 51627bcc
Exists in master and in 1 other branch dev

- code cleanup.

- fixed info questions to continue with a single button click.
Showing 3 changed files with 36 additions and 26 deletions   Show diff stats
1 1
2 # BUGS 2 # BUGS
3 3
4 -- falha no file handler de vez em quando, nao sei porquê... 4 +- falha intermitent no file handler quando o browser envia 2 GET requests ao mesmo tempo (porquê?)
5 - nos topicos learn.yaml, qd falha acrescenta no fim. nao faz sentido. 5 - nos topicos learn.yaml, qd falha acrescenta no fim. nao faz sentido.
6 - ocorreu uma vez o sqlalchemy dar mesg erro a indicar que as threads sao diferents quando se faz o get da primeira pergunta do topico. Muitas vezes nao mostar erro, mas a pagina da erro ou fica em branco... 6 - ocorreu uma vez o sqlalchemy dar mesg erro a indicar que as threads sao diferents quando se faz o get da primeira pergunta do topico. Muitas vezes nao mostar erro, mas a pagina da erro ou fica em branco...
7 7
@@ -16,6 +16,7 @@ import functools @@ -16,6 +16,7 @@ import functools
16 import tornado.ioloop 16 import tornado.ioloop
17 import tornado.web 17 import tornado.web
18 import tornado.httpserver 18 import tornado.httpserver
  19 +from tornado.escape import to_unicode
19 20
20 # this project 21 # this project
21 from learnapp import LearnApp 22 from learnapp import LearnApp
@@ -122,9 +123,9 @@ class ChangePasswordHandler(BaseHandler): @@ -122,9 +123,9 @@ class ChangePasswordHandler(BaseHandler):
122 123
123 changed_ok = await self.learn.change_password(uid, pw) 124 changed_ok = await self.learn.change_password(uid, pw)
124 if changed_ok: 125 if changed_ok:
125 - notification = tornado.escape.to_unicode(self.render_string('notification.html', type='success', msg='A password foi alterada!')) 126 + notification = to_unicode(self.render_string('notification.html', type='success', msg='A password foi alterada!'))
126 else: 127 else:
127 - notification = tornado.escape.to_unicode(self.render_string('notification.html', type='danger', msg='A password não foi alterada!')) 128 + notification = to_unicode(self.render_string('notification.html', type='danger', msg='A password não foi alterada!'))
128 self.write({'msg': notification}) 129 self.write({'msg': notification})
129 130
130 131
@@ -141,7 +142,6 @@ class RootHandler(BaseHandler): @@ -141,7 +142,6 @@ class RootHandler(BaseHandler):
141 name=self.learn.get_student_name(uid), 142 name=self.learn.get_student_name(uid),
142 state=self.learn.get_student_state(uid), 143 state=self.learn.get_student_state(uid),
143 title=self.learn.get_title(), 144 title=self.learn.get_title(),
144 - # get_topic_type=self.learn.get_topic_type, # function  
145 ) 145 )
146 146
147 147
@@ -172,12 +172,13 @@ class TopicHandler(BaseHandler): @@ -172,12 +172,13 @@ class TopicHandler(BaseHandler):
172 # ---------------------------------------------------------------------------- 172 # ----------------------------------------------------------------------------
173 173
174 # FIXME error in many situations... images are not shown... 174 # FIXME error in many situations... images are not shown...
175 - 175 +# seems to happen when the browser sends two GET requests at the same time
176 class FileHandler(BaseHandler): 176 class FileHandler(BaseHandler):
177 SUPPORTED_METHODS = ['GET'] 177 SUPPORTED_METHODS = ['GET']
178 178
179 @tornado.web.authenticated 179 @tornado.web.authenticated
180 - async def get(self, filename): 180 + # async
  181 + def get(self, filename):
181 uid = self.current_user 182 uid = self.current_user
182 public_dir = self.learn.get_current_public_dir(uid) 183 public_dir = self.learn.get_current_public_dir(uid)
183 filepath = path.expanduser(path.join(public_dir, filename)) 184 filepath = path.expanduser(path.join(public_dir, filename))
@@ -191,12 +192,13 @@ class FileHandler(BaseHandler): @@ -191,12 +192,13 @@ class FileHandler(BaseHandler):
191 else: 192 else:
192 content_type = mimetypes.guess_type(filename) 193 content_type = mimetypes.guess_type(filename)
193 self.set_header("Content-Type", content_type[0]) 194 self.set_header("Content-Type", content_type[0])
194 -  
195 # divide the file into chunks and write one chunk at a time, so 195 # divide the file into chunks and write one chunk at a time, so
196 # that the write does not block the ioloop for very long. 196 # that the write does not block the ioloop for very long.
197 with f: 197 with f:
198 - self.write(f.read())  
199 - await self.flush() 198 + data = f.read()
  199 + self.write(data)
  200 + # await self.flush()
  201 + self.flush()
200 202
201 203
202 # ---------------------------------------------------------------------------- 204 # ----------------------------------------------------------------------------
@@ -226,24 +228,24 @@ class QuestionHandler(BaseHandler): @@ -226,24 +228,24 @@ class QuestionHandler(BaseHandler):
226 q = self.learn.get_current_question(user) 228 q = self.learn.get_current_question(user)
227 229
228 if q is not None: 230 if q is not None:
229 - question_html = self.render_string(self.templates[q['type']],  
230 - question=q, md=md_to_html) 231 + question_html = to_unicode(self.render_string(self.templates[q['type']],
  232 + question=q, md=md_to_html))
231 response = { 233 response = {
232 'method': 'new_question', 234 'method': 'new_question',
233 'params': { 235 'params': {
234 'type': q['type'], 236 'type': q['type'],
235 - 'question': tornado.escape.to_unicode(question_html), 237 + 'question': question_html,
236 'progress': self.learn.get_student_progress(user), 238 'progress': self.learn.get_student_progress(user),
237 'tries': q['tries'], 239 'tries': q['tries'],
238 - }, 240 + }
239 } 241 }
240 242
241 else: 243 else:
242 - finished_topic_html = self.render_string('finished_topic.html') 244 + finished_topic_html = to_unicode(self.render_string('finished_topic.html'))
243 response = { 245 response = {
244 'method': 'finished_topic', 246 'method': 'finished_topic',
245 'params': { 247 'params': {
246 - 'question': tornado.escape.to_unicode(finished_topic_html) 248 + 'question': finished_topic_html
247 } 249 }
248 } 250 }
249 251
@@ -275,8 +277,9 @@ class QuestionHandler(BaseHandler): @@ -275,8 +277,9 @@ class QuestionHandler(BaseHandler):
275 comments=q['comments'], md=md_to_html) 277 comments=q['comments'], md=md_to_html)
276 278
277 response['params'] = { 279 response['params'] = {
  280 + 'type': q['type'],
278 'progress': self.learn.get_student_progress(user), 281 'progress': self.learn.get_student_progress(user),
279 - 'comments': tornado.escape.to_unicode(comments_html), 282 + 'comments': to_unicode(comments_html),
280 'tries': q['tries'], 283 'tries': q['tries'],
281 } 284 }
282 285
@@ -285,21 +288,23 @@ class QuestionHandler(BaseHandler): @@ -285,21 +288,23 @@ class QuestionHandler(BaseHandler):
285 comments=q['comments'], md=md_to_html) 288 comments=q['comments'], md=md_to_html)
286 289
287 response['params'] = { 290 response['params'] = {
  291 + 'type': q['type'],
288 'progress': self.learn.get_student_progress(user), 292 'progress': self.learn.get_student_progress(user),
289 - 'comments': tornado.escape.to_unicode(comments_html), # FIXME 293 + 'comments': to_unicode(comments_html),
290 'tries': q['tries'], 294 'tries': q['tries'],
291 } 295 }
292 296
293 elif action == 'wrong': # no more tries 297 elif action == 'wrong': # no more tries
294 - comments_html = self.render_string('comments.html',  
295 - comments=q['comments'], md=md_to_html)  
296 - solution_html = self.render_string('solution.html',  
297 - solution=q['solution'], md=md_to_html) 298 + comments_html = to_unicode(self.render_string('comments.html',
  299 + comments=q['comments'], md=md_to_html))
  300 + solution_html = to_unicode(self.render_string('solution.html',
  301 + solution=q['solution'], md=md_to_html))
298 302
299 response['params'] = { 303 response['params'] = {
  304 + 'type': q['type'],
300 'progress': self.learn.get_student_progress(user), 305 'progress': self.learn.get_student_progress(user),
301 - 'comments': tornado.escape.to_unicode(comments_html),  
302 - 'solution': tornado.escape.to_unicode(solution_html), 306 + 'comments': comments_html,
  307 + 'solution': solution_html,
303 'tries': q['tries'], 308 'tries': q['tries'],
304 } 309 }
305 310
static/js/topic.js
@@ -26,7 +26,6 @@ function updateQuestion(response) { @@ -26,7 +26,6 @@ function updateQuestion(response) {
26 26
27 switch (method) { 27 switch (method) {
28 case "new_question": 28 case "new_question":
29 - console.log(params["type"]);  
30 new_question(params["type"], params["question"], params["tries"], params["progress"]); 29 new_question(params["type"], params["question"], params["tries"], params["progress"]);
31 break; 30 break;
32 case "finished_topic": 31 case "finished_topic":
@@ -52,8 +51,8 @@ function new_question(type, question, tries, progress) { @@ -52,8 +51,8 @@ function new_question(type, question, tries, progress) {
52 } 51 }
53 $("#submit").off(); 52 $("#submit").off();
54 $("#submit").click(postAnswer); 53 $("#submit").click(postAnswer);
55 -  
56 $("#tries").html(tries); 54 $("#tries").html(tries);
  55 +
57 $('#topic_progress').css('width', (100*progress)+'%').attr('aria-valuenow', 100*progress); 56 $('#topic_progress').css('width', (100*progress)+'%').attr('aria-valuenow', 100*progress);
58 MathJax.Hub.Queue(["Typeset",MathJax.Hub,"question_div"]); 57 MathJax.Hub.Queue(["Typeset",MathJax.Hub,"question_div"]);
59 58
@@ -90,11 +89,17 @@ function getFeedback(response) { @@ -90,11 +89,17 @@ function getFeedback(response) {
90 var method = response["method"]; 89 var method = response["method"];
91 var params = response["params"]; 90 var params = response["params"];
92 91
  92 + if (params['type'] == "info") {
  93 + getQuestion();
  94 + return;
  95 + }
  96 +
93 switch (method) { 97 switch (method) {
94 case "right": 98 case "right":
95 $('#comments').html(params['comments']); 99 $('#comments').html(params['comments']);
96 MathJax.Hub.Queue(["Typeset", MathJax.Hub, "#comments"]); 100 MathJax.Hub.Queue(["Typeset", MathJax.Hub, "#comments"]);
97 $("#submit").html("Continuar"); 101 $("#submit").html("Continuar");
  102 + // $("#submit").toggleClass("btn-info btn-primary");
98 $("#submit").off(); 103 $("#submit").off();
99 $("#submit").click(getQuestion); 104 $("#submit").click(getQuestion);
100 break; 105 break;
@@ -123,7 +128,7 @@ function getFeedback(response) { @@ -123,7 +128,7 @@ function getFeedback(response) {
123 } 128 }
124 } 129 }
125 130
126 - 131 +// ===========================================================================
127 $(document).ready(function() { 132 $(document).ready(function() {
128 getQuestion(); 133 getQuestion();
129 $("#submit").click(postAnswer); 134 $("#submit").click(postAnswer);