topic.html 7.49 KB
<!DOCTYPE html>
<html>
<head>
    <title>GotIT</title>
    <link rel="icon" href="/static/favicon.ico">

    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="author" content="Miguel Barão">

<!-- MathJax -->
    <script type="text/x-mathjax-config">
        MathJax.Hub.Config({
            tex2jax: {
                inlineMath: [["$$$","$$$"], ["$","$"], ["\\(","\\)"]]
            }
        });
    </script>
    <script type="text/javascript" src="/static/mathjax/MathJax.js?delayStartupUntil=onload&config=TeX-AMS_CHTML-full"></script>

<!-- Bootstrap -->
    <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
    <link rel="stylesheet" href="/static/font-awesome/css/font-awesome.min.css">
    <link rel="stylesheet" href="/static/css/animate.min.css">
    <link rel="stylesheet" href="/static/css/github.css">

<!-- Other -->
    <!-- <link rel="stylesheet" href="/static/css/learn.css"> -->

    <style>
        /* progress bars have height of 4 pixels */
        .progress {
            height: 10px;
            border-radius: 0px;
        }
        body {
            margin: 0;
            padding-top: 55px;
        }
    </style>

</head>
<!-- ===================================================================== -->
<body>

<!-- Navbar -->
<nav 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="navbar-nav mr-auto"></ul>

        <ul class="navbar-nav">
            <li class="nav-item dropdown">
                <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                    <i class="fa fa-user" aria-hidden="true"></i>
                    <span id="name">{{ escape(name) }}</span>
                    (<span id="number">{{ escape(uid) }}</span>)
                    <span class="caret"></span>
                </a>
                <div class="dropdown-menu" aria-labelledby="navbarDropdown">
                    <!-- <div class="dropdown-divider"></div> -->
                    <a class="dropdown-item" href="#">Sair</a>
                </div>
            </li>
        </ul>
    </div>
</nav>

<!-- ===================================================================== -->
<div class="progress">
    <div class="progress-bar progress-bar-success" id="topic_progress" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="min-width: 1em;width: 0%"></div>
</div>
<!-- ===================================================================== -->
<!-- main panel with questions -->
<div class="container" id="container">

    <div id="notifications"></div>

    <form action="/question" method="post" id="question_form" autocomplete="off">
        {% module xsrf_form_html() %}

        <div id="question_div"></div>

    </form>
    <button class="btn btn-primary" id="submit" data-toggle="tooltip" data-placement="right" title="Shift-Enter">Continuar</button>
</div>

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

<script src="/static/js/jquery.min.js"></script>
<script src="/static/popper/umd/popper.min.js"></script>
<script src="/static/bootstrap/js/bootstrap.min.js"></script>

<script>
    $.fn.extend({
        animateCSS: function (animation) {
            var animationEnd = 'webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend';
            this.addClass('animated ' + animation).one(animationEnd, function() {
                $(this).removeClass('animated ' + animation);
            });
        }
    });

    // Process the response given by the server
    function updateQuestion(response){
        switch (response["method"]) {
        case "new_question":
            $("#question_div").html(response["params"]["question"]);
            $('#topic_progress').css('width', (100*response["params"]["progress"])+'%').attr('aria-valuenow', 100*response["params"]["progress"]);

            MathJax.Hub.Queue(["Typeset",MathJax.Hub,"question_div"]);

            // enable shift+enter to submit and tab to spaces conversion
            $("input:text, input:radio, input:checkbox").keydown(function (e) {
                if (e.keyCode == 13) {
                    e.preventDefault();
                    if (e.shiftKey) postQuestion();
                    return false;
                }});
            $("textarea").keydown(function (e) {
                if (e.keyCode == 13 && e.shiftKey) { // shift enter
                    e.preventDefault();
                    postQuestion();
                }
                else if (e.keyCode === 9) { // tab
                    e.preventDefault();     // prevent loosing focus
                    // get caret position/selection
                    var start = this.selectionStart;
                    var end = this.selectionEnd;
                    var value = $(this).val();

                    // set textarea value to: text before caret + tab + text after caret
                    $(this).val(value.substring(0, start) + "    " + value.substring(end));

                    // put caret at right position again (add one for the tab)
                    this.selectionStart = this.selectionEnd = start + 4;
                }});
            $('#question_div').animateCSS('zoomIn');
            break;

        case "shake":
            $('#topic_progress').css('width', (100*response["params"]["progress"])+'%').attr('aria-valuenow', 100*response["params"]["progress"]);
            $('#question_div').animateCSS('shake');
            break;

        case "finished_topic":
            $('#topic_progress').css('width', '100%').attr('aria-valuenow', 100);
            $("#container").html('<img src="/static/trophy.png" alt="trophy" class="img-fluid mx-auto my-5 d-block" width="25%">');
            $("#container").animateCSS('tada');
            setTimeout(function(){ window.location.replace('/'); }, 2000);
            break;
        }
    }

    // Get current question
    function getQuestion() {
        $.ajax({
            type: "GET",
            url: "/question",
            // headers: {"X-XSRFToken": token},
            dataType: "json", // expected from server
            success: updateQuestion,
            error: function() {alert("O servidor não responde.");}
        });
    }

    // Send answer and receive a response.
    // The response can be a new_question or a shake if the answer is wrong.
    function postQuestion() {
        $.ajax({
            type: "POST",
            url: "/question",
            // headers: {"X-XSRFToken": token},
            data: $("#question_form").serialize(), // {'a':10,'b':20},
            dataType: "json", // expected from server
            success: updateQuestion,
            error: function() {alert("O servidor não responde.");}
        });
    }

    $(document).ready(function() {
        getQuestion();
        $("#submit").click(postQuestion);
        // $("#change_password").click(change_password);
    });
</script>


</body>
</html>