<!DOCTYPE html>
<html>
<head>
<script data-require="jquery@*" data-semver="3.1.1" src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script data-require="linq.js@*" data-semver="2.2.0+2" src="//cdnjs.cloudflare.com/ajax/libs/linq.js/2.2.0.2/linq.js"></script>
<script data-require="linq.js@*" data-semver="2.2.0+2" src="//cdnjs.cloudflare.com/ajax/libs/linq.js/2.2.0.2/jquery.linq.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body>
<input type="button" onclick="disableAnswering();" value="Stop"><input type="button" value="Continue" onclick="enableAnswering();">
<img id="objFullScreenImage" src="#" class="FullScreen DisplayNone">
<div id="objLoading" class="DisplayNone Loading">Loading!!!</div>
<div id="objTeams" class="Teams DisplayNone">
<label><input type="checkbox" id="objOnlyUnreviewedAnswers" checked="checked" value="only_unreviewed_answers">Only unreviewed questions (first refresh please)</label>
<div id="objTeamTemplate" class="Team DisplayNone">
</div>
<div id="objAnswerTemplate" class="Answer DisplayNone">
<div class="QuestionNumberAndText">number and text</div>
<div class="AnswerText DisplayNone">answer</div>
<div class="AnswerImage DisplayNone"><img /></div>
<button class="Good DisplayNone">Goed</button><button class="Bad DisplayNone">Fout</button>
</div>
</div>
<div id="objAnswersTemplate" class="Answers DisplayNone">
<div id="objAnswerTemplate" class="Answer DisplayNone"></div>
</div>
</body>
</html>
var _strAdminCode = "qwerty";
$(document).ajaxStart(function() {
$("#objLoading").removeClass("DisplayNone");
});
$(document).ajaxComplete(function() {
$("#objLoading").addClass("DisplayNone");
});
$(document).ajaxError(function(event, jqxhr, settings, thrownError) {
alert(thrownError);
});
function getAllTeams() {
ajax("teams", getAllTeamsCompleted, "GET", _strAdminCode, null);
}
function getAllTeamsCompleted(objTeams) {
$("#objTeams").removeClass("DisplayNone");
$.each(objTeams, function(i, v) {
var objTeam = $("#objTeamTemplate").clone().appendTo($("#objTeams"));
$(objTeam).attr("id", "objTeam_" + v.code);
$(objTeam).removeClass("DisplayNone");
$(objTeam).text("Team: " + v.name);
$(objTeam).attr("data-team_code", v.code);
$(objTeam).click(
function(e) {
if (e.target !== this)
return;
getAnswersOfTeam($(this).attr("data-team_code"));
})
});
}
function getAnswersOfTeam(strTeamCode) {
var $objGetQuestions = ajax("questions", null, "GET", null, null);
var $objGetAnswers = ajax("teams/" + strTeamCode + "/answers", null, "GET", null, "include_thumbnails=true");
$.when($objGetQuestions, $objGetAnswers).done(function(objQuestions, objAnswers) {
displayAnswersOfTeam(strTeamCode, objQuestions[0], objAnswers[0]);
});
}
function displayAnswersOfTeam(strTeamCode, objQuestions, objAnswers) {
$("#objTeam_" + strTeamCode + " > .Answer").remove();
var blnDisplayAllAnswers = $("#objOnlyUnreviewedAnswers:checked").val() !== "only_unreviewed_answers";
$.each(objAnswers, function(i, objAnswer) {
var blnDisplayAnswer = blnDisplayAllAnswers || (objAnswer.state == "not_checked");
if (blnDisplayAnswer) {
var objQuestion = Enumerable.From(objQuestions).Where(function(x) {
return x.number == objAnswer.number;
}).Single();
var intQuestionNumber = objQuestion.number;
var $objAnswer = $("#objAnswerTemplate").clone().appendTo($("#objTeam_" + strTeamCode));
$objAnswer.attr("id", "objAnswer_" + strTeamCode + "_" + intQuestionNumber);
$objAnswer.removeClass("DisplayNone");
$objAnswer.attr("data-team_code", strTeamCode);
$objAnswer.attr("data-question_number", objQuestion.number);
var strQuestionText = objQuestion.number + ". " + objQuestion.text;
if (blnDisplayAllAnswers)
strQuestionText += " (" + objAnswer.state + ")";
$objAnswer.find(".QuestionNumberAndText").text(strQuestionText);
var blnAtLeastOne = false;
if (objAnswer.text !== null) {
$objAnswer.find(".AnswerText").text(objAnswer.text).removeClass("DisplayNone");
blnAtLeastOne = true;
}
if (objAnswer.base64_thumbnail !== null) {
var $objImageContainer = $objAnswer.find(".AnswerImage").removeClass("DisplayNone");
var $objImage = $objImageContainer.find("img");
$objImage.attr("src", "data:image/png;base64, " + objAnswer.base64_thumbnail);
$objImage.click(function() {
// BUG: include_thumbnails must be true, to get the image
ajax("teams/" + strTeamCode + "/answers/" + intQuestionNumber,
function(objAnswer) {
$("#objFullScreenImage").attr("src", "data:image/png;base64, " + objAnswer.base64_image).removeClass("DisplayNone").click(function() {
$("#objFullScreenImage").attr("src", "#").addClass("DisplayNone");
});
}, "GET", null, "include_thumbnails=true&include_images=true");
});
blnAtLeastOne = true;
}
if (blnAtLeastOne && objAnswer.state !== "not_filled") {
$objAnswer.find(".Good").removeClass("DisplayNone").click(function(e) {
ajax("teams/" + strTeamCode + "/answers/" + intQuestionNumber + "/accept",
function() {
$objAnswer.remove();
}, "POST", _strAdminCode,null);
});
$objAnswer.find(".Bad").removeClass("DisplayNone").click(function(e) {
ajax("teams/" + strTeamCode + "/answers/" + intQuestionNumber + "/reject",
function() {
$objAnswer.remove();
}, "POST",_strAdminCode,null);
});
}
}
});
}
function ajax(strURL, objCallback, strMethod, strAdminCode, strParameters) {
strURL = "http://beta.iqualify.nl/Crazy88WebApi/" + strURL;
if (strAdminCode !== null)
strURL += "?admin_code=" + strAdminCode;
if (strParameters !== null)
strURL += "?" + strParameters;
return $.ajax({
method: strMethod === null ? "GET" : strMethod,
url: strURL,
contentType: "application/json",
success: function(objResult) {
if (objCallback)
objCallback(objResult);
}
});
}
function disableAnswering()
{
ajax("answers/disable", function(){alert("Answering questions by teams is disabled!!!");}, "PUT", _strAdminCode,null);
}
function enableAnswering()
{
ajax("answers/enable", function(){alert("Answering questions by teams is enabled");}, "PUT", _strAdminCode,null);
}
$(document).ready(function() {
var objQuerystring = getUrlVars();
if (objQuerystring["admin_code"])
_strAdminCode = objQuerystring["admin_code"];
getAllTeams();
});
// Read a page's GET URL variables and return them as an associative array.
function getUrlVars()
{
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++)
{
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
}
/* Styles go here */
.DisplayNone
{
display:none;
}
.Teams
{
border: 1px solid black;
padding: 5px;
}
.Team
{
border: 1px solid black;
padding: 5px;
margin:5px;
background:rgb(201, 242, 239);
}
.Answer
{
border: 1px solid black;
padding: 3px;
margin:5px;
background:#f1edc8;
}
.Loading
{
position:absolute;
top:0;
right:0;
bottom:0;
left: 0;
background:white;
}
.FullScreen
{
position:absolute;
top:0;
right:0;
bottom:0;
left: 0;
background:white;
}
button, input[type='button']
{
height:30px;
width:100px;
font-weight:bold;
margin:5px;
}
button.Good
{
background-color:green;
}
button.Bad
{
background-color:red;
}