Пояснительная записка (1231610), страница 10
Текст из файла (страница 10)
var team = teamId.get( submits[i].teamId );
var problem = problemId.get( submits[i].problemCode );
if( team == null || problem == null )
continue;
if(!submits[i].checked && submits[i].time <= freezeTime)
teams[team].problemAllSubmit[problem] ++;
}
}
function createMaps() {
teamId = new Map();
teamPlace = [];
problemId = new Map();
problemFirstSolved = [];
for( var i = 0; i < teams.length; i ++ ) {
teamId.set( teams[i].id, i );
teamPlace[i] = i;
}
for( var i = 0; i < problems.length; i ++ ) {
problemId.set( problems[i].code, i );
problemFirstSolved.push( -1 );
}
}
function compareSortSubmit( i, j ) {
if( i.time < j.time )
return -1;
if( i.time > j.time )
return 1;
return 0;
}
function createSubmits() {
submits.sort( compareSortSubmit );
for( var i = 0; i < submits.length; i ++ ) {
submits[i].checked = false;
}
}
function createProblems() {
for( var i = 0; i < problems.length; i ++ ) {
problems[i].solved = 0;
problems[i].submit = 0;
}
}
Листинг А.11 – Файл updateTable.js
function updateTable() {
updateTableProblem();
updateTrSolvedAndTime();
updateTrPlace();
updateTableClass();
updateTrStatistic();
sortTable();
}
function sortTable() {
for( var i = 0; i < teamPlace.length; i ++ )
sortTr( teamPlace[i], i + 3 );
}
function sortTrNextSubmit() {
var team = teamId.get( submits[nextSubmit].teamId );
var place = 0;
for( var i = 0; i < teamPlace.length; i ++ )
if( teamPlace[i] == team )
place = i + 3;
return sortTrSubmit( team, place );
}
function sortTrNextTeamSubmit() {
var place = 0;
for( var i = 0; i < teamPlace.length; i ++ )
if( teamPlace[i] == prevTeam )
place = i + 3;
return sortTrSubmit( prevTeam, place );
}
function sortTrSubmit( team, place ) {
var tr = document.getElementById( teams[team].id );
var n = tr.rowIndex - place;
var speedd = speed / 5;
for(var i = tr.rowIndex - 1, j = 1; i >= place; i--, j++)
setTimeout( sortTr, j * speedd, team, i );
return speed + n * speedd;
}
function sortTr( team, place ) {
var table = document.getElementById( "table" );
var tr = document.getElementById( teams[team].id );
for( var i = tr.rowIndex - 1; i >= place; i -- )
table.rows[i].parentNode.insertBefore(tr,table.rows[i]);
}
function updateTableClass() {
var color = true;
var name = "tdBody"
for( var i = 0; i < teamPlace.length; i ++ ) {
if( i == 0 || teams[teamPlace[i]].solved != teams[teamPlace[i - 1]].solved )
color = !color;
updateTrClass( teamPlace[i], name + ( 1 + color ) );
}
}
function updateTrClass( team, className ) {
updateTdPlaceClass( team, className );
updateTdNameClass( team, className );
updateTdSolvedClass( team, className );
updateTdTimeClass( team, className );
}
function updateTdPlaceClass( team, className ) {
var id = teams[team].getIdPlace();
var td = document.getElementById( id );
td.className = className;
}
function updateTdNameClass( team, className ) {
if( modeOrder && team == showNextTeam ) {
prevTeamClass = className;
return;
}
var id = teams[team].getIdName();
var td = document.getElementById( id );
td.className = className;
}
function updateTdSolvedClass( team, className ) {
var id = teams[team].getIdSolved();
var td = document.getElementById( id );
td.className = className;
}
function updateTdTimeClass( team, className ) {
var id = teams[team].getIdTime();
var td = document.getElementById( id );
td.className = className;
}
function updateTrPlace() {
sortTeamPlace();
var place = 1;
for( var i = 0; i < teamPlace.length; i ++ ) {
if( i == 0 || compareSortTeamPlace( teamPlace[i], teamPlace[i - 1] ) ) {
place = i + 1;
}
updateTdPlace( teamPlace[i], place );
}
}
function updateTdPlace( team, place ) {
var id = teams[team].getIdPlace();
var td = document.getElementById( id );
td.innerHTML = place;
}
function updateTrSolvedAndTime() {
for( var i = 0; i < teams.length; i ++ ) {
updateTdSolved( i );
updateTdTime( i );
}
}
function onTdNextSubmit() {
var team = teamId.get( submits[nextSubmit].teamId );
var problem = problemId.get( submits[nextSubmit].problemCode );
onTdSubmit( team, problem );
}
function onTdNextTeamSubmit() {
var team = teamPlace[nextTeam];
var submit = teams[team].getIdSubmit();
var problem = problemId.get( submits[submit].problemCode );
onTdSubmit( team, problem );
}
function onTdSubmit( team, problem ) {
var id = teams[team].getIdProblem( problem );
var td = document.getElementById( id );
td.className = "tdNewSubmit";
}
function offTdNextSubmit() {
var team = teamId.get( submits[nextSubmit].teamId );
var problem = problemId.get( submits[nextSubmit].problemCode );
offTdSubmit( team, problem );
}
function offTdNextTeamSubmit() {
var team = teamPlace[nextTeam];
var submit = teams[team].getIdSubmit();
var problem = problemId.get( submits[submit].problemCode );
offTdSubmit( team, problem );
}
function offTdSubmit( team, problem ) {
updateTdProblem( team, problem );
updateTdSolvedAndTime( team );
}
function onTdTeam() {
var team = teamPlace[nextTeam];
var td = document.getElementById(teams[team].getIdName());
prevTeamClass = td.className;
td.className = "tdTeamSubmit";
showNextTeam = team;
}
function offTdTeam() {
if( showNextTeam == -1 )
return;
var td = document.getElementById( teams[showNextTeam].getIdName() );
td.className = prevTeamClass;
showNextTeam = -1;
}
function updateTdSolvedAndTime( team ) {
updateTdSolved( team );
updateTdTime( team );
}
function updateTdSolved( team ) {
var id = teams[team].getIdSolved();
var td = document.getElementById( id );
td.innerHTML = teams[team].getSolved();
}
function updateTdTime( team ) {
var id = teams[team].getIdTime();
var td = document.getElementById( id );
td.innerHTML = teams[team].getTime();
}
function updateTableProblem() {
for( var i = 0; i < teams.length; i ++ ) {
for( var j = 0; j < problems.length; j ++ ) {
updateTdProblem( i, j );
}
}
}
function updateTdProblem( team, problem ) {
var id = teams[team].getIdProblem( problem );
var td = document.getElementById( id );
td.innerHTML = teams[team].getVerdict( problem );
td.className = teams[team].getClassVerdict( problem );
}
function updateTrStatistic() {
for( var i = 0; i < problems.length; i ++ ) {
updateTdStatisticProblem( i );
}
updateTdTotal();
}
function updateTdStatisticProblem( problem ) {
var id = problems[problem].getIdStatistic();
var td = document.getElementById( id );
td.innerHTML = problems[problem].getSolved();
td.className = problems[problem].getClassSolved();
}
function updateTdTotal() {
var td = document.getElementById( "Total" );
td.innerHTML = getTotal();
}
function getTotal() {
var solved = 0;
var submit = 0;
for( var i = 0; i < problems.length; i ++ ) {
solved += problems[i].solved;
submit += problems[i].submit;
}
var str = "";
str += solved;
str += "<br>";
str += submit;
return str;
}
Листинг А.12 – Файл table.js
var isLoadLog = false;
var teams = [];
var problems = [];
var submits = [];
var teamId = new Map();
var problemId = new Map();
var teamPlace = [];
var problemFirstSolved = [];
var prevFunction;
var nextSubmit;
var nextTeam;
var prevTeam;
var prevTeamClass;
var showNextTeam;
var freezeTime = 240 * 60;
var speed = 500;
var showSimulate = true;
var showTime = true;
var showSubmit = false;
var showAllSubmit = false;
var modeOrder = true;
var modeStep = true;
var step = false;
var nextFunction = false;
var isFreezeTime = false;
var timerNextFunction;
var KEY_CODE = {
LEFT: 37,
UP: 38,
RIGHT: 39,
DOWN: 40,
SPACE: 187
};
window.unload = function() {
document.getElementById( "newTable" ).onclick = newTable;
document.getElementById( "modeStepOn" ).onclick = setModeStep;
document.getElementById( "modeStepOff" ).onclick = setModeStep;
document.getElementById( "showTime" ).onclick = setShowTime;
document.getElementById( "showSubmit" ).onclick = setShowSubmit;
}
window.addEventListener( "keyup", handler, false );
function loadLog( onSuccess ) {
var files = document.getElementById( "fileLog" ).files;
if( !files.length )
return false;
var reader = new FileReader();
reader.onloadend = function( event ) {
onSuccess( event.target.result );
};
reader.onerror = function( event ) {
alert( "Файл не может быть прочитан! Код ошибки: " + event.target.error.code );
};
isLoadLog = true;
reader.readAsText( files[0] );
return true;
}
function loadLogFromUser() {
if( loadLog( function( log ) {
isLoadLog = false;
loadLogFromFile( log, teams, problems, submits );
createTable();
goStart();
} ) ) {
deleteTable();
}
}
function loadLogFromServer() {
deleteTable();
isLoadLog = true;
var file = document.getElementById( "fileLogFromServer" ).value;
$.get("php/loadLog.php", {"file": file}, function( data ) {
isLoadLog = false;
loadLogFromFile( data, teams, problems, submits );
createTable();
goStart();
} );
}
function newTable() {
if( isLoadLog ) {
alert( "Дождитесь загрузки лога." );
return;
}
clearTimeout( timerNextFunction );
setFreezeTime();
getModeOrder();
createMaps();
createSubmits();
createTeams();
createTeamsAllSubmit();
createProblems();
createTable();
updateTable();
nextSubmit = 0;
nextTeam = teamPlace.length - 1;
showNextTeam = -1;
prevFunction = newTable;
nextFunction = false;
if( !showSimulate )
step = true;
else
step = false;
getNextFunction();
}
function deleteTable() {
clearTimeout( timerNextFunction );
teams = [];
problems = [];
submits = [];
}
function goFreezeTime() {
showSimulate = false;
newTable();
}
function goStart() {
showSimulate = true;
newTable();
}
function handler( event ) {
if( event.keyCode == KEY_CODE.RIGHT )
doStep();
}
function doStep() {
if( !showSimulate )
return;
if( modeStep )
step = true;
else
step = !step;