Commit 62e18fdcd3a42c90c072168794f3c3970abf570b
1 parent
bfdba5e3
Exists in
master
and in
1 other branch
- fixed password change notification
Showing
4 changed files
with
17 additions
and
18 deletions
Show diff stats
BUGS.md
| 1 | 1 | ||
| 2 | # BUGS | 2 | # BUGS |
| 3 | 3 | ||
| 4 | +- generators e correct scripts que durem muito tempo podem bloquear o loop do tornado? | ||
| 4 | - detect questions in questions.yaml without ref -> error ou generate default. | 5 | - detect questions in questions.yaml without ref -> error ou generate default. |
| 5 | - topicos virtuais nao deveriam aparecer. na construção da árvore os sucessores seriam ligados directamente aos predecessores. | 6 | - topicos virtuais nao deveriam aparecer. na construção da árvore os sucessores seriam ligados directamente aos predecessores. |
| 6 | - Criar outra estrutura organizada em capítulos (conjuntos de tópicos). Permitir capítulos de capítulos, etc. talvez usar grafos de grafos... | 7 | - Criar outra estrutura organizada em capítulos (conjuntos de tópicos). Permitir capítulos de capítulos, etc. talvez usar grafos de grafos... |
| @@ -11,7 +12,6 @@ | @@ -11,7 +12,6 @@ | ||
| 11 | 12 | ||
| 12 | # TODO | 13 | # TODO |
| 13 | 14 | ||
| 14 | -- update de fontawesome para versão 5. | ||
| 15 | - reportar comentarios após submeter. | 15 | - reportar comentarios após submeter. |
| 16 | - each topic only loads a sample of K questions (max) in random order. | 16 | - each topic only loads a sample of K questions (max) in random order. |
| 17 | - servir imagens/ficheiros. | 17 | - servir imagens/ficheiros. |
| @@ -31,6 +31,7 @@ | @@ -31,6 +31,7 @@ | ||
| 31 | 31 | ||
| 32 | # FIXED | 32 | # FIXED |
| 33 | 33 | ||
| 34 | +- update de fontawesome para versão 5.0.6. | ||
| 34 | - remover learn.css uma vez que nao é usado em lado nenhum? | 35 | - remover learn.css uma vez que nao é usado em lado nenhum? |
| 35 | - check if user already logged in | 36 | - check if user already logged in |
| 36 | - mover javascript para ficheiros externos e carregar com script defer src | 37 | - mover javascript para ficheiros externos e carregar com script defer src |
learnapp.py
| @@ -267,9 +267,11 @@ class LearnApp(object): | @@ -267,9 +267,11 @@ class LearnApp(object): | ||
| 267 | # g.node['my/topic']['name'] name of the topic | 267 | # g.node['my/topic']['name'] name of the topic |
| 268 | # g.node['my/topic']['questions'] list of question refs defined in YAML | 268 | # g.node['my/topic']['questions'] list of question refs defined in YAML |
| 269 | # g.node['my/topic']['factory'] dict with question factories | 269 | # g.node['my/topic']['factory'] dict with question factories |
| 270 | +# | ||
| 271 | +# Edges are obtained from the deps defined in the YAML file for each topic. | ||
| 270 | # ---------------------------------------------------------------------------- | 272 | # ---------------------------------------------------------------------------- |
| 271 | def build_dependency_graph(config={}): | 273 | def build_dependency_graph(config={}): |
| 272 | - logger.info('Building topic dependency graph.') | 274 | + logger.info('Building graph and loading questions:') |
| 273 | 275 | ||
| 274 | # create graph | 276 | # create graph |
| 275 | prefix = config.get('path', '.') | 277 | prefix = config.get('path', '.') |
| @@ -281,18 +283,15 @@ def build_dependency_graph(config={}): | @@ -281,18 +283,15 @@ def build_dependency_graph(config={}): | ||
| 281 | topics = config.get('topics', {}) | 283 | topics = config.get('topics', {}) |
| 282 | for ref,attr in topics.items(): | 284 | for ref,attr in topics.items(): |
| 283 | g.add_node(ref) | 285 | g.add_node(ref) |
| 286 | + tnode = g.node[ref] # current node (topic) | ||
| 287 | + | ||
| 284 | if isinstance(attr, dict): | 288 | if isinstance(attr, dict): |
| 285 | - g.node[ref]['name'] = attr.get('name', ref) | ||
| 286 | - g.node[ref]['questions'] = attr.get('questions', []) | 289 | + tnode['name'] = attr.get('name', ref) |
| 290 | + tnode['questions'] = attr.get('questions', []) | ||
| 287 | g.add_edges_from((d,ref) for d in attr.get('deps', [])) | 291 | g.add_edges_from((d,ref) for d in attr.get('deps', [])) |
| 288 | 292 | ||
| 289 | - # iterate over topics and create question factories | ||
| 290 | - logger.info('Loading:') | ||
| 291 | - for tref in g.nodes(): | ||
| 292 | - tnode = g.node[tref] # current node (topic) | ||
| 293 | - fullpath = path.expanduser(path.join(prefix, tref)) | 293 | + fullpath = path.expanduser(path.join(prefix, ref)) |
| 294 | filename = path.join(fullpath, 'questions.yaml') | 294 | filename = path.join(fullpath, 'questions.yaml') |
| 295 | - | ||
| 296 | loaded_questions = load_yaml(filename, default=[]) # list | 295 | loaded_questions = load_yaml(filename, default=[]) # list |
| 297 | 296 | ||
| 298 | # if questions not in configuration then load all, preserving order | 297 | # if questions not in configuration then load all, preserving order |
| @@ -303,9 +302,9 @@ def build_dependency_graph(config={}): | @@ -303,9 +302,9 @@ def build_dependency_graph(config={}): | ||
| 303 | tnode['factory'] = {} | 302 | tnode['factory'] = {} |
| 304 | for q in loaded_questions: | 303 | for q in loaded_questions: |
| 305 | if q['ref'] in tnode['questions']: | 304 | if q['ref'] in tnode['questions']: |
| 306 | - q['path'] = fullpath | 305 | + q['path'] = fullpath # fullpath added to each question |
| 307 | tnode['factory'][q['ref']] = QFactory(q) | 306 | tnode['factory'][q['ref']] = QFactory(q) |
| 308 | 307 | ||
| 309 | - logger.info(f'{len(tnode["questions"]):6} from {tref}') | 308 | + logger.info(f'{len(tnode["questions"]):6} from {ref}') |
| 310 | 309 | ||
| 311 | return g | 310 | return g |
static/js/maintopics.js
| 1 | function notify(msg) { | 1 | function notify(msg) { |
| 2 | $("#notifications").html(msg); | 2 | $("#notifications").html(msg); |
| 3 | - $("#notifications").fadeIn(250).delay(5000).fadeOut(500); | 3 | + $("#notifications").fadeIn(250).delay(3000).fadeOut(500); |
| 4 | } | 4 | } |
| 5 | 5 | ||
| 6 | function getCookie(name) { | 6 | function getCookie(name) { |
| @@ -9,6 +9,8 @@ function getCookie(name) { | @@ -9,6 +9,8 @@ function getCookie(name) { | ||
| 9 | } | 9 | } |
| 10 | 10 | ||
| 11 | function change_password() { | 11 | function change_password() { |
| 12 | + // alert('hello'); | ||
| 13 | + // notify('hello!'); | ||
| 12 | var token = getCookie('_xsrf'); | 14 | var token = getCookie('_xsrf'); |
| 13 | $.ajax({ | 15 | $.ajax({ |
| 14 | type: "POST", | 16 | type: "POST", |
templates/notification.html
| 1 | - | ||
| 2 | -<div class="alert alert-{{ type }} alert-dismissible" role="alert" id="notification" style="position:absolute; | ||
| 3 | - top: 0px; right: 1em;"> | ||
| 4 | - <!-- <i class="fa fa-check" aria-hidden="true"></i> --> | ||
| 5 | - <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button> | 1 | +<div class="alert alert-{{ type }} alert-dismissible" role="alert" id="notification"> |
| 2 | + <i class="fas fa-key" aria-hidden="true"></i> | ||
| 6 | {{ msg }} | 3 | {{ msg }} |
| 7 | </div> | 4 | </div> |