$.fn.extend({ animateCSS: function (animation) { var animationEnd = 'webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend'; this.addClass('animated ' + animation).one(animationEnd, function() { $(this).removeClass('animated ' + animation); }); } }); // Process response given by the server function updateQuestion(response){ switch (response["method"]) { case "new_question": $("#question_div").html(response["params"]["question"]); $("#comments").html(""); $('#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; }}); $('#question_div').animateCSS('bounceInDown'); break; case "shake": $('#topic_progress').css('width', (100*response["params"]["progress"])+'%').attr('aria-valuenow', 100*response["params"]["progress"]); $('#question_div').animateCSS('shake'); $('#comments').html(response['params']['comments']); MathJax.Hub.Queue(["Typeset",MathJax.Hub,"#comments"]); break; case "finished_topic": $('#submit').css("visibility", "hidden"); $("#content").html(response["params"]["question"]); $('#topic_progress').css('width', '100%').attr('aria-valuenow', 100); $("#content").animateCSS('tada'); setTimeout(function(){ window.location.replace('/'); }, 2000); break; } } // Get current question function getQuestion() { $.ajax({ type: "GET", url: "/question", 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() { editor.save(); $.ajax({ type: "POST", url: "/question", 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); });