// Copyright 2014 Team 254. All Rights Reserved.
// Author: pat@patfairbank.com (Patrick Fairbank)
//
// Client-side methods for editing a match in the match review page.
var scoreTemplate = Handlebars.compile($("#scoreTemplate").html());
var allianceResults = {};
// Hijack the form submission to inject the data in JSON form so that it's easier for the server to parse.
$("form").submit(function() {
updateResults("red");
updateResults("blue");
var redScoreJson = JSON.stringify(allianceResults["red"].score);
var blueScoreJson = JSON.stringify(allianceResults["blue"].score);
// Inject the JSON data into the form as hidden inputs.
$("").attr("type", "hidden").attr("name", "redScoreJson").attr("value", redScoreJson).appendTo("form");
$("").attr("type", "hidden").attr("name", "blueScoreJson").attr("value", blueScoreJson).appendTo("form");
return true;
});
// Draws the match-editing form for one alliance based on the cached result data.
var renderResults = function(alliance) {
var result = allianceResults[alliance];
var scoreContent = scoreTemplate(result);
$("#" + alliance + "Score").html(scoreContent);
getInputElement(alliance, "AutoPoints").val(result.score.AutoPoints);
getInputElement(alliance, "TeleopPoints").val(result.score.TeleopPoints);
getInputElement(alliance, "EndgamePoints").val(result.score.EndgamePoints);
};
// Converts the current form values back into JSON structures and caches them.
var updateResults = function(alliance) {
var result = allianceResults[alliance];
var formData = {};
$.each($("form").serializeArray(), function(k, v) {
formData[v.name] = v.value;
});
result.score.AutoPoints = parseInt(formData[alliance + "AutoPoints"]);
result.score.TeleopPoints = parseInt(formData[alliance + "TeleopPoints"]);
result.score.EndgamePoints = parseInt(formData[alliance + "EndgamePoints"]);
};
// Returns the form input element having the given parameters.
var getInputElement = function(alliance, name, value) {
var selector = "input[name=" + alliance + name + "]";
if (value !== undefined) {
selector += "[value=" + value + "]";
}
return $(selector);
};