Commit da9dd50b8802273dcc26ff735c569b8e1a9cfd58

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

- changed navbar to include logo on the left and time centered.

1 1
2 # BUGS 2 # BUGS
3 3
  4 +- config/logger.yaml ainda é do cherrypy...
  5 +- servir imagens das perguntas
  6 +- hints nao funciona
4 - fazer renderer para formulas com mathjax serverside (mathjax-node). 7 - fazer renderer para formulas com mathjax serverside (mathjax-node).
5 - fazer renderer para imagens, com links /file?ref=xpto;name=zzz.jpg 8 - fazer renderer para imagens, com links /file?ref=xpto;name=zzz.jpg
6 - fazer renderer para linguagem assembly mips? 9 - fazer renderer para linguagem assembly mips?
7 -- servir imagens das perguntas  
8 -- hints nao funciona  
9 -- uniformizar question.py com a de aprendizations...  
10 - permitir eliminar teste a decorrer 10 - permitir eliminar teste a decorrer
11 - eventos unfocus? 11 - eventos unfocus?
12 - servidor nao esta a lidar com eventos scroll/resize. ignorar? 12 - servidor nao esta a lidar com eventos scroll/resize. ignorar?
@@ -39,6 +39,7 @@ @@ -39,6 +39,7 @@
39 39
40 # FIXED 40 # FIXED
41 41
  42 +- uniformizar question.py com a de aprendizations...
42 - qual a diferenca entre md_to_html e md_to_html_review, parece desnecessario haver dois. 43 - qual a diferenca entre md_to_html e md_to_html_review, parece desnecessario haver dois.
43 - converter markdown para mistune. 44 - converter markdown para mistune.
44 - como alterar configuracao para mostrar logs de debug? 45 - como alterar configuracao para mostrar logs de debug?
@@ -321,10 +321,10 @@ class AdminHandler(BaseHandler): @@ -321,10 +321,10 @@ class AdminHandler(BaseHandler):
321 def main(): 321 def main():
322 # --- Commandline argument parsing 322 # --- Commandline argument parsing
323 argparser = argparse.ArgumentParser(description='Server for online tests. Enrolled students and tests have to be previously configured. Please read the documentation included with this software before running the server.') 323 argparser = argparse.ArgumentParser(description='Server for online tests. Enrolled students and tests have to be previously configured. Please read the documentation included with this software before running the server.')
324 - argparser.add_argument('--debug', action='store_true',  
325 - help='Show datastructures when rendering questions')  
326 - argparser.add_argument('--allow-all', action='store_true', help='Students are initially allowed to login (can be denied later)')  
327 argparser.add_argument('testfile', type=str, nargs='+', help='test/exam in YAML format.') # FIXME only one exam supported at the moment 324 argparser.add_argument('testfile', type=str, nargs='+', help='test/exam in YAML format.') # FIXME only one exam supported at the moment
  325 + argparser.add_argument('--allow-all', action='store_true', help='Students are initially allowed to login (can be denied later)')
  326 + argparser.add_argument('--debug', action='store_true',
  327 + help='Enable debug messages.')
328 arg = argparser.parse_args() 328 arg = argparser.parse_args()
329 329
330 # --- Setup logging 330 # --- Setup logging
@@ -347,14 +347,14 @@ def main(): @@ -347,14 +347,14 @@ def main():
347 } 347 }
348 348
349 try: 349 try:
350 - app = App(config) 350 + testapp = App(config)
351 except AppException: 351 except AppException:
352 logging.critical('Failed to start application.') 352 logging.critical('Failed to start application.')
353 sys.exit(1) 353 sys.exit(1)
354 354
355 # --- create web application 355 # --- create web application
356 try: 356 try:
357 - webapp = WebApplication(app, debug=arg.debug) 357 + webapp = WebApplication(testapp, debug=arg.debug)
358 except Exception as e: 358 except Exception as e:
359 logging.critical('Can\'t start application.') 359 logging.critical('Can\'t start application.')
360 raise e 360 raise e
templates/admin.html
@@ -22,7 +22,7 @@ @@ -22,7 +22,7 @@
22 </head> 22 </head>
23 <!-- ===================================================================== --> 23 <!-- ===================================================================== -->
24 <body> 24 <body>
25 -<nav class="navbar navbar-expand-sm fixed-top navbar-dark bg-primary"> 25 +<nav class="navbar navbar-expand-sm fixed-top navbar-dark bg-danger">
26 <a class="navbar-brand" href="#">Admin</a> 26 <a class="navbar-brand" href="#">Admin</a>
27 <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation"> 27 <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
28 <span class="navbar-toggler-icon"></span> 28 <span class="navbar-toggler-icon"></span>
@@ -38,7 +38,7 @@ @@ -38,7 +38,7 @@
38 <!-- right --> 38 <!-- right -->
39 <ul class="navbar-nav"> 39 <ul class="navbar-nav">
40 <li class="nav-item dropdown"> 40 <li class="nav-item dropdown">
41 - <a class="nav-link dropdown-toggle" href="#" id="navbarDropdownAluno" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> 41 + <a class="nav-link dropdown-toggle active" href="#" id="navbarDropdownAluno" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
42 Aluno 42 Aluno
43 </a> 43 </a>
44 <div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdownAluno"> 44 <div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdownAluno">
templates/login.html
1 <!DOCTYPE html> 1 <!DOCTYPE html>
2 <html lang="en"> 2 <html lang="en">
3 - <head>  
4 - <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">  
5 - <meta charset="utf-8">  
6 -  
7 - <link rel="icon" href="/static/favicon.ico">  
8 - <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">  
9 -  
10 - <title>Teste</title>  
11 - </head>  
12 -<!-- ===================================================================== -->  
13 - <body>  
14 - <div class="container-fluid">  
15 - <div class="card bg-light border-secondary mb-3">  
16 - <div class="card-body">  
17 - <div class="row">  
18 -  
19 - <div class="col-sm-4">  
20 - <img src="/static/logo_horizontal.png" class="img-responsive" width="60%">  
21 - </div>  
22 -  
23 - <div class="col-sm-8"> 3 +<head>
  4 + <title>Teste</title>
  5 + <link rel="icon" href="/static/favicon.ico">
  6 +
  7 + <meta charset="utf-8">
  8 + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  9 +
  10 + <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
  11 +
  12 +</head>
  13 +<!-- =================================================================== -->
  14 +<body>
  15 + <div class="container-fluid">
  16 + <div class="card bg-light border-secondary mb-3">
  17 + <div class="card-body">
  18 + <div class="row">
  19 +
  20 + <div class="col-sm-4">
  21 + <img src="/static/logo_horizontal.png" class="img-responsive" width="60%">
  22 + </div>
  23 +
  24 + <div class="col-sm-8">
24 <h4>Identificação:</h4> 25 <h4>Identificação:</h4>
25 - <form method="post" action="/login" class="form-signin">  
26 - {% module xsrf_form_html() %}  
27 - <div class="form-group">  
28 - <input type="text" name="uid" class="form-control" placeholder="Número" required autofocus>  
29 - <input type="password" name="pw" class="form-control" placeholder="Password" required>  
30 - <p> {{ error }} </p>  
31 - </div>  
32 - <button class="btn btn-primary" type="submit">  
33 - <i class="fa fa-sign-in" aria-hidden="true"></i> Entrar  
34 - </button>  
35 - </form>  
36 - </div> 26 +
  27 + <form method="post" action="/login" class="form-signin">
  28 + {% module xsrf_form_html() %}
  29 + <div class="form-group">
  30 + <input type="text" name="uid" class="form-control" placeholder="Número" required autofocus>
  31 + <input type="password" name="pw" class="form-control" placeholder="Password" required>
  32 + <p> {{ error }} </p>
  33 + </div>
  34 + <button class="btn btn-primary" type="submit">
  35 + <i class="fa fa-sign-in" aria-hidden="true"></i> Entrar
  36 + </button>
  37 + </form>
37 </div> 38 </div>
38 </div> 39 </div>
39 </div> 40 </div>
40 - </div> <!-- container --> 41 + </div>
  42 + </div> <!-- container -->
41 43
42 <!-- Scripts --> 44 <!-- Scripts -->
43 - <script src="/static/js/jquery.min.js"></script>  
44 - <script src="/static/popper/umd/popper.min.js"></script>  
45 - <script src="/static/bootstrap/js/bootstrap.min.js"></script> 45 + <script src="/static/js/jquery.min.js"></script>
  46 + <script src="/static/popper/umd/popper.min.js"></script>
  47 + <script src="/static/bootstrap/js/bootstrap.min.js"></script>
46 48
47 - </body> 49 +</body>
48 </html> 50 </html>
templates/test.html
@@ -30,25 +30,40 @@ @@ -30,25 +30,40 @@
30 30
31 <nav class="navbar navbar-expand-sm fixed-top navbar-dark bg-dark"> 31 <nav class="navbar navbar-expand-sm fixed-top navbar-dark bg-dark">
32 <a class="navbar-brand" href="#"> 32 <a class="navbar-brand" href="#">
33 - <!-- <i class="fa fa-clock-o" aria-hidden="true"></i> -->  
34 - <span id="clock"> --:-- </span> 33 + <img src="/static/logo_navbar.png" height="30" alt="">
35 </a> 34 </a>
36 <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarText" aria-controls="navbarText" aria-expanded="false" aria-label="Toggle navigation"> 35 <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarText" aria-controls="navbarText" aria-expanded="false" aria-label="Toggle navigation">
37 <span class="navbar-toggler-icon"></span> 36 <span class="navbar-toggler-icon"></span>
38 </button> 37 </button>
39 38
40 <div class="collapse navbar-collapse" id="navbarText"> 39 <div class="collapse navbar-collapse" id="navbarText">
41 - <ul class="navbar-nav mr-auto"> 40 + <ul class="nav navbar-nav">
  41 + <li class="nav-item"></li>
42 </ul> 42 </ul>
43 43
44 - <span class="navbar-text">  
45 - <i class="fa fa-user" aria-hidden="true"></i>  
46 - <span id="name">{{ escape(t['student']['name']) }}</span>  
47 - (<span id="number">{{ escape(t['student']['number']) }}</span>)  
48 - <span class="caret"></span>  
49 - </span> 44 + <ul class="nav navbar-nav mx-auto">
  45 + <li class="nav-item"><h5>
  46 + <span class="navbar-text" id="clock"> --:-- </span>
  47 + </h5>
  48 + </li>
  49 + </ul>
  50 +
  51 + <ul class="nav navbar-nav">
  52 + <li class="nav-item">
  53 + <span class="navbar-text">
  54 + <i class="fa fa-user" aria-hidden="true"></i>
  55 + <span id="name">{{ escape(t['student']['name']) }}</span>
  56 + (<span id="number">{{ escape(t['student']['number']) }}</span>)
  57 + <span class="caret"></span>
  58 + </span>
  59 + </li>
  60 + </ul>
50 </div> 61 </div>
51 </nav> 62 </nav>
  63 +
  64 +
  65 +
  66 +<!-- ===================================================================== -->
52 <div class="container"> 67 <div class="container">
53 68
54 <div class="jumbotron"> 69 <div class="jumbotron">