Commit 9c62c0f5e1d359656c405ad9f57a23730ea98ad2
1 parent
df0dcb76
Exists in
master
and in
1 other branch
- fixed textarea to monospace font and tab to 4 spaces (javascript braindead).
- changed looks in some initial logs. - minor modification in learnapp database code to submit a new studenttopic. - updated demo questions. - updated BUGS.md.
Showing
4 changed files
with
24 additions
and
21 deletions
Show diff stats
BUGS.md
| 1 | 1 | |
| 2 | 2 | BUGS: |
| 3 | 3 | |
| 4 | +- forçar reload das perguntas. | |
| 4 | 5 | - tabelas nas perguntas radio/checkbox não ocupam todo o espaço como em question. |
| 5 | 6 | - topicos virtuais nao deveriam aparecer. na construção da árvore os sucessores seriam ligados directamente aos predecessores. |
| 6 | 7 | - Criar outra estrutura organizada em capítulos (conjuntos de tópicos). Permitir capítulos de capítulos, etc. |
| 7 | 8 | |
| 8 | - | |
| 9 | 9 | - reportar comentarios após submeter. |
| 10 | -- cada topico tem uma pagina begin e uma end? | |
| 11 | 10 | - pertuntas tipo tristate: (sim, não, não sei) |
| 12 | -- animação no final de cada topico para se perceber a transição | |
| 13 | -- aumentar espaço a seguir às tabelas no texto | |
| 14 | -- guardar state cada vez que topico termina | |
| 15 | -- tabs em textarea nao funcionam correctamente (insere 1 espaco em vez de 4) | |
| 16 | -- textarea deve mostrar no html os valores iniciais de ans, se existir | |
| 17 | 11 | - detect questions in questions.yaml without ref -> error ou generate default. |
| 18 | 12 | - error if demo.yaml has no topics |
| 19 | 13 | - session management. close after inactive time. |
| ... | ... | @@ -32,9 +26,15 @@ TODO: |
| 32 | 26 | - pymips: activar/desactivar instruções |
| 33 | 27 | - implementar servidor http com redirect para https. |
| 34 | 28 | - usar codemirror no textarea |
| 29 | +- ao fim de 3 tentativas com password errada, envia email com nova password. | |
| 35 | 30 | |
| 36 | 31 | FIXED: |
| 37 | 32 | |
| 33 | +- tabs em textarea nao funcionam correctamente (insere 1 espaco em vez de 4) | |
| 34 | +- guardar state cada vez que topico termina | |
| 35 | +- textarea deve mostrar no html os valores iniciais de ans, se existirem | |
| 36 | +- aumentar espaço a seguir às tabelas no texto | |
| 37 | +- animação no final de cada topico para se perceber a transição | |
| 38 | 38 | - "<" is not escaped in markdown. |
| 39 | 39 | - Está a mostrar a solução em 'comments'!!! |
| 40 | 40 | - database: answers não tem referencia para o topico, so para question_ref | ... | ... |
demo/solar_system/questions.yaml
| 1 | +--- | |
| 1 | 2 | |
| 2 | 3 | # --------------------------------------------------------------------------- |
| 3 | 4 | - |
| ... | ... | @@ -30,7 +31,7 @@ |
| 30 | 31 | ref: saturn |
| 31 | 32 | type: text-regex |
| 32 | 33 | title: Sistema solar |
| 33 | - text: O planeta do nosso sistema solar conhecido por ter aneis chama-se planeta... | |
| 34 | + text: O planeta do sistema solar conhecido por ter aneis é o planeta... | |
| 34 | 35 | correct: !regex '[Ss]aturno' |
| 35 | 36 | |
| 36 | 37 | # --------------------------------------------------------------------------- |
| ... | ... | @@ -41,5 +42,6 @@ |
| 41 | 42 | text: Escreva o nome dos três planetas mais próximos do Sol. (Exemplo `A, B e C`) |
| 42 | 43 | correct: correct-first_3_planets.py |
| 43 | 44 | # opcional |
| 45 | + answer: Vulcano, Krypton, Plutão | |
| 44 | 46 | lines: 3 |
| 45 | 47 | timeout: 5 | ... | ... |
learnapp.py
| ... | ... | @@ -118,10 +118,9 @@ class LearnApp(object): |
| 118 | 118 | a = s.query(StudentTopic).filter_by(student_id=uid, topic_id=finished_topic).one_or_none() |
| 119 | 119 | if a is None: |
| 120 | 120 | # insert new studenttopic into database |
| 121 | - u = s.query(Student).get(uid) | |
| 122 | - a = StudentTopic(level=level, date=date) | |
| 123 | 121 | t = s.query(Topic).get(finished_topic) |
| 124 | - a.topic = t | |
| 122 | + a = StudentTopic(level=level, date=date, topic=t) | |
| 123 | + u = s.query(Student).get(uid) | |
| 125 | 124 | u.topics.append(a) |
| 126 | 125 | else: |
| 127 | 126 | # update studenttopic in database |
| ... | ... | @@ -177,9 +176,9 @@ class LearnApp(object): |
| 177 | 176 | logger.critical(f'Database "{db}" not usable.') |
| 178 | 177 | sys.exit(1) |
| 179 | 178 | else: |
| 180 | - logger.info(f'{n:4} students.') | |
| 181 | - logger.info(f'{m:4} topics.') | |
| 182 | - logger.info(f'{q:4} questions answered.') | |
| 179 | + logger.info(f'{n:6} students.') | |
| 180 | + logger.info(f'{m:6} topics.') | |
| 181 | + logger.info(f'{q:6} answers.') | |
| 183 | 182 | |
| 184 | 183 | # ------------------------------------------------------------------------ |
| 185 | 184 | # helper to manage db sessions using the `with` statement, for example |
| ... | ... | @@ -297,6 +296,6 @@ def build_dependency_graph(config={}): |
| 297 | 296 | q['path'] = fullpath |
| 298 | 297 | tnode['factory'][q['ref']] = QFactory(q) |
| 299 | 298 | |
| 300 | - logger.info(f'{len(tnode["questions"]):4} questions from {tref}') | |
| 299 | + logger.info(f'{len(tnode["questions"]):6} from {tref}') | |
| 301 | 300 | |
| 302 | 301 | return g | ... | ... |
templates/topic.html
| ... | ... | @@ -47,8 +47,11 @@ |
| 47 | 47 | background-color: #f5f5f5; |
| 48 | 48 | } |
| 49 | 49 | html { |
| 50 | - position: relative; | |
| 51 | - min-height: 100%; | |
| 50 | + position: relative; | |
| 51 | + min-height: 100%; | |
| 52 | + } | |
| 53 | + textarea { | |
| 54 | + font-family: monospace; | |
| 52 | 55 | } |
| 53 | 56 | </style> |
| 54 | 57 | |
| ... | ... | @@ -131,7 +134,7 @@ |
| 131 | 134 | } |
| 132 | 135 | }); |
| 133 | 136 | |
| 134 | - // Process the response given by the server | |
| 137 | + // Process response given by the server | |
| 135 | 138 | function updateQuestion(response){ |
| 136 | 139 | switch (response["method"]) { |
| 137 | 140 | case "new_question": |
| ... | ... | @@ -152,7 +155,7 @@ |
| 152 | 155 | e.preventDefault(); |
| 153 | 156 | postQuestion(); |
| 154 | 157 | } |
| 155 | - else if (e.keyCode === 9) { // tab | |
| 158 | + else if (e.keyCode == 9) { // tab | |
| 156 | 159 | e.preventDefault(); // prevent loosing focus |
| 157 | 160 | // get caret position/selection |
| 158 | 161 | var start = this.selectionStart; |
| ... | ... | @@ -160,8 +163,7 @@ |
| 160 | 163 | var value = $(this).val(); |
| 161 | 164 | |
| 162 | 165 | // set textarea value to: text before caret + tab + text after caret |
| 163 | - $(this).val(value.substring(0, start) + " " + value.substring(end)); | |
| 164 | - | |
| 166 | + $(this).val(value.substring(0, start) + " " + " " + " " + " " + value.substring(end)); | |
| 165 | 167 | // put caret at right position again (add one for the tab) |
| 166 | 168 | this.selectionStart = this.selectionEnd = start + 4; |
| 167 | 169 | }}); | ... | ... |