Commit 563f62ceafe1c756f6407cb511249dee5f2142db
1 parent
2285f4a5
Exists in
master
and in
1 other branch
- disabled submit during animations (fixes synchronization problems)
- changed FileHandler to close the file immediately after reading it
Showing
4 changed files
with
17 additions
and
12 deletions
Show diff stats
BUGS.md
1 | 1 | |
2 | 2 | # BUGS |
3 | 3 | |
4 | -- botao para mostrar a solução quando se acerta. | |
5 | 4 | - shift-enter não está a funcionar |
6 | 5 | - falha intermitent no file handler quando o browser envia 2 GET requests ao mesmo tempo (porquê?) |
7 | 6 | - nos topicos learn.yaml, qd falha acrescenta no fim. nao faz sentido. |
... | ... | @@ -34,6 +33,8 @@ |
34 | 33 | |
35 | 34 | # FIXED |
36 | 35 | |
36 | +- quando se pressiona "responde" rapido (enquanto a animacao dura), a pergunta passa para a seguinte sem haver o correspondente redraw, ou seja a proxima resposta nao é a da pergunta mostrada. | |
37 | +- botao para mostrar a solução quando se acerta. | |
37 | 38 | - não está a guardar o resultado no final do topico |
38 | 39 | - esta a permitir 2 logins em simultaneo do mesmo user. fica tudo baralhado se mxerem em simultaneo... |
39 | 40 | - errar no ultimo topico nao mostra solucao? | ... | ... |
serve.py
... | ... | @@ -178,11 +178,11 @@ class FileHandler(BaseHandler): |
178 | 178 | SUPPORTED_METHODS = ['GET'] |
179 | 179 | |
180 | 180 | @tornado.web.authenticated |
181 | - # async | |
182 | - def get(self, filename): | |
181 | + async def get(self, filename): | |
183 | 182 | uid = self.current_user |
184 | 183 | public_dir = self.learn.get_current_public_dir(uid) |
185 | 184 | filepath = path.expanduser(path.join(public_dir, filename)) |
185 | + content_type, encoding = mimetypes.guess_type(filename) | |
186 | 186 | |
187 | 187 | try: |
188 | 188 | f = open(filepath, 'rb') |
... | ... | @@ -190,16 +190,16 @@ class FileHandler(BaseHandler): |
190 | 190 | logging.error(f'File not found: {filepath}') |
191 | 191 | except PermissionError: |
192 | 192 | logging.error(f'No permission: {filepath}') |
193 | + except Exception as e: | |
194 | + raise e | |
193 | 195 | else: |
194 | - content_type = mimetypes.guess_type(filename) | |
195 | - self.set_header("Content-Type", content_type[0]) | |
196 | - # divide the file into chunks and write one chunk at a time, so | |
197 | - # that the write does not block the ioloop for very long. | |
198 | 196 | with f: |
199 | 197 | data = f.read() |
198 | + f.close() | |
199 | + self.set_header("Content-Type", content_type) | |
200 | 200 | self.write(data) |
201 | - # await self.flush() | |
202 | - self.flush() | |
201 | + await self.flush() | |
202 | + # self.flush() | |
203 | 203 | |
204 | 204 | |
205 | 205 | # ---------------------------------------------------------------------------- | ... | ... |
static/js/topic.js
... | ... | @@ -3,6 +3,7 @@ $.fn.extend({ |
3 | 3 | var animationEnd = 'webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend'; |
4 | 4 | this.addClass('animated ' + animation).one(animationEnd, function() { |
5 | 5 | $(this).removeClass('animated ' + animation); |
6 | + $("#submit").removeClass("disabled"); | |
6 | 7 | }); |
7 | 8 | } |
8 | 9 | }); |
... | ... | @@ -27,6 +28,8 @@ function showTriesLeft(tries) { |
27 | 28 | |
28 | 29 | // Get current question |
29 | 30 | function getQuestion() { |
31 | + $("#submit").addClass("disabled"); | |
32 | + | |
30 | 33 | $.ajax({ |
31 | 34 | type: "GET", |
32 | 35 | url: "/question", |
... | ... | @@ -42,7 +45,7 @@ function updateQuestion(response) { |
42 | 45 | var method = response["method"]; |
43 | 46 | var params = response["params"]; |
44 | 47 | |
45 | - $('#right, #wrong').hide(); | |
48 | + $("#right, #wrong").hide(); | |
46 | 49 | |
47 | 50 | switch (method) { |
48 | 51 | case "new_question": |
... | ... | @@ -63,8 +66,8 @@ function new_question(type, question, tries, progress) { |
63 | 66 | $("#question_div").html(question).animateCSS('bounceInDown'); |
64 | 67 | showTriesLeft(tries); |
65 | 68 | $("#comments, #solution").html(""); |
66 | - var btn_text = (type == "info") ? "Continuar" : "Responder"; | |
67 | - $("#submit").html(btn_text).off().click(postAnswer); | |
69 | + var btntext = (type == "info") ? "Continuar" : "Responder"; | |
70 | + $("#submit").html(btntext).off().click(postAnswer); | |
68 | 71 | $('#topic_progress').css('width', (100*progress)+'%').attr('aria-valuenow', 100*progress); |
69 | 72 | MathJax.Hub.Queue(["Typeset",MathJax.Hub,"question_div"]); |
70 | 73 | ... | ... |
templates/topic.html
... | ... | @@ -111,6 +111,7 @@ |
111 | 111 | |
112 | 112 | <div id="solution"></div> |
113 | 113 | |
114 | + <!-- reponder / continuar --> | |
114 | 115 | <a class="btn btn-primary btn-lg btn-block my-5" id="submit" data-toggle="tooltip" data-placement="right" href="#solution"></a> |
115 | 116 | <!-- title="Shift-Enter" --> |
116 | 117 | </div> | ... | ... |