NDOJ/templates/resolver/media-js.html

428 lines
23 KiB
HTML
Raw Normal View History

2022-12-18 23:53:28 +00:00
{% compress js %}
<script type="text/javascript">
var updateInterval = 2000;
var curop = -1;
var lintHeight = 100;
var bonusHeight = 30;
var speed = 700;
var autopress = false;
$(document).ready(function() {
2022-12-19 01:01:02 +00:00
$.getJSON('{{ contest_json }}', function (data) {
2022-12-18 23:53:28 +00:00
console.log("OK");
var resolver = new Resolver(data.problem_sub, data.sub_frozen, data.problems, data.users);
window.resolver = resolver;
resolver.calcOperations();
resolver.frozen_op = resolver.operations.length - 1;
resetCSS();
light_theme();
show_rank();
}).fail(function(){
console.log("An error has occurred.");
});
});
function updateSelector() {
$('.show-rank').css('opacity', '0');
$('.show-rank').css('z-index', '-1');
var operation = resolver.operations[curop];
var tmp = resolver.rank_frozen[operation.user_id];
if (operation.type != 'delay') {
window.scrollTo({
top: (resolver.rank_frozen[operation.user_id].rank_show - 6) * lintHeight + bonusHeight,
left: 0,
behavior: 'smooth'
});
for (let i in resolver.rank_frozen) {
$('#rank-' + i).css({'background-color' : ''});
if (resolver.rank_frozen[i].rank_show % 2 == 0) {
$('#rank-' + i).removeClass('background-secondary');
$("#rank-" + i).addClass('background-primary');
} else {
$("#rank-" + i).removeClass('background-primary');
$("#rank-" + i).addClass('background-secondary');
}
}
$('#rank-' + operation.user_id).css({ "background-color": "#5382DF" });
}
if (operation.type == 'problem') {
$('#rank-' + operation.user_id + ' .p-' + operation.problem_index + ' .pro-score').removeClass(resolver.status(tmp.problem[operation.problem_index]));
$('#rank-' + operation.user_id + ' .p-' + operation.problem_index + ' .pro-score').addClass('selected');
} else if (operation.type == 'sub') {
$('#rank-' + operation.user_id + ' .p-' + operation.problem_index + ' .s-' + operation.problem_sub).removeClass(resolver.status(tmp.problem[operation.problem_index][operation.problem_sub]));
$('#rank-' + operation.user_id + ' .p-' + operation.problem_index + ' .s-' + operation.problem_sub + ' .pro-content').removeClass(resolver.status(tmp.problem[operation.problem_index][operation.problem_sub]));
$('#rank-' + operation.user_id + ' .p-' + operation.problem_index + ' .s-' + operation.problem_sub).addClass('selected');
$('#rank-' + operation.user_id + ' .p-' + operation.problem_index + ' .s-' + operation.problem_sub + ' .p-content').addClass('selected');
if (operation.frozen == 'ok') {
$('#rank-' + operation.user_id + ' .p-' + operation.problem_index + ' .s-' + operation.problem_sub).removeClass('frozen');
$('#rank-' + operation.user_id + ' .p-' + operation.problem_index + ' .s-' + operation.problem_sub + ' .pro-content').removeClass('frozen');
}
}
}
function getNewData() {
var operation = resolver.operations[curop];
if (operation.type == 'problem') {
var tmp = resolver.rank_frozen[operation.user_id];
for (let i in resolver.rank_frozen) {
if (resolver.rank_frozen[i].rank_show < operation.old_rank && resolver.rank_frozen[i].rank_show >= operation.new_rank) {
resolver.rank_frozen[i].rank_show++;
}
}
tmp.rank_show = operation.new_rank;
tmp.score += operation.new_point - operation.old_point;
tmp.problem[operation.problem_index].old_verdict = operation.new_verdict;
tmp.problem[operation.problem_index].new_verdict = 'NA';
tmp.problem[operation.problem_index].old_point = operation.new_point;
$('#rank-' + operation.user_id + ' .p-' + operation.problem_index + ' .pro-score').removeClass('selected');
$('#rank-' + operation.user_id + ' .p-' + operation.problem_index + ' .pro-score').addClass(resolver.status(tmp.problem[operation.problem_index]));
$('#rank-' + operation.user_id + ' .score').text(tmp.score);
if (operation.new_rank % 2 == 0) {
let per = tmp.problem[operation.problem_index].old_point;
let linear = `linear-gradient(90deg, ${partially} ${per}%, ${theme_background_color} ${per}%)`;
$('#rank-' + operation.user_id + ' .p-' + operation.problem_index + ' .pro-score.partially').css("background", linear);
} else {
let per = tmp.problem[operation.problem_index].old_point;
let linear = `linear-gradient(90deg, ${partially} ${per}%, ${untouched} ${per}%)`;
$('#rank-' + operation.user_id + ' .p-' + operation.problem_index + ' .pro-score.partially').css("background", linear);
}
for (let i in resolver.rank_frozen) {
$('#rank-' + i + ' .rank').text(resolver.rank_frozen[i].rank_show);
$("#rank-" + i).css('top', (resolver.rank_frozen[i].rank_show - 1) * lintHeight + bonusHeight);
if (resolver.rank_frozen[i].rank_show % 2 == 0) {
if (i != operation.user_id) {
$("#rank-" + i).removeClass('background-secondary');
$("#rank-" + i).addClass('background-primary');
}
$("#rank-" + i + ' .prob-container').removeClass('background-primary');
$("#rank-" + i + ' .problems').removeClass('background-primary');
$("#rank-" + i + ' .prob-container').addClass('background-secondary');
$("#rank-" + i + ' .problems').addClass('background-secondary');
for (let problemid in resolver.rank_frozen[i].problem) {
let per = resolver.rank_frozen[i].problem[problemid].old_point;
let linear = `linear-gradient(90deg, ${partially} ${per}%, ${primary_color} ${per}%)`;
$('#rank-' + i + ' .p-' + problemid + ' .pro-score.partially').css("background", linear);
}
} else {
if (i != operation.user_id) {
$("#rank-" + i).removeClass('background-primary');
$("#rank-" + i).addClass('background-secondary');
}
$("#rank-" + i + ' .prob-container').removeClass('background-secondary');
$("#rank-" + i + ' .problems').removeClass('background-secondary');
$("#rank-" + i + ' .prob-container').addClass('background-primary');
$("#rank-" + i + ' .problems').addClass('background-primary');
for (let problemid in resolver.rank_frozen[i].problem) {
let per = resolver.rank_frozen[i].problem[problemid].old_point;
let linear = `linear-gradient(90deg, ${partially} ${per}%, ${secondary_color} ${per}%)`;
$('#rank-' + i + ' .p-' + problemid + ' .pro-score.partially').css("background", linear);
}
}
}
} else if (operation.type == 'sub') {
var tmp = resolver.rank_frozen[operation.user_id];
tmp.problem[operation.problem_index][operation.problem_sub].old_verdict = operation.new_verdict;
tmp.problem[operation.problem_index][operation.problem_sub].new_verdict = 'NA';
tmp.problem[operation.problem_index].old_point += operation.new_point - operation.old_point;
tmp.problem[operation.problem_index][operation.problem_sub].old_point = operation.new_point;
$('#rank-' + operation.user_id + ' .p-' + operation.problem_index + ' .pro-score').text(tmp.problem[operation.problem_index].old_point);
$('#rank-' + operation.user_id + ' .p-' + operation.problem_index + '.s-' + operation.problem_sub + ' .p-content').text(operation.new_point);
$('#rank-' + operation.user_id + ' .p-' + operation.problem_index + ' .s-' + operation.problem_sub).removeClass('selected');
$('#rank-' + operation.user_id + ' .p-' + operation.problem_index + ' .s-' + operation.problem_sub + ' .p-content').removeClass('selected');
$('#rank-' + operation.user_id + ' .p-' + operation.problem_index + ' .s-' + operation.problem_sub).addClass(resolver.status(tmp.problem[operation.problem_index][operation.problem_sub]));
$('#rank-' + operation.user_id + ' .p-' + operation.problem_index + ' .s-' + operation.problem_sub + ' .p-content').addClass(resolver.status(tmp.problem[operation.problem_index][operation.problem_sub]));
} else if (operation.type == 'show') {
$('.show-rank').css('opacity', '1');
$('.show-rank').css('z-index', '10000');
$('.show-rank .rank-show').text('Rank ' + resolver.rank_frozen[operation.user_id].rank_show);
$('.show-rank .name-show').text(resolver.users[operation.user_id].name);
$('.show-rank .school-show').text(resolver.users[operation.user_id].school);
}
$('.ac').css("background", "");
}
function resetCSS() {
$('.navbar').css('border-radius', '0');
$(".hidden-board").css('height', (window.resolver.rank_frozen.length - 1) * lintHeight);
}
function show_rank() {
for (let i in window.resolver.rank_frozen) {
rank_id = document.createElement('div');
$(rank_id).css('position', 'absolute');
$(rank_id).css('top', (resolver.rank_frozen[i].rank_show - 1) * lintHeight + bonusHeight);
if (resolver.rank_frozen[i].rank_show % 2 == 0) {
$(rank_id).addClass('background-primary');
} else {
$(rank_id).addClass('background-secondary');
}
$(rank_id).attr('id', 'rank-' + i);
$(rank_id).addClass('rank-list-item');
$(".rank-list").append($(rank_id));
rank = document.createElement('div');
$(rank).addClass('rank');
$(rank).text(resolver.rank_frozen[i].rank_show);
$(rank_id).append($(rank));
content = document.createElement('div');
$(content).addClass('content');
$(rank_id).append($(content));
info_div = document.createElement('div');
$(info_div).addClass('info-container');
$(content).append($(info_div));
name_div = document.createElement('div');
$(name_div).addClass('name');
$(name_div).text(window.resolver.users[i].name);
$(info_div).append($(name_div));
school_div = document.createElement('div');
$(school_div).addClass('school');
$(school_div).text("(" + window.resolver.users[i].school + ")");
$(info_div).append($(school_div));
problem_container = document.createElement('div');
$(problem_container).addClass('problem-container');
for (let problem_id in window.resolver.rank_frozen[i].problem) {
problems_con = document.createElement('div');
$(problems_con).addClass('p-' + problem_id);
$(problems_con).addClass('prob-container');
if (resolver.rank_frozen[i].rank_show % 2 == 1) {
$(problems_con).addClass('background-primary');
} else {
$(problems_con).addClass('background-secondary');
}
pro_score = document.createElement('div');
$(pro_score).addClass('pro-score');
$(pro_score).text(resolver.rank_frozen[i].problem[problem_id].old_point);
$(pro_score).addClass(window.resolver.status(window.resolver.rank_frozen[i].problem[problem_id]));
if (resolver.status(window.resolver.rank_frozen[i].problem[problem_id]) == 'partially') {
if (resolver.rank_frozen[i].rank_show % 2 == 1) {
let per = resolver.rank_frozen[i].problem[problem_id].old_point;
let linear = `linear-gradient(90deg, ${partially} ${per}%, ${secondary_color} ${per}%)`;
$(pro_score).css("background", linear);
} else {
let per = resolver.rank_frozen[i].problem[problem_id].old_point;
let linear = `linear-gradient(90deg, ${partially} ${per}%, ${primary_color} ${per}%)`;
$(pro_score).css("background", linear);
}
}
$(problems_con).append($(pro_score));
problems = document.createElement('ul');
$(problems).addClass('p-' + problem_id);
$(problems).addClass('problems');
for (let j = 1; j <= resolver.problem_sub[problem_id - 1]; j++) {
problem = document.createElement('li');
$(problem).addClass('item');
$(problem).addClass(window.resolver.substatus(window.resolver.rank_frozen[i].problem[problem_id], j));
$(problem).addClass('p-' + problem_id);
$(problem).addClass('s-' + j);
$(problem).addClass('id-' + i);
$(problems).append($(problem));
p_content = document.createElement('div');
$(p_content).addClass(window.resolver.substatus(window.resolver.rank_frozen[i].problem[problem_id], j));
$(p_content).addClass('p-content');
if (j < resolver.sub_frozen[problem_id - 1]) {
$(p_content).text(window.resolver.rank_frozen[i].problem[problem_id][j].old_point);
} else {
$(p_content).text("?");
}
$(problem).append($(p_content));
}
$(problems_con).append($(problems));
$(problem_container).append($(problems_con));
}
$(content).append($(problem_container));
score = document.createElement('div');
$(score).addClass('score');
$(score).text(window.resolver.rank_frozen[i].score);
$(rank_id).append($(score));
}
}
var theme = 0;
$('body').keydown(function (e) {
if (e.keyCode == 77) {
console.log("Press M!");
}
if (e.keyCode == 13) {
console.log("Press Enter!");
if (curop == resolver.operations.length - 1) {
console.log("Do Enter Pressed!");
resolver.operations = [];
curop = -1;
resolver.next_operation();
if (window.resolver.operations.length == 0) {
$('.show-rank').css('visibility', 'hidden');
$('.show-rank').css('opacity', '0');
for (let i in resolver.rank_frozen) {
if (resolver.rank_frozen[i].rank_show % 2 == 0) {
$("#rank-" + i).removeClass('background-secondary');
$("#rank-" + i).addClass('background-primary');
} else {
$("#rank-" + i).removeClass('background-primary');
$("#rank-" + i).addClass('background-secondary');
}
}
}
console.log(resolver.operations);
if (resolver.operations.length == 1) {
for (let x in window.resolver.operations) {
curop++;
updateSelector();
setTimeout(function () {
getNewData();
}, 500);
}
} else {
for (let x in window.resolver.operations) {
setTimeout(function () {
curop++;
updateSelector();
}, speed * x);
setTimeout(function () {
getNewData();
}, speed * x + speed / 2);
}
}
}
}
if (e.keyCode == 65) {
console.log("A pressed!");
if (autopress == false) {
autopress = true;
// for (let x in resolver.operations) {
// curop++;
// updateSelector();
// getNewData();
// }
for (let x in window.resolver.operations) {
setTimeout(function () {
curop++;
updateSelector();
}, speed * x);
setTimeout(function () {
getNewData();
}, speed * x + speed / 2);
}
}
}
if (e.keyCode == 66) {
theme = 1 - theme;
if (theme) dark_theme();
else light_theme();
}
});
$('.rank-list').on('click', 'li', function () {
if (curop == resolver.operations.length - 1) {
var classstr = $(this).attr('class');
var index = classstr.indexOf('id-');
var useridstr = "";
for (let i = index + 3; i < classstr.length; i++) {
useridstr = useridstr + classstr[i];
}
var userid = parseInt(useridstr);
var problemid = classstr[classstr.indexOf('p-') + 2];
var sub = parseInt(classstr[classstr.indexOf('s-') + 2]);
var rankid = resolver.rank_frozen[userid].rank_show;
resolver.operations = [];
curop = -1;
console.log("Clicked!");
resolver.operation(rankid - 1, problemid, sub);
if (resolver.operations.length == 1) {
for (let x in window.resolver.operations) {
curop++;
updateSelector();
setTimeout(function () {
getNewData();
}, 500);
}
} else {
for (let x in window.resolver.operations) {
setTimeout(function () {
curop++;
updateSelector();
}, speed * x);
setTimeout(function () {
getNewData();
}, speed * x + speed / 2);
}
}
}
});
var primary_color, secondary_color;
var wa, partially, ac, selected, frozen, untouched;
var theme_text_color, theme_background_color;
function dark_theme() {
primary_color = "black";
secondary_color = '#3e3e3e';
frozen = "#34495e";
untouched = "#1f1f1f";
wa = "#B71C0C";
partially = "#A79D03";
ac = "#086d08";
selected = "rgb(206, 75, 199)";
theme_text_color = "white";
theme_background_color = "black";
set_theme();
}
function light_theme() {
primary_color = "#EFF5F5";
secondary_color = "#D6E4E5";
wa = "#EB6440";
partially = "#fff133";
ac = "#80ED99";
// ac = "green";
frozen = "#497174";
untouched = "#A7BBC7";
selected = "rgb(206, 75, 199)";
theme_text_color = "black";
theme_background_color = "white";
set_theme();
}
function set_theme() {
let root = document.querySelector(':root');
root.style.setProperty('--primary_color', primary_color);
root.style.setProperty('--secondary_color', secondary_color);
root.style.setProperty('--wa', wa);
root.style.setProperty('--partially', partially);
root.style.setProperty('--ac', ac);
root.style.setProperty('--selected', selected);
root.style.setProperty('--frozen', frozen);
root.style.setProperty('--untouched', untouched);
root.style.setProperty('--theme-text-color', theme_text_color);
root.style.setProperty('--theme-background-color', theme_background_color);
for (let i in resolver.rank_frozen) {
if (resolver.rank_frozen[i].rank_show % 2 == 0) {
for (let problemid in resolver.rank_frozen[i].problem) {
let per = resolver.rank_frozen[i].problem[problemid].old_point;
let linear = `linear-gradient(90deg, ${partially} ${per}%, ${primary_color} ${per}%)`;
$('#rank-' + i + ' .p-' + problemid + ' .pro-score.partially').css("background", linear);
}
} else {
for (let problemid in resolver.rank_frozen[i].problem) {
let per = resolver.rank_frozen[i].problem[problemid].old_point;
let linear = `linear-gradient(90deg, ${partially} ${per}%, ${secondary_color} ${per}%)`;
$('#rank-' + i + ' .p-' + problemid + ' .pro-score.partially').css("background", linear);
}
}
}
}
</script>
{% endcompress %}