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.

BUGS.md
1 1  
2 2 # BUGS
3 3  
  4 +- config/logger.yaml ainda é do cherrypy...
  5 +- servir imagens das perguntas
  6 +- hints nao funciona
4 7 - fazer renderer para formulas com mathjax serverside (mathjax-node).
5 8 - fazer renderer para imagens, com links /file?ref=xpto;name=zzz.jpg
6 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 10 - permitir eliminar teste a decorrer
11 11 - eventos unfocus?
12 12 - servidor nao esta a lidar com eventos scroll/resize. ignorar?
... ... @@ -39,6 +39,7 @@
39 39  
40 40 # FIXED
41 41  
  42 +- uniformizar question.py com a de aprendizations...
42 43 - qual a diferenca entre md_to_html e md_to_html_review, parece desnecessario haver dois.
43 44 - converter markdown para mistune.
44 45 - como alterar configuracao para mostrar logs de debug?
... ...
serve.py
... ... @@ -321,10 +321,10 @@ class AdminHandler(BaseHandler):
321 321 def main():
322 322 # --- Commandline argument parsing
323 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 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 328 arg = argparser.parse_args()
329 329  
330 330 # --- Setup logging
... ... @@ -347,14 +347,14 @@ def main():
347 347 }
348 348  
349 349 try:
350   - app = App(config)
  350 + testapp = App(config)
351 351 except AppException:
352 352 logging.critical('Failed to start application.')
353 353 sys.exit(1)
354 354  
355 355 # --- create web application
356 356 try:
357   - webapp = WebApplication(app, debug=arg.debug)
  357 + webapp = WebApplication(testapp, debug=arg.debug)
358 358 except Exception as e:
359 359 logging.critical('Can\'t start application.')
360 360 raise e
... ...
templates/admin.html
... ... @@ -22,7 +22,7 @@
22 22 </head>
23 23 <!-- ===================================================================== -->
24 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 26 <a class="navbar-brand" href="#">Admin</a>
27 27 <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
28 28 <span class="navbar-toggler-icon"></span>
... ... @@ -38,7 +38,7 @@
38 38 <!-- right -->
39 39 <ul class="navbar-nav">
40 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 42 Aluno
43 43 </a>
44 44 <div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdownAluno">
... ...
templates/login.html
1 1 <!DOCTYPE html>
2 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 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 38 </div>
38 39 </div>
39 40 </div>
40   - </div> <!-- container -->
  41 + </div>
  42 + </div> <!-- container -->
41 43  
42 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 50 </html>
... ...
templates/test.html
... ... @@ -30,25 +30,40 @@
30 30  
31 31 <nav class="navbar navbar-expand-sm fixed-top navbar-dark bg-dark">
32 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 34 </a>
36 35 <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarText" aria-controls="navbarText" aria-expanded="false" aria-label="Toggle navigation">
37 36 <span class="navbar-toggler-icon"></span>
38 37 </button>
39 38  
40 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 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 61 </div>
51 62 </nav>
  63 +
  64 +
  65 +
  66 +<!-- ===================================================================== -->
52 67 <div class="container">
53 68  
54 69 <div class="jumbotron">
... ...