Commit c869049314e3e00516e27dbcfd7af8f107b832ef
1 parent
f3635fa0
Exists in
master
and in
1 other branch
upgrade to bootstrap 5.1
remove fontawesome and use bootstrap-icons instead
Showing
13 changed files
with
262 additions
and
254 deletions
Show diff stats
BUGS.md
| ... | ... | @@ -2,6 +2,7 @@ |
| 2 | 2 | |
| 3 | 3 | ## BUGS |
| 4 | 4 | |
| 5 | +- review por nome e numero no cabecalho jumbotron | |
| 5 | 6 | - talvez a base de dados devesse ter como chave do teste um id que fosse único |
| 6 | 7 | desse teste particular (não um auto counter, nem ref do teste) |
| 7 | 8 | - em caso de timeout na submissão (e.g. JOBE ou script nao responde) a correcção | ... | ... |
package.json
| ... | ... | @@ -3,7 +3,8 @@ |
| 3 | 3 | "email": "mjsb@uevora.pt", |
| 4 | 4 | "dependencies": { |
| 5 | 5 | "@fortawesome/fontawesome-free": "^5.15.3", |
| 6 | - "bootstrap": "^4.6.0", | |
| 6 | + "bootstrap": "^5.1.0", | |
| 7 | + "bootstrap-icons": "^1.7.2", | |
| 7 | 8 | "codemirror": "^5.61.1", |
| 8 | 9 | "datatables": "^1.10", |
| 9 | 10 | "jquery": "^3.6.0", | ... | ... |
perguntations/app.py
| ... | ... | @@ -156,7 +156,7 @@ class App(): |
| 156 | 156 | |
| 157 | 157 | # ------------------------------------------------------------------------ |
| 158 | 158 | async def set_password(self, uid: str, password: str) -> None: |
| 159 | - '''change password on the database''' | |
| 159 | + '''change password in the database''' | |
| 160 | 160 | with Session(self._engine, future=True) as session: |
| 161 | 161 | query = select(Student).where(Student.id == uid) |
| 162 | 162 | student = session.execute(query).scalar_one() | ... | ... |
perguntations/serve.py
| ... | ... | @@ -327,7 +327,7 @@ class AdminHandler(BaseHandler): |
| 327 | 327 | ''' |
| 328 | 328 | cmd = self.get_body_argument('cmd', None) |
| 329 | 329 | value = self.get_body_argument('value', None) |
| 330 | - logger.debug('POST /admin (cmd=%s, value=%s)') | |
| 330 | + logger.debug('POST /admin (cmd=%s, value=%s)', cmd, value) | |
| 331 | 331 | |
| 332 | 332 | if cmd == 'allow': |
| 333 | 333 | self.testapp.allow_student(value) |
| ... | ... | @@ -338,7 +338,7 @@ class AdminHandler(BaseHandler): |
| 338 | 338 | elif cmd == 'deny_all': |
| 339 | 339 | self.testapp.deny_all_students() |
| 340 | 340 | elif cmd == 'reset_password': |
| 341 | - await self.testapp.set_password(uid=value, pw='') | |
| 341 | + await self.testapp.set_password(uid=value, password='') | |
| 342 | 342 | elif cmd == 'insert_student' and value is not None: |
| 343 | 343 | student = json.loads(value) |
| 344 | 344 | await self.testapp.insert_new_student(uid=student['number'], | ... | ... |
perguntations/templates/admin.html
| ... | ... | @@ -22,7 +22,7 @@ |
| 22 | 22 | <!-- Scripts --> |
| 23 | 23 | <script src="/static/jquery/jquery.min.js"></script> |
| 24 | 24 | <!-- <script defer src="/static/popper.js/popper.min.js"></script> --> |
| 25 | - <script defer src="/static/fontawesome-free/js/all.min.js"></script> | |
| 25 | + <!-- <script defer src="/static/fontawesome-free/js/all.min.js"></script> --> | |
| 26 | 26 | <script defer src="/static/bootstrap/js/bootstrap.bundle.min.js"></script> |
| 27 | 27 | <script defer src="/static/datatables/js/jquery.dataTables.min.js"></script> |
| 28 | 28 | <script defer src="/static/underscore/underscore-min.js"></script> |
| ... | ... | @@ -31,80 +31,80 @@ |
| 31 | 31 | </head> |
| 32 | 32 | <!-- ===================================================================== --> |
| 33 | 33 | <body> |
| 34 | -<nav class="navbar navbar-expand-sm fixed-top navbar-dark bg-danger"> | |
| 35 | - <a class="navbar-brand" href="#"> | |
| 36 | - <img src="/static/logo_horizontal.png" height="30" alt=""> | |
| 37 | - </a> | |
| 38 | - <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation"> | |
| 39 | - <span class="navbar-toggler-icon"></span> | |
| 40 | - </button> | |
| 41 | - | |
| 42 | - <div class="collapse navbar-collapse" id="navbarNavDropdown"> | |
| 43 | - <!-- left --> | |
| 44 | - <span class="navbar-text mr-auto"></span> | |
| 45 | - | |
| 46 | - <!-- center --> | |
| 47 | - <span class="navbar-text mr-auto"><span id="clock"> --:-- </span></span> | |
| 48 | - | |
| 49 | - <!-- right --> | |
| 50 | - <ul class="navbar-nav"> | |
| 51 | - <li class="nav-item dropdown"> | |
| 52 | - <a class="nav-link dropdown-toggle active" href="#" id="navbarDropdownAluno" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | |
| 53 | - Acções | |
| 54 | - </a> | |
| 55 | - <div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdownAluno"> | |
| 56 | - <a class="dropdown-item" href="#" id="novo_aluno" data-toggle="modal" data-target="#novo_aluno_modal">Novo aluno...</a> | |
| 57 | - <a class="dropdown-item" href="#" id="reset_password_menu" data-toggle="modal" data-target="#reset_password_modal">Limpar password...</a> | |
| 58 | - <a class="dropdown-item" href="#" id="allow_all">Autorizar todos</a> | |
| 59 | - <a class="dropdown-item" href="#" id="deny_all">Desautorizar todos</a> | |
| 60 | - <div class="dropdown-divider"></div> | |
| 61 | - <a class="dropdown-item" href="/logout">Sair</a> | |
| 62 | - </div> | |
| 63 | - </li> | |
| 64 | - </ul> | |
| 65 | - </div> | |
| 66 | -</nav> | |
| 34 | + <nav class="navbar navbar-expand-sm fixed-top navbar-dark bg-danger"> | |
| 35 | + <div class="container-fluid"> | |
| 36 | + <a class="navbar-brand" href="#"> | |
| 37 | + <img src="/static/logo_horizontal.png" height="30" alt=""> | |
| 38 | + </a> | |
| 39 | + <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation"> | |
| 40 | + <span class="navbar-toggler-icon"></span> | |
| 41 | + </button> | |
| 42 | + <div class="collapse navbar-collapse" id="navbarNavDropdown"> | |
| 43 | + <!-- left --> | |
| 44 | + <span class="navbar-text mr-auto"></span> | |
| 45 | + | |
| 46 | + <!-- center --> | |
| 47 | + <span class="navbar-text mr-auto"><span id="clock"> --:-- </span></span> | |
| 48 | + | |
| 49 | + <!-- right --> | |
| 50 | + <ul class="navbar-nav"> | |
| 51 | + <li class="nav-item dropdown"> | |
| 52 | + <a class="nav-link dropdown-toggle" href="#" id="navbarDropdownAluno" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | |
| 53 | + Acções | |
| 54 | + </a> | |
| 55 | + <ul class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdownAluno"> | |
| 56 | + <li><a class="dropdown-item" href="#" id="novo_aluno" data-bs-toggle="modal" data-bs-target="#novo_aluno_modal">Novo aluno...</a></li> | |
| 57 | + <li><a class="dropdown-item" href="#" id="reset_password_menu" data-bs-toggle="modal" data-bs-target="#reset_password_modal">Limpar password...</a></li> | |
| 58 | + <li><a class="dropdown-item" href="#" id="allow_all">Autorizar todos</a></li> | |
| 59 | + <li><a class="dropdown-item" href="#" id="deny_all">Desautorizar todos</a></li> | |
| 60 | + <li><hr class="dropdown-divider"></hr></li> | |
| 61 | + <li><a class="dropdown-item" href="/logout">Sair</a></li> | |
| 62 | + </ul> | |
| 63 | + </li> | |
| 64 | + </ul> | |
| 65 | + </div> | |
| 66 | + </div> | |
| 67 | + </nav> | |
| 67 | 68 | <!-- ===================================================================== --> |
| 68 | -<div class="container-fluid"> | |
| 69 | - | |
| 70 | - <div class="jumbotron"> | |
| 71 | - <h3 id="title"></h3> | |
| 72 | - <p> | |
| 73 | - Referência: <code id="ref">--</code><br> | |
| 74 | - Ficheiro de configuração do teste: <code id="filename">--</code><br> | |
| 75 | - Directório com os testes entregues: <code id="answers_dir">--</code><br> | |
| 76 | - Base de dados: <code id="database">--</code><br> | |
| 77 | - </p> | |
| 78 | - <p> | |
| 79 | - <a href="/adminwebservice?cmd=testcsv" class="btn btn-primary">Obter CSV das notas</a> | |
| 80 | - <a href="/adminwebservice?cmd=questionscsv" class="btn btn-primary">Obter CSV detalhado</a> | |
| 81 | - </p> | |
| 82 | - </div> <!-- jumbotron --> | |
| 83 | - | |
| 84 | - <table class="table table-sm table-striped" style="width:100%" id="students_table"> | |
| 85 | - <thead class="thead thead-light"> | |
| 86 | - <tr> | |
| 87 | - <th>#</th> | |
| 88 | - <th>Ok</th> | |
| 89 | - <th>Número</th> | |
| 90 | - <th>Nome</th> | |
| 91 | - <th>Estado</th> | |
| 92 | - <th>Nota</th> | |
| 93 | - </tr> | |
| 94 | - </thead> | |
| 95 | - </table> | |
| 96 | - | |
| 97 | -</div> <!-- container --> | |
| 69 | + <div class="container-fluid"> | |
| 70 | + | |
| 71 | + <div class="bg-light p-3"> | |
| 72 | + <h3 id="title"></h3> | |
| 73 | + <ul> | |
| 74 | + <li>Referência: <code id="ref">--</code><br></li> | |
| 75 | + <li>Ficheiro de configuração: <code id="filename">--</code><br></li> | |
| 76 | + <li>Directório com os testes entregues: <code id="answers_dir">--</code><br></li> | |
| 77 | + <li>Base de dados: <code id="database">--</code><br></li> | |
| 78 | + </ul> | |
| 79 | + <p> | |
| 80 | + <a href="/adminwebservice?cmd=testcsv" class="btn btn-primary">Obter CSV das notas</a> | |
| 81 | + <a href="/adminwebservice?cmd=questionscsv" class="btn btn-primary">Obter CSV detalhado</a> | |
| 82 | + </p> | |
| 83 | + </div> | |
| 84 | + <br> | |
| 85 | + <table class="table table-sm table-striped" style="width:100%" id="students_table"> | |
| 86 | + <thead class="thead thead-light"> | |
| 87 | + <tr> | |
| 88 | + <th>#</th> | |
| 89 | + <th>Autoriz.</th> | |
| 90 | + <th>Número</th> | |
| 91 | + <th>Nome</th> | |
| 92 | + <th>Estado</th> | |
| 93 | + <th>Nota</th> | |
| 94 | + </tr> | |
| 95 | + </thead> | |
| 96 | + </table> | |
| 97 | + | |
| 98 | + </div> <!-- container --> | |
| 98 | 99 | <!-- ===================================================================== --> |
| 99 | 100 | |
| 100 | 101 | <!-- modal: inserir novo aluno --> |
| 101 | -<div class="modal" id="novo_aluno_modal"> | |
| 102 | - <div class="modal-dialog" role="document"> | |
| 102 | +<div class="modal fade" id="novo_aluno_modal" aria-hidden="true"> | |
| 103 | + <div class="modal-dialog"> | |
| 103 | 104 | <div class="modal-content"> |
| 104 | 105 | |
| 105 | 106 | <div class="modal-header"> |
| 106 | 107 | <h5 class="modal-title">Inserir novo aluno</h5> |
| 107 | - <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> | |
| 108 | 108 | </div> |
| 109 | 109 | |
| 110 | 110 | <div class="modal-body"> |
| ... | ... | @@ -120,11 +120,11 @@ |
| 120 | 120 | <input type="text" class="form-control" id="novo_nome" value=""> |
| 121 | 121 | </div> |
| 122 | 122 | </div> |
| 123 | - | |
| 124 | 123 | </div> |
| 125 | 124 | |
| 126 | 125 | <div class="modal-footer"> |
| 127 | - <button id="inserir_novo_aluno" class="btn btn-primary" role="button" data-dismiss="modal">Inserir</button> | |
| 126 | + <button type="button" class="btn btn-primary" id="inserir_novo_aluno" data-bs-dismiss="modal">Inserir</button> | |
| 127 | + <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancelar</button> | |
| 128 | 128 | </div> |
| 129 | 129 | |
| 130 | 130 | </div> |
| ... | ... | @@ -132,13 +132,12 @@ |
| 132 | 132 | </div> |
| 133 | 133 | |
| 134 | 134 | <!-- modal: reset password --> |
| 135 | -<div class="modal" id="reset_password_modal"> | |
| 136 | - <div class="modal-dialog" role="document"> | |
| 135 | +<div class="modal fade" id="reset_password_modal"> | |
| 136 | + <div class="modal-dialog"> | |
| 137 | 137 | <div class="modal-content"> |
| 138 | 138 | |
| 139 | 139 | <div class="modal-header"> |
| 140 | - <h5 class="modal-title">Reset password</h5> | |
| 141 | - <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> | |
| 140 | + <h5 class="modal-title">Limpar password do aluno</h5> | |
| 142 | 141 | </div> |
| 143 | 142 | |
| 144 | 143 | <div class="modal-body"> |
| ... | ... | @@ -151,7 +150,8 @@ |
| 151 | 150 | </div> |
| 152 | 151 | |
| 153 | 152 | <div class="modal-footer"> |
| 154 | - <button id="reset_password" class="btn btn-primary" role="button" data-dismiss="modal">Reset password</button> | |
| 153 | + <button type="button" class="btn btn-primary" id="reset_password" data-bs-dismiss="modal">Limpar password</button> | |
| 154 | + <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancelar</button> | |
| 155 | 155 | </div> |
| 156 | 156 | </div> |
| 157 | 157 | </div> <!-- modal --> | ... | ... |
perguntations/templates/grade.html
| ... | ... | @@ -8,41 +8,44 @@ |
| 8 | 8 | |
| 9 | 9 | <!-- Styles --> |
| 10 | 10 | <link rel="stylesheet" type="text/css" href="/static/bootstrap/css/bootstrap.min.css"> |
| 11 | + <link rel="stylesheet" type="text/css" href="/static/bootstrap-icons/font/bootstrap-icons.css"> | |
| 11 | 12 | |
| 12 | 13 | <link rel="stylesheet" type="text/css" href="/static/css/test.css"> |
| 13 | 14 | |
| 14 | 15 | <!-- Scripts --> |
| 15 | 16 | <script src="/static/jquery/jquery.min.js"></script> |
| 16 | 17 | <!-- <script defer src="/static/popper.js/popper.min.js"></script> --> |
| 17 | - <script defer src="/static/fontawesome-free/js/all.min.js"></script> | |
| 18 | + <!-- <script defer src="/static/fontawesome-free/js/all.min.js"></script> --> | |
| 18 | 19 | <script defer src="/static/bootstrap/js/bootstrap.bundle.min.js"></script> |
| 19 | 20 | </head> |
| 20 | 21 | <!-- ================================================================= --> |
| 21 | 22 | <body> |
| 22 | - | |
| 23 | 23 | <nav class="navbar navbar-expand-sm fixed-top navbar-dark bg-dark"> |
| 24 | - <a class="navbar-brand" href="#">{{t['title']}}</a> | |
| 25 | - <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarText" aria-controls="navbarText" aria-expanded="false" aria-label="Toggle navigation"> | |
| 26 | - <span class="navbar-toggler-icon"></span> | |
| 27 | - </button> | |
| 24 | + <div class="container-fluid"> | |
| 25 | + <a class="navbar-brand" href="#">{{t['title']}}</a> | |
| 26 | + <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarText" aria-controls="navbarText" aria-expanded="false" aria-label="Toggle navigation"> | |
| 27 | + <span class="navbar-toggler-icon"></span> | |
| 28 | + </button> | |
| 28 | 29 | |
| 29 | - <div class="collapse navbar-collapse" id="navbarText"> | |
| 30 | - <ul class="navbar-nav mr-auto"> | |
| 31 | - </ul> | |
| 32 | - <span class="navbar-text"> | |
| 33 | - <i class="fas fa-user" aria-hidden="true"></i> | |
| 34 | - <span id="name">{{ escape(name) }}</span> | |
| 35 | - (<span id="number">{{ escape(uid) }}</span>) | |
| 36 | - <span class="caret"></span> | |
| 37 | - </span> | |
| 30 | + <div class="collapse navbar-collapse" id="navbarText"> | |
| 31 | + <ul class="navbar-nav mr-auto"> | |
| 32 | + </ul> | |
| 33 | + <span class="navbar-text"> | |
| 34 | + <!-- <i class="fas fa-user" aria-hidden="true"></i> --> | |
| 35 | + <span id="name">{{ escape(name) }}</span> | |
| 36 | + (<span id="number">{{ escape(uid) }}</span>) | |
| 37 | + <!-- <span class="caret"></span> --> | |
| 38 | + </span> | |
| 39 | + </div> | |
| 38 | 40 | </div> |
| 39 | 41 | </nav> |
| 40 | 42 | <!-- ================================================================== --> |
| 41 | 43 | <div class="container"> |
| 42 | - <div class="jumbotron"> | |
| 44 | + <div class="bg-light p-3"> | |
| 43 | 45 | {% if t['state'] == 'CORRECTED' %} |
| 44 | 46 | {% if t['grade'] - t['scale'][0] >= 0.75*(t['scale'][1] - t['scale'][0]) %} |
| 45 | - <i class="fas fa-thumbs-up fa-5x text-success" aria-hidden="true"></i> | |
| 47 | + <h1 class="text-success"><i class="bi bi-hand-thumbs-up-fill"></i></h1> | |
| 48 | + <!-- <i class="fas fa-thumbs-up fa-5x text-success" aria-hidden="true"></i> --> | |
| 46 | 49 | {% end %} |
| 47 | 50 | <h3>Resultado: |
| 48 | 51 | <strong>{{ f'{round(t["grade"], 3)}' }}</strong> |
| ... | ... | @@ -54,8 +57,8 @@ |
| 54 | 57 | <h3>Foi registada a sua desistência da prova.</h3> |
| 55 | 58 | {% end %} |
| 56 | 59 | |
| 57 | - <p><a href="/logout" class="btn btn-primary btn-lg active" role="button">Clique aqui para terminar</a></p> | |
| 58 | - </div> <!-- jumbotron --> | |
| 60 | + <p><a href="/logout" class="btn btn-primary btn-lg active" role="button">Sair do teste</a></p> | |
| 61 | + </div> | |
| 59 | 62 | </div> <!-- container --> |
| 60 | 63 | </body> |
| 61 | 64 | </html> | ... | ... |
perguntations/templates/login.html
| ... | ... | @@ -3,18 +3,10 @@ |
| 3 | 3 | <head> |
| 4 | 4 | <title>Teste</title> |
| 5 | 5 | <link rel="icon" href="/static/favicon.ico"> |
| 6 | - | |
| 7 | 6 | <meta charset="UTF-8"> |
| 8 | 7 | <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> |
| 9 | - | |
| 10 | - <!-- Styles --> | |
| 11 | 8 | <link rel="stylesheet" type="text/css" href="/static/bootstrap/css/bootstrap.min.css"> |
| 12 | - | |
| 13 | - <!-- Scripts --> | |
| 14 | - <script src="/static/jquery/jquery.min.js"></script> | |
| 15 | - <script defer src="/static/fontawesome-free/js/all.min.js"></script> | |
| 16 | 9 | <script defer src="/static/bootstrap/js/bootstrap.bundle.min.js"></script> |
| 17 | - | |
| 18 | 10 | </head> |
| 19 | 11 | <!-- =================================================================== --> |
| 20 | 12 | <body> |
| ... | ... | @@ -22,29 +14,26 @@ |
| 22 | 14 | <div class="card bg-light border-secondary mt-3"> |
| 23 | 15 | <div class="card-body"> |
| 24 | 16 | <div class="row"> |
| 25 | - | |
| 26 | - <div class="col-sm-9"> | |
| 17 | + <div class="col-sm-8"> | |
| 27 | 18 | <img src="/static/logo_horizontal_login.png" class="img-responsive mb-3" width="50%" alt="Universidade de Évora"> |
| 28 | 19 | </div> |
| 29 | - | |
| 30 | - <div class="col-sm-3"> | |
| 31 | - <h4>Identificação:</h4> | |
| 32 | - | |
| 20 | + <div class="col-sm-4"> | |
| 21 | + <h5>Identificação</h5> | |
| 33 | 22 | <form method="post" action="/login" class="form-signin"> |
| 34 | 23 | {% module xsrf_form_html() %} |
| 35 | - <div class="form-group"> | |
| 24 | + <div class="mb-3"> | |
| 36 | 25 | <input type="text" name="uid" class="form-control mb-3" placeholder="Número" required autofocus> |
| 37 | 26 | <input type="password" name="pw" class="form-control mb-3" placeholder="Password" required> |
| 38 | 27 | <p> {{ error }} </p> |
| 39 | 28 | </div> |
| 40 | 29 | <button class="btn btn-primary" type="submit"> |
| 41 | - <i class="fas fa-sign-in-alt" aria-hidden="true"></i> Entrar | |
| 30 | + Entrar | |
| 42 | 31 | </button> |
| 43 | 32 | </form> |
| 44 | 33 | </div> |
| 45 | 34 | </div> |
| 46 | 35 | </div> |
| 47 | 36 | </div> |
| 48 | - </div> <!-- container --> | |
| 37 | + </div> | |
| 49 | 38 | </body> |
| 50 | 39 | </html> | ... | ... |
perguntations/templates/review-question-checkbox.html
| ... | ... | @@ -3,51 +3,57 @@ |
| 3 | 3 | |
| 4 | 4 | {% block answer %} |
| 5 | 5 | <fieldset data-role="controlgroup"> |
| 6 | - <ul class="list-group"> | |
| 7 | - {% for n, opt in enumerate(q['options']) %} | |
| 8 | - <li class="list-group-item"> | |
| 9 | - <div class="d-flex flex-row"> | |
| 10 | - {% if q['answer'] is not None and str(n) in q['answer'] %} | |
| 11 | - <div class="p-2"> | |
| 12 | - <i class="far fa-check-square" aria-hidden="true"></i> | |
| 13 | - </div> | |
| 14 | - <div class="p-2"> | |
| 15 | - {{ md(opt) }} | |
| 16 | - </div> | |
| 17 | - <div class="ml-auto p-2"> | |
| 18 | - {% if q['correct'][n] > 0 %} | |
| 19 | - <div class="text-right text-success"> | |
| 20 | - <i class="fas fa-check" aria-hidden="true"></i> | |
| 21 | - </div> | |
| 22 | - {% else %} | |
| 23 | - <div class="text-right text-danger"> | |
| 24 | - <i class="fas fa-times" aria-hidden="true"></i> | |
| 25 | - </div> | |
| 26 | - {% end %} | |
| 27 | - </div> | |
| 6 | + <ul class="list-group"> | |
| 7 | + {% for n, opt in enumerate(q['options']) %} | |
| 8 | + <li class="list-group-item"> | |
| 9 | + <div class="d-flex flex-row"> | |
| 10 | + {% if q['answer'] is not None and str(n) in q['answer'] %} | |
| 11 | + <div class="p-2"> | |
| 12 | + <i class="bi bi-check-square"></i> | |
| 13 | + <!-- <i class="far fa-check-square" aria-hidden="true"></i> --> | |
| 14 | + </div> | |
| 15 | + <div class="p-2"> | |
| 16 | + {{ md(opt) }} | |
| 17 | + </div> | |
| 18 | + <div class="ml-auto p-2"> | |
| 19 | + {% if q['correct'][n] > 0 %} | |
| 20 | + <div class="text-right text-success"> | |
| 21 | + <i class="bi bi-check-lg"></i> | |
| 22 | + <!-- <i class="fas fa-check" aria-hidden="true"></i> --> | |
| 23 | + </div> | |
| 24 | + {% else %} | |
| 25 | + <div class="text-right text-danger"> | |
| 26 | + <i class="bi bi-x-lg"></i> | |
| 27 | + <!-- <i class="fas fa-times" aria-hidden="true"></i> --> | |
| 28 | + </div> | |
| 29 | + {% end %} | |
| 30 | + </div> | |
| 28 | 31 | |
| 29 | - {% else %} | |
| 30 | - <div class="p-2"> | |
| 31 | - <i class="far fa-square" aria-hidden="true"></i> | |
| 32 | - </div> | |
| 33 | - <div class="p-2"> | |
| 34 | - {{ md(opt) }} | |
| 35 | - </div> | |
| 36 | - <div class="ml-auto p-2"> | |
| 37 | - {% if q['correct'][n] > 0 %} | |
| 38 | - <div class="text-right text-danger"> | |
| 39 | - <i class="fas fa-times" aria-hidden="true"></i> | |
| 40 | - </div> | |
| 41 | - {% else %} | |
| 42 | - <div class="text-right text-success"> | |
| 43 | - <i class="fas fa-check" aria-hidden="true"></i> | |
| 44 | - </div> | |
| 45 | - {% end %} | |
| 46 | - </div> | |
| 47 | - {% end %} | |
| 32 | + {% else %} | |
| 33 | + <div class="p-2"> | |
| 34 | + <i class="bi bi-square"></i> | |
| 35 | + <!-- <i class="far fa-square" aria-hidden="true"></i> --> | |
| 36 | + </div> | |
| 37 | + <div class="p-2"> | |
| 38 | + {{ md(opt) }} | |
| 39 | + </div> | |
| 40 | + <div class="ml-auto p-2"> | |
| 41 | + {% if q['correct'][n] > 0 %} | |
| 42 | + <div class="text-right text-danger"> | |
| 43 | + <i class="bi bi-x-lg"></i> | |
| 44 | + <!-- <i class="fas fa-times" aria-hidden="true"></i> --> | |
| 45 | + </div> | |
| 46 | + {% else %} | |
| 47 | + <div class="text-right text-success"> | |
| 48 | + <i class="bi bi-check-lg"></i> | |
| 49 | + <!-- <i class="fas fa-check" aria-hidden="true"></i> --> | |
| 48 | 50 | </div> |
| 49 | - </li> | |
| 50 | - {% end %} | |
| 51 | - </ul> | |
| 51 | + {% end %} | |
| 52 | + </div> | |
| 53 | + {% end %} | |
| 54 | + </div> | |
| 55 | + </li> | |
| 56 | + {% end %} | |
| 57 | + </ul> | |
| 52 | 58 | </fieldset> |
| 53 | 59 | {% end %} | ... | ... |
perguntations/templates/review-question-radio.html
| ... | ... | @@ -9,7 +9,8 @@ |
| 9 | 9 | <div class="d-flex flex-row"> |
| 10 | 10 | {% if q['answer'] is not None and str(n)==q['answer'] %} |
| 11 | 11 | <div class="p-2"> |
| 12 | - <i class="fas fa-dot-circle" aria-hidden="true"></i> | |
| 12 | + <i class="bi bi-record-circle"></i> | |
| 13 | + <!-- <i class="fas fa-dot-circle" aria-hidden="true"></i> --> | |
| 13 | 14 | </div> |
| 14 | 15 | <div class="p-2"> |
| 15 | 16 | {{ md(opt) }} |
| ... | ... | @@ -17,18 +18,21 @@ |
| 17 | 18 | <div class="ml-auto p-2"> |
| 18 | 19 | {% if q['correct'][n] > 0 %} |
| 19 | 20 | <div class="text-right text-success"> |
| 20 | - <i class="fas fa-check" aria-hidden="true"></i> | |
| 21 | + <i class="bi bi-check-lg"></i> | |
| 22 | + <!-- <i class="fas fa-check" aria-hidden="true"></i> --> | |
| 21 | 23 | </div> |
| 22 | 24 | {% else %} |
| 23 | 25 | <div class="text-right text-danger"> |
| 24 | - <i class="fas fa-times" aria-hidden="true"></i> | |
| 26 | + <i class="bi bi-x-lg"></i> | |
| 27 | + <!-- <i class="fas fa-times" aria-hidden="true"></i> --> | |
| 25 | 28 | </div> |
| 26 | 29 | {% end %} |
| 27 | 30 | </div> |
| 28 | 31 | |
| 29 | 32 | {% else %} |
| 30 | 33 | <div class="p-2"> |
| 31 | - <i class="far fa-circle" aria-hidden="true"></i> | |
| 34 | + <i class="bi bi-circle"></i> | |
| 35 | + <!-- <i class="far fa-circle" aria-hidden="true"></i> --> | |
| 32 | 36 | </div> |
| 33 | 37 | <div class="p-2"> |
| 34 | 38 | {{ md(opt) }} |
| ... | ... | @@ -36,7 +40,8 @@ |
| 36 | 40 | <div class="ml-auto p-2"> |
| 37 | 41 | {% if q['correct'][n] > 0 %} |
| 38 | 42 | <div class="text-right text-info"> |
| 39 | - <i class="fas fa-dot-circle" aria-hidden="true"></i> | |
| 43 | + <i class="bi bi-arrow-left"></i> | |
| 44 | + <!-- <i class="fas fa-dot-circle" aria-hidden="true"></i> --> | |
| 40 | 45 | </div> |
| 41 | 46 | {% end %} |
| 42 | 47 | </div> |
| ... | ... | @@ -45,4 +50,4 @@ |
| 45 | 50 | {% end %} |
| 46 | 51 | </ul> |
| 47 | 52 | </fieldset> |
| 48 | -{% end %} | |
| 49 | 53 | \ No newline at end of file |
| 54 | +{% end %} | ... | ... |
perguntations/templates/review-question.html
| ... | ... | @@ -8,7 +8,8 @@ |
| 8 | 8 | {{ q['number'] }}. {{ q['title'] }} |
| 9 | 9 | <div class="float-right"> |
| 10 | 10 | <small>Classificar </small> |
| 11 | - <i class="far fa-check-square" aria-hidden="true"></i> | |
| 11 | + <i class="bi bi-check-square"></i> | |
| 12 | + <!-- <i class="far fa-check-square" aria-hidden="true"></i> --> | |
| 12 | 13 | </div> |
| 13 | 14 | </h5> <!-- card-header --> |
| 14 | 15 | |
| ... | ... | @@ -35,17 +36,17 @@ |
| 35 | 36 | {% if 'grade' in q %} |
| 36 | 37 | <div class="card-footer"> |
| 37 | 38 | {% if q['grade'] > 0.999 %} |
| 39 | + <h1 class="text-success"><i class="bi bi-hand-thumbs-up"></i></h1> | |
| 38 | 40 | <p class="text-success"> |
| 39 | - <i class="far fa-thumbs-up fa-3x" aria-hidden="true"></i> | |
| 40 | - {{ round(q['grade'] * q['points'], 2) }} | |
| 41 | - pontos | |
| 41 | + <!-- <i class="far fa-thumbs-up fa-3x" aria-hidden="true"></i> --> | |
| 42 | + {{ round(q['grade'] * q['points'], 2) }} pontos | |
| 42 | 43 | </p> |
| 43 | 44 | <p class="text-success">{{ md(q['comments']) }}</p> |
| 44 | 45 | {% elif q['grade'] >= 0.5 %} |
| 46 | + <h1 class="text-warning"><i class="bi bi-exclamation-triangle"></i></h1> | |
| 45 | 47 | <p class="text-warning"> |
| 46 | - <i class="fas fa-exclamation-triangle fa-3x" aria-hidden="true"></i> | |
| 47 | - {{ round(q['grade'] * q['points'], 2) }} | |
| 48 | - pontos | |
| 48 | + <!-- <i class="fas fa-exclamation-triangle fa-3x" aria-hidden="true"></i> --> | |
| 49 | + {{ round(q['grade'] * q['points'], 2) }} pontos | |
| 49 | 50 | </p> |
| 50 | 51 | <p class="text-warning">{{ md(q['comments']) }}</p> |
| 51 | 52 | {% if q['solution'] %} |
| ... | ... | @@ -53,10 +54,10 @@ |
| 53 | 54 | {{ md('**Solução:** \n\n' + q['solution']) }} |
| 54 | 55 | {% end %} |
| 55 | 56 | {% else %} |
| 57 | + <h1 class="text-danger"><i class="bi bi-hand-thumbs-down"></i></h1> | |
| 56 | 58 | <p class="text-danger"> |
| 57 | - <i class="far fa-thumbs-down fa-3x" aria-hidden="true"></i> | |
| 58 | - {{ round(q['grade'] * q['points'], 2) }} | |
| 59 | - pontos | |
| 59 | + <!-- <i class="far fa-thumbs-down fa-3x" aria-hidden="true"></i> --> | |
| 60 | + {{ round(q['grade'] * q['points'], 2) }} pontos | |
| 60 | 61 | </p> |
| 61 | 62 | <p class="text-danger">{{ md(q['comments']) }}</p> |
| 62 | 63 | {% if q['solution'] %} |
| ... | ... | @@ -81,7 +82,8 @@ |
| 81 | 82 | {{ q['number'] }}. {{ q['title'] }} |
| 82 | 83 | <div class="float-right"> |
| 83 | 84 | <small>Classificar </small> |
| 84 | - <i class="far fa-square" aria-hidden="true"></i> | |
| 85 | + <i class="bi bi-square"></i> | |
| 86 | + <!-- <i class="far fa-square" aria-hidden="true"></i> --> | |
| 85 | 87 | </div> |
| 86 | 88 | </h5> <!-- card-header --> |
| 87 | 89 | |
| ... | ... | @@ -100,8 +102,10 @@ |
| 100 | 102 | </div> <!-- card-body --> |
| 101 | 103 | |
| 102 | 104 | <div class="card-footer"> |
| 103 | - <p class="text-secondary"> | |
| 104 | - <i class="fas fa-ban fa-3x" aria-hidden="true"></i> | |
| 105 | + <h1 class="text-secondary"><i class="bi bi-dash-circle"></i></h1> | |
| 106 | + <p class="text-secondary"> | |
| 107 | + Não respondeu | |
| 108 | + <!-- <i class="fas fa-ban fa-3x" aria-hidden="true"></i> --> | |
| 105 | 109 | {{ md(q['comments']) }} |
| 106 | 110 | {% if q['solution'] %} |
| 107 | 111 | <hr> | ... | ... |
perguntations/templates/review.html
| ... | ... | @@ -5,7 +5,6 @@ |
| 5 | 5 | <meta charset="UTF-8"> |
| 6 | 6 | <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> |
| 7 | 7 | <link rel="icon" type="image/x-icon" href="/static/favicon.ico"> |
| 8 | - | |
| 9 | 8 | <!-- MathJax3 --> |
| 10 | 9 | <script> |
| 11 | 10 | MathJax = { |
| ... | ... | @@ -25,52 +24,54 @@ |
| 25 | 24 | <link rel="stylesheet" type="text/css" href="/static/bootstrap/css/bootstrap.min.css"> |
| 26 | 25 | <link rel="stylesheet" type="text/css" href="/static/css/github.css"> <!-- syntax highlight --> |
| 27 | 26 | <link rel="stylesheet" type="text/css" href="/static/css/test.css"> |
| 27 | + <link rel="stylesheet" type="text/css" href="/static/bootstrap-icons/font/bootstrap-icons.css"> | |
| 28 | 28 | |
| 29 | 29 | <!-- Scripts --> |
| 30 | 30 | <script src="/static/jquery/jquery.min.js"></script> |
| 31 | 31 | <!-- <script defer src="/static/popper.js/popper.min.js"></script> --> |
| 32 | - <script defer src="/static/fontawesome-free/js/all.min.js"></script> | |
| 32 | + <!-- <script defer src="/static/fontawesome-free/js/all.min.js"></script> --> | |
| 33 | 33 | <script defer src="/static/bootstrap/js/bootstrap.bundle.min.js"></script> |
| 34 | 34 | </head> |
| 35 | 35 | <!-- ===================================================================== --> |
| 36 | 36 | <body> |
| 37 | 37 | <!-- ===================================================================== --> |
| 38 | - | |
| 39 | 38 | <nav class="navbar navbar-expand-sm fixed-top navbar-dark bg-danger"> |
| 40 | - <a class="navbar-brand" href="#"> | |
| 41 | - <img src="/static/logo_horizontal.png" height="30" alt=""> | |
| 42 | - </a> | |
| 43 | - <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarText" aria-controls="navbarText" aria-expanded="false" aria-label="Toggle navigation"> | |
| 44 | - <span class="navbar-toggler-icon"></span> | |
| 45 | - </button> | |
| 39 | + <div class="container-fluid"> | |
| 40 | + <a class="navbar-brand" href="#"> | |
| 41 | + <img src="/static/logo_horizontal.png" height="30" alt=""> | |
| 42 | + </a> | |
| 43 | + <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarText" aria-controls="navbarText" aria-expanded="false" aria-label="Toggle navigation"> | |
| 44 | + <span class="navbar-toggler-icon"></span> | |
| 45 | + </button> | |
| 46 | 46 | |
| 47 | - <div class="collapse navbar-collapse" id="navbarText"> | |
| 48 | - <ul class="nav navbar-nav"> | |
| 49 | - <li class="nav-item"></li> | |
| 50 | - </ul> | |
| 47 | + <div class="collapse navbar-collapse" id="navbarText"> | |
| 48 | + <ul class="nav navbar-nav"> | |
| 49 | + <li class="nav-item"></li> | |
| 50 | + </ul> | |
| 51 | 51 | |
| 52 | - <ul class="nav navbar-nav mx-auto"> | |
| 53 | - <li class="nav-item"> | |
| 54 | - <span class="navbar-text">Revisão de prova</span> | |
| 55 | - </li> | |
| 56 | - </ul> | |
| 52 | + <ul class="nav navbar-nav mx-auto"> | |
| 53 | + <li class="nav-item"> | |
| 54 | + <span class="navbar-text">Revisão de prova</span> | |
| 55 | + </li> | |
| 56 | + </ul> | |
| 57 | 57 | |
| 58 | - <ul class="nav navbar-nav"> | |
| 59 | - <li class="nav-item"> | |
| 60 | - <span class="navbar-text"> | |
| 61 | - <i class="fas fa-user" aria-hidden="true"></i> | |
| 62 | - <span id="name">{{ escape(name) }}</span> | |
| 63 | - (<span id="number">{{ escape(uid) }}</span>) | |
| 64 | - <span class="caret"></span> | |
| 65 | - </span> | |
| 66 | - </li> | |
| 67 | - </ul> | |
| 58 | + <ul class="nav navbar-nav"> | |
| 59 | + <li class="nav-item"> | |
| 60 | + <span class="navbar-text"> | |
| 61 | + <!-- <i class="fas fa-user" aria-hidden="true"></i> --> | |
| 62 | + <span id="name">{{ escape(name) }}</span> | |
| 63 | + (<span id="number">{{ escape(uid) }}</span>) | |
| 64 | + <!-- <span class="caret"></span> --> | |
| 65 | + </span> | |
| 66 | + </li> | |
| 67 | + </ul> | |
| 68 | + </div> | |
| 68 | 69 | </div> |
| 69 | 70 | </nav> |
| 70 | 71 | |
| 71 | 72 | <!-- ===================================================================== --> |
| 72 | 73 | <div class="container"> |
| 73 | - <div class="jumbotron"> | |
| 74 | + <div class="bg-light p-3"> | |
| 74 | 75 | <h1 class="display-5">{{ t['title'] }}</h1> |
| 75 | 76 | <h5> |
| 76 | 77 | <div class="row"> |
| ... | ... | @@ -80,7 +81,6 @@ |
| 80 | 81 | </div> |
| 81 | 82 | </div> |
| 82 | 83 | </h5> |
| 83 | - | |
| 84 | 84 | <hr> |
| 85 | 85 | |
| 86 | 86 | <h5> |
| ... | ... | @@ -113,7 +113,7 @@ |
| 113 | 113 | </div> |
| 114 | 114 | {% end %} |
| 115 | 115 | </h3> |
| 116 | - </div> <!-- jumbotron --> | |
| 116 | + </div> | |
| 117 | 117 | |
| 118 | 118 | {% for i, q in enumerate(t['questions']) %} |
| 119 | 119 | {% module Template(templ[q['type']], i=i, q=q, md=md(q['ref']), t=t, debug=debug) %} | ... | ... |
perguntations/templates/test.html
| ... | ... | @@ -22,7 +22,7 @@ |
| 22 | 22 | <!-- Scripts --> |
| 23 | 23 | <script src="/static/jquery/jquery.min.js"></script> |
| 24 | 24 | <!-- <script defer src="/static/popper.js/popper.min.js"></script> --> |
| 25 | - <script defer src="/static/fontawesome-free/js/all.min.js"></script> | |
| 25 | + <!-- <script defer src="/static/fontawesome-free/js/all.min.js"></script> --> | |
| 26 | 26 | <script defer src="/static/bootstrap/js/bootstrap.bundle.min.js"></script> |
| 27 | 27 | <script defer src="/static/underscore/underscore-min.js"></script> |
| 28 | 28 | <script src="/static/codemirror/lib/codemirror.js"></script> |
| ... | ... | @@ -49,65 +49,63 @@ |
| 49 | 49 | </div> |
| 50 | 50 | |
| 51 | 51 | <nav id="navbar" class="navbar navbar-expand-sm fixed-top navbar-dark bg-dark"> |
| 52 | - | |
| 53 | - <a class="navbar-brand" href="#"> | |
| 54 | - <img src="/static/logo_horizontal.png" height="30" alt=""> | |
| 55 | - </a> | |
| 56 | - <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarText" aria-controls="navbarText" aria-expanded="false" aria-label="Toggle navigation"> | |
| 57 | - <span class="navbar-toggler-icon"></span> | |
| 58 | - </button> | |
| 59 | - | |
| 60 | - <div class="collapse navbar-collapse" id="navbarText"> | |
| 61 | - <ul class="nav navbar-nav"> | |
| 62 | - <li class="nav-item"></li> | |
| 63 | - </ul> | |
| 64 | - | |
| 65 | - <ul class="nav navbar-nav mx-auto"> | |
| 52 | + <div class="container-fluid"> | |
| 53 | + <a class="navbar-brand" href="#"> | |
| 54 | + <img src="/static/logo_horizontal.png" height="30" alt=""> | |
| 55 | + </a> | |
| 56 | + <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarText" aria-controls="navbarText" aria-expanded="false" aria-label="Toggle navigation"> | |
| 57 | + <span class="navbar-toggler-icon"></span> | |
| 58 | + </button> | |
| 59 | + | |
| 60 | + <div class="collapse navbar-collapse" id="navbarText"> | |
| 61 | + <ul class="nav navbar-nav"> | |
| 62 | + <li class="nav-item"></li> | |
| 63 | + </ul> | |
| 64 | + | |
| 65 | + <ul class="nav navbar-nav mx-auto"> | |
| 66 | 66 | <li class="nav-item"><h5> |
| 67 | 67 | <span class="navbar-text" id="clock"> --:-- </span> |
| 68 | 68 | </h5> |
| 69 | 69 | |
| 70 | 70 | </li> |
| 71 | - </ul> | |
| 71 | + </ul> | |
| 72 | 72 | |
| 73 | - <ul class="nav navbar-nav"> | |
| 73 | + <ul class="nav navbar-nav"> | |
| 74 | 74 | <li class="nav-item"> |
| 75 | 75 | <span class="navbar-text"> |
| 76 | - <i class="fas fa-user" aria-hidden="true"></i> | |
| 76 | + <!-- <i class="fas fa-user" aria-hidden="true"></i> --> | |
| 77 | 77 | <span id="name">{{ escape(name) }}</span> |
| 78 | 78 | (<span id="number">{{ escape(uid) }}</span>) |
| 79 | - <span class="caret"></span> | |
| 79 | + <!-- <span class="caret"></span> --> | |
| 80 | 80 | </span> |
| 81 | 81 | </li> |
| 82 | - </ul> | |
| 82 | + </ul> | |
| 83 | + </div> | |
| 83 | 84 | </div> |
| 84 | - | |
| 85 | 85 | </nav> |
| 86 | 86 | |
| 87 | 87 | <!-- ===================================================================== --> |
| 88 | 88 | <div class="container"> |
| 89 | 89 | |
| 90 | - <div class="jumbotron"> | |
| 90 | + <div class="bg-light p-3"> | |
| 91 | 91 | <h3 class="display-5">{{ t['title'] }}</h3> |
| 92 | 92 | <hr> |
| 93 | - | |
| 94 | - <div class="row"> | |
| 95 | - <label for="nome" class="col-sm-3">Nome:</label> | |
| 96 | - <div class="col-sm-9" id="nome">{{ escape(name) }}</div> | |
| 97 | - </div> | |
| 98 | - <div class="row"> | |
| 99 | - <label for="numero" class="col-sm-3">Número:</label> | |
| 100 | - <div class="col-sm-9" id="numero">{{ escape(uid) }}</div> | |
| 101 | - </div> | |
| 102 | - | |
| 103 | - <div class="row"> | |
| 104 | - <label for="duracao" class="col-sm-3">Duração:</label> | |
| 105 | - <div class="col-sm-9" id="duracao">{{ str(t['duration'])+' minutos' if t['duration'] > 0 else 'sem limite de tempo' }}</div> | |
| 106 | - </div> | |
| 107 | - <div class="row"> | |
| 108 | - <label for="submissao" class="col-sm-3">Submissão:</label> | |
| 109 | - <div class="col-sm-9" id="submissao">{{ 'automática no fim do tempo' if t['autosubmit'] else 'manual' }}</div> | |
| 110 | - </div> | |
| 93 | + <div class="row"> | |
| 94 | + <label for="nome" class="col-sm-3">Nome:</label> | |
| 95 | + <div class="col-sm-9" id="nome">{{ escape(name) }}</div> | |
| 96 | + </div> | |
| 97 | + <div class="row"> | |
| 98 | + <label for="numero" class="col-sm-3">Número:</label> | |
| 99 | + <div class="col-sm-9" id="numero">{{ escape(uid) }}</div> | |
| 100 | + </div> | |
| 101 | + <div class="row"> | |
| 102 | + <label for="duracao" class="col-sm-3">Duração:</label> | |
| 103 | + <div class="col-sm-9" id="duracao">{{ str(t['duration'])+' minutos' if t['duration'] > 0 else 'sem limite de tempo' }}</div> | |
| 104 | + </div> | |
| 105 | + <div class="row"> | |
| 106 | + <label for="submissao" class="col-sm-3">Submissão:</label> | |
| 107 | + <div class="col-sm-9" id="submissao">{{ 'automática no fim do tempo' if t['autosubmit'] else 'manual' }}</div> | |
| 108 | + </div> | |
| 111 | 109 | </div> |
| 112 | 110 | |
| 113 | 111 | <form action="/" method="post" id="test"> |
| ... | ... | @@ -119,7 +117,7 @@ |
| 119 | 117 | |
| 120 | 118 | <div class="form-row"> |
| 121 | 119 | <div class="col-12"> |
| 122 | - <button type="button" class="btn btn-success btn-lg btn-block" data-toggle="modal" data-target="#confirmar" id="form-button-submit"> | |
| 120 | + <button type="button" class="btn btn-success btn-lg btn-block" data-bs-toggle="modal" data-bs-target="#confirmar" id="form-button-submit"> | |
| 123 | 121 | Submeter teste |
| 124 | 122 | </button> |
| 125 | 123 | </div> |
| ... | ... | @@ -132,7 +130,7 @@ |
| 132 | 130 | |
| 133 | 131 | <!-- Modal de confirmacao submissao --> |
| 134 | 132 | <div class="modal fade" id="confirmar" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> |
| 135 | - <div class="modal-dialog" role="document"> | |
| 133 | + <div class="modal-dialog"> | |
| 136 | 134 | <div class="modal-content"> |
| 137 | 135 | <div class="modal-header"> |
| 138 | 136 | <h4 class="modal-title">Deseja submeter o teste?</h4> |
| ... | ... | @@ -141,15 +139,15 @@ |
| 141 | 139 | O teste será enviado para classificação e já não poderá voltar atrás. |
| 142 | 140 | Antes de submeter, verifique se respondeu a todas as questões. |
| 143 | 141 | Desactive as perguntas que não pretende classificar para evitar |
| 144 | - eventuais penalizações. | |
| 142 | + penalizações. | |
| 145 | 143 | </div> |
| 146 | 144 | <div class="modal-footer"> |
| 147 | - <button type="button" class="btn btn-danger btn-lg" data-dismiss="modal"> | |
| 148 | - Oops, NÃO!!! | |
| 149 | - </button> | |
| 150 | 145 | <button form="test" type="submit" class="btn btn-success btn-lg"> |
| 151 | 146 | Sim, submeter... |
| 152 | 147 | </button> |
| 148 | + <button type="button" class="btn btn-danger btn-lg" data-bs-dismiss="modal"> | |
| 149 | + Oops, NÃO!!! | |
| 150 | + </button> | |
| 153 | 151 | </div> |
| 154 | 152 | </div> |
| 155 | 153 | </div> | ... | ... |