Commit 62e18fdcd3a42c90c072168794f3c3970abf570b

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

- fixed password change notification

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
@@ -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">&times;</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>