test.html 14.1 KB
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title> ${t['title']} </title>
    <link rel="icon" href="favicon.ico">

<!-- MathJax -->
    <script type="text/x-mathjax-config">
        MathJax.Hub.Config({
            extensions: ["tex2jax.js"],
            jax: ["input/TeX","output/HTML-CSS"],
            tex2jax: {inlineMath: [["$$$","$$$"], ["$","$"], ["\\(","\\)"]]}
        });
    </script>
    <script type="text/javascript" src="/js/mathjax/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
    </script>

<!-- Bootstrap -->
    <link rel="stylesheet" href="/css/bootstrap.min.css">
    <link rel="stylesheet" href="/css/bootstrap-theme.min.css"> <!-- optional -->
    <link rel="stylesheet" href="/css/github.css">  <!-- syntax highlight -->
    <link rel="stylesheet" href="/css/sticky-footer-navbar.css">

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
    <script src="/js/jquery.min.js"></script>
    <script src="/js/bootstrap.min.js"></script>

<!-- My javascripts -->
    <script src="/js/question_disabler.js"></script>
    <style>
        /* Fixes navigation panel overlaying content */
        body {
            padding-top: 80px;
            background: #aaa;
        }
        /* Hack to avoid name clash between pygments and mathjax */
        .MathJax .mo,
        .MathJax .mi {
            color: inherit;
        }
        .drop-shadow {
            -webkit-box-shadow: 0 0 5px 2px rgba(0, 0, 0, .5);
            box-shadow: 0px 2px 10px 3px rgba(0, 0, 0, .2);
            border-radius:5px;
        }
        textarea {
            font-family: monospace !important;
        }
    </style>
</head>
<!-- ===================================================================== -->
<body>
<nav class="navbar navbar-default navbar-fixed-top" role="navigation">
  <div class="container-fluid drop-shadow">
    <div class="navbar-header">
      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar">
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="#">
          <!-- <img class="brand" alt="UEvora" src="/pomba-ue.svg"/> -->
          UEvora
      </a>
    </div>

    <!-- <p class="navbar-text"> ${t['title']} </p> -->

    <div class="collapse navbar-collapse" id="myNavbar">
<!--       <ul class="nav navbar-nav">
        <li><a href="#">Teoria</a></li>
        <li><a href="#">Exemplos</a></li>
        <li><a href="#">Exercícios</a></li>
      </ul>
 -->
      <ul class="nav navbar-nav navbar-right">
        <li class="dropdown">
          <a class="dropdown-toggle" data-toggle="dropdown" href="#">
              <span class="glyphicon glyphicon-user" aria-hidden="true"></span>
              ${t['name']} (${t['number']}) <span class="caret"></span>
          </a>
          <ul class="dropdown-menu">
            <li><a href="/logout"><span class="glyphicon glyphicon-log-out" aria-hidden="true"></span> Sair</a></li>
            <!-- <li><a href="#">Change password</a></li> -->
          </ul>
        </li>
      </ul>
    </div>
  </div>
</nav>


<div class="container">
    <div class="row">
        <form action="/correct/" method="post" id="test">
            <%!
                import markdown as md
                import yaml
                import random
            %>
            <%def name="pretty(text)">
                ${md.markdown(str(text), extensions=['markdown.extensions.tables',
                    'markdown.extensions.fenced_code',
                    'markdown.extensions.codehilite',
                    'markdown.extensions.def_list',
                    'markdown.extensions.sane_lists'])}
            </%def>
            <%
                total_points = sum(q['points'] for q in questions)
            %>
            % if t['debug']:
                <pre>
                    ${yaml.dump({k:v for k,v in t.items() if k!='questions'})}
                </pre>
            % endif

            % if t['practice'] and 'grade' in t:
                <div class="jumbotron drop-shadow">
                    <h1>Resultado</h1>
                    <p>Teve <strong>${'{:.1f}'.format(t['grade'])}</strong> valores no teste.</p>
                    <p>Se quiser, pode corrigir e submeter o teste novamente.<br>Para terminar escolha a opção 'Sair' no menu.</p>

                </div>
            % endif

            % for i,q in enumerate(questions):
                <div class="ui-corner-all custom-corners">
                    % if q['type'] == 'information':
                        <div class="panel panel-default drop-shadow">
                            <div class="panel-heading">
                                Informação
                            </div>
                        <div class="panel-body">
                            <h4> ${i+1}.</h4>
                            ${pretty(q['text'])}
                        </div>
                        </div>
                    % elif q['type'] == 'warning':
                        <div class="alert alert-warning drop-shadow" role="alert">
                        <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
                            ${q['text']}
                        </div>

                    % else:
                    <div class="panel panel-primary drop-shadow">
                        <div class="panel-heading">
                            <input type="checkbox" class="question_disabler" data-size="mini" name="answered-${q['ref']}" id="answered-${q['ref']}" checked="">
                            &nbsp;Classificar
                        </div>
                        <div class="panel-body" id="example${i}">
                            <h4> ${i+1}.</h4>

                            <p class="question">
                                ${pretty(q['text'])}
                            </p>

                            <fieldset data-role="controlgroup">
                                % if q['type'] == 'radio':
                                    % for opt in q['options']:
                                        <div class="radio">
                                            <label class="option">
                                                <input type="radio" name="${q['ref']}" id="${q['ref']}${loop.index}" value="${loop.index}" ${'checked' if q['answer'] is not None and str(loop.index) == q['answer'] else ''}>
                                                ${pretty(opt)}
                                            </label>
                                        </div>
                                    % endfor

                                % elif q['type'] == 'checkbox':
                                    % for opt in q['options']:
                                        <div class="checkbox">
                                            <label>
                                                <input type="checkbox" name="${q['ref']}" id="${q['ref']}${loop.index}" value="${loop.index}" ${'checked' if q['answer'] is not None and str(loop.index) in q['answer'] else ''}>
                                                ${pretty(opt)}
                                            </label>
                                        </div>
                                    % endfor
                                % elif q['type'] in ('text', 'text_regex'):
                                    <input type="text" name="${q['ref']}" class="form-control" value="${q['answer'] if q['answer'] is not None else ''}">
                                % elif q['type'] == 'textarea':
                                    <textarea class="form-control" rows="8" name="${q['ref']}">${q['answer'] if q['answer'] is not None else ''}</textarea>
                                % endif
                            </fieldset>

                            % if t['show_hints']:
                                % if 'hint' in q:
                                    <button class="btn btn-sm btn-warning" type="button" data-toggle="collapse" data-target="#hint-${q['ref']}" aria-expanded="false" aria-controls="hint-${q['ref']}">
                                        Ajuda
                                    </button>
                                    <div class="collapse" id="hint-${q['ref']}">
                                        <div class="well">
                                            ${pretty(q['hint'])}
                                        </div>
                                    </div>
                                % endif  # hint
                                % if 'modal' in q:
                                    <button type="button" class="btn btn-sm btn-primary" data-toggle="modal" data-target="#modal-${q['ref']}">
                                        <span class="glyphicon glyphicon-question-sign" aria-hidden="true"></span>
                                    </button>
                                    <div class="modal fade" tabindex="-1" role="dialog" aria-labelledby="modal-${q['ref']}" aria-hidden="true" id="modal-${q['ref']}">
                                      <div class="modal-dialog modal-lg">
                                        <div class="modal-content">
                                            <div class="modal-header">
                                                <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                                                <h4 class="modal-title">Anexo</h4>
                                            </div>
                                            <div class="modal-body">
                                                ${pretty(q['modal'])}
                                            </div>
                                            <div class="modal-footer">
                                                <button type="button" class="btn btn-default" data-dismiss="modal">Fechar</button>
                                          </div>
                                        </div>
                                      </div>
                                    </div>
                                % endif  # modal
                            % endif  # show_hints

                            % if t['practice'] and 'grade' in q:
                                % if q['grade'] > 0.99:
                                    <div class="alert alert-success" role="alert">
                                        <span class="glyphicon glyphicon-ok" aria-hidden="true"></span>
                                        ${round(q['grade'] * q['points'] / total_points * 20.0, 1)} pontos
                                    </div>
                                % elif q['grade'] > 0.49:
                                    <div class="alert alert-warning" role="alert">
                                        <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
                                        ${round(q['grade'] * q['points'] / total_points * 20.0, 1)} pontos
                                    </div>
                                % else:
                                    <div class="alert alert-danger" role="alert">
                                        <p>
                                            ${random.choice(t['offensive']) if 'offensive' in t else ''}
                                        </p>
                                        <span class="glyphicon glyphicon-remove" aria-hidden="true"></span>
                                        ${round(q['grade'] * q['points'] / total_points * 20.0, 1)} pontos
                                    </div>
                                % endif
                            % endif

                            % if t['show_points']:
                                <p class="text-right">
                                <small>(Cotação: ${round(q['points'] / total_points * 20.0, 1)} pontos)</small>
                                <p>
                            % endif

                        </div> <!-- panel-body -->
                        % if t['debug']:
                            <div class="panel-footer">
                            <pre>
                                ${yaml.dump(q)}
                            </pre>
                            </div>
                        % endif
                    </div> <!-- panel -->
                    % endif
                </div> <!-- ui-corner-all custom-corners -->
            % endfor
            <hr>
            <button type="button" class="btn btn-danger drop-shadow" data-toggle="modal" data-target="#confirmar">
              Submeter teste
            </button>
        </form>
    </div>

    <!-- Modal de confirmacao -->
    <div class="modal fade" id="confirmar" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
      <div class="modal-dialog">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
            <h4 class="modal-title">Deseja submeter o teste?</h4>
          </div>
          <div class="modal-body">
            Se submeter, o teste será enviado para classificação e já não poderá voltar atrás.
            Veja se respondeu a todas as questões e desactive as que não pretende classificar.
          </div>
          <div class="modal-footer">
            <button type="button" class="btn btn-success btn-lg" data-dismiss="modal">Não!</button>
            <button form="test" type="submit" class="btn btn-danger btn-lg">Sim, submeter</button>
          </div>
        </div>
      </div>
    </div>
</div>

<script src="/js/tabkey_in_textarea.js"></script>
</body>
</html>