test.html 7.02 KB
<!DOCTYPE html>
<html lang="pt-PT">
<head>
  <title>Teste</title>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <link rel="icon" href="/static/favicon.ico">

<!-- MathJax3 -->
  <script>
  MathJax = {
    tex: {
      inlineMath: [['$$$', '$$$'], ['\\(', '\\)']]
    },
    svg: {
      fontCache: 'global'
    }
  };
  </script>
  <script async type="text/javascript" id="MathJax-script" src="/static/mathjax/es5/tex-svg.js"></script>

<!-- Scripts -->
  <script src="/static/jquery/jquery.min.js"></script>
  <!-- <script defer src="/static/popper.js/popper.min.js"></script> -->
  <script defer src="/static/fontawesome-free/js/all.min.js"></script>
  <script defer src="/static/bootstrap/js/bootstrap.bundle.min.js"></script>
  <script defer src="/static/underscore/underscore-min.js"></script>
  <script src="/static/codemirror/lib/codemirror.js"></script>
  <script src="/static/codemirror/addon/selection/active-line.js"></script>
  <script src="/static/codemirror/addon/edit/matchbrackets.js"></script>

<!-- Styles -->
  <link rel="stylesheet" type="text/css" href="/static/bootstrap/css/bootstrap.min.css">
  <link rel="stylesheet" type="text/css" href="/static/codemirror/lib/codemirror.css">
  <link rel="stylesheet" type="text/css" href="/static/codemirror/theme/darcula.css">
  <link rel="stylesheet" type="text/css" href="/static/css/github.css">  <!-- syntax highlight -->
  <link rel="stylesheet" type="text/css" href="/static/css/test.css">

<!-- My scripts -->
  <script defer src="/static/js/question_disabler.js"></script>
  <script defer src="/static/js/prevent_enter_submit.js"></script>
  <script defer src="/static/js/detect_unfocus.js"></script>
</head>
<!-- ===================================================================== -->
<body>
<!-- ===================================================================== -->
<div class="progress fixed-top" style="height: 62px; border-radius: 0px;">
  <div class="progress-bar bg-secondary" role="progressbar" style="width: 100%" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100"></div>
</div>

<nav id="navbar" class="navbar navbar-expand-sm fixed-top navbar-dark bg-dark">

  <a class="navbar-brand" href="#">
    <img src="/static/logo_horizontal.png" height="30" alt="">
  </a>
  <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarText" aria-controls="navbarText" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>

  <div class="collapse navbar-collapse" id="navbarText">
    <ul class="nav navbar-nav">
      <li class="nav-item"></li>
    </ul>

    <ul class="nav navbar-nav mx-auto">
        <li class="nav-item"><h5>
          <span class="navbar-text" id="clock"> --:-- </span>
          </h5>

        </li>
    </ul>

    <ul class="nav navbar-nav">
        <li class="nav-item">
          <span class="navbar-text">
            <i class="fas fa-user" aria-hidden="true"></i>
            <span id="name">{{ escape(t['student']['name']) }}</span>
            (<span id="number">{{ escape(t['student']['number']) }}</span>)
            <span class="caret"></span>
          </span>
        </li>
    </ul>
  </div>

</nav>

<!-- ===================================================================== -->
<div class="container">

  <div class="jumbotron">
    <h3 class="display-5">{{ t['title'] }}</h3>
    <hr>

      <div class="row">
        <label for="nome" class="col-sm-3">Nome:</label>
        <div class="col-sm-9" id="nome">{{ escape(t['student']['name']) }}</div>
      </div>
      <div class="row">
        <label for="numero" class="col-sm-3">Número:</label>
        <div class="col-sm-9" id="numero">{{ escape(t['student']['number']) }}</div>
      </div>

      <div class="row">
        <label for="duracao" class="col-sm-3">Duração:</label>
        <div class="col-sm-9" id="duracao">{{ str(t['duration'])+' minutos' if t['duration'] > 0 else 'sem limite de tempo' }}</div>
      </div>
      <div class="row">
        <label for="submissao" class="col-sm-3">Submissão:</label>
        <div class="col-sm-9" id="submissao">{{ 'automática no fim do tempo' if t['autosubmit'] else 'manual' }}</div>
      </div>
  </div>

  <form action="/" method="post" id="test">
    {% module xsrf_form_html() %}

    {% for i, q in enumerate(t['questions']) %}
      {% module Template(templ[q['type']], i=i, q=q, md=md(q['ref']), show_ref=t['show_ref']) %}
    {% end %}

    <div class="form-row">
      <div class="col-12">
        <button type="button" class="btn btn-success btn-lg btn-block" data-toggle="modal" data-target="#confirmar" id="form-button-submit">Submeter teste</button>
      </div>
    </div>
  </form>
  <hr>
</div> <!-- container -->

<!-- ===================================================================== -->

<!-- Modal de confirmacao submissao -->
<div class="modal fade" id="confirmar" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h4 class="modal-title">Deseja submeter o teste?</h4>
      </div>
      <div class="modal-body">
        O teste será enviado para classificação e já não poderá voltar atrás.
        Antes de submeter, verifique se respondeu a todas as questões.
        Desactive as perguntas que não pretende classificar para evitar eventuais penalizações.
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-danger btn-lg" data-dismiss="modal">Oops, NÃO!!!</button>
        <button form="test" type="submit" class="btn btn-success btn-lg">Sim, submeter...</button>
      </div>
    </div>
  </div>
</div>

<script>
  $("textarea").each(function(i, ta) {
    CodeMirror.fromTextArea(ta, {
      lineNumbers: true,
      // theme: "darcula",
      viewportMargin: Infinity,
      matchBrackets: true,
      styleActiveLine: true,
    });
  });
</script>

<script>
  var duration = {{ t['duration']*60*1000 }}; // ms
  var finishtime = new Date().getTime() + duration;

  {% if t['duration'] == 0 %}
    $("#clock").html("+\u221e");
  {% else %}

    // Update the count down every 1 second
    var x = setInterval(function() {
      var now = new Date().getTime();
      var distance = finishtime - now; // ms

      // Time calculations for days, hours, minutes and seconds
      var minutes = Math.floor((distance / (1000 * 60)));
      var seconds = Math.floor((distance % (1000 * 60)) / 1000);

      if (distance >= 1000*60) {
        $("#clock").html(minutes + ":" + (seconds<10?'0':'') +seconds);
      }
      else if (distance >= 0) {
        $("#navbar").removeClass('bg-dark').addClass("bg-danger");
        $("#clock").html(seconds);
      }
      else {
        $("#clock").html(0);
        {% if t['autosubmit'] %}
          $("#test").submit();
        {% end %}
      }

      var progress = distance/duration*100 + '%'
      $('.progress-bar').css('width', progress).attr('aria-valuenow', progress);
    }, 1000);
  {% end %}
</script>
</body>
</html>