{% 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() { window.data = {{ contest_json }}; 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(); }); 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; tmp.score = round2(tmp.score); $('#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 = round2(tmp.problem[operation.problem_index].old_point / resolver.total_points[operation.problem_index] * 100); 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 = round2(tmp.problem[operation.problem_index].old_point / resolver.total_points[operation.problem_index] * 100);; 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 = round2(resolver.rank_frozen[i].problem[problemid].old_point / resolver.total_points[problemid] * 100); 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 = round2(resolver.rank_frozen[i].problem[problemid].old_point / resolver.total_points[problemid] * 100); 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].old_point = round2(tmp.problem[operation.problem_index].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 = round2(resolver.rank_frozen[i].problem[problem_id].old_point / resolver.total_points[problem_id] * 100); let linear = `linear-gradient(90deg, ${partially} ${per}%, ${secondary_color} ${per}%)`; $(pro_score).css("background", linear); } else { let per = round2(resolver.rank_frozen[i].problem[problem_id].old_point / resolver.total_points[problem_id] * 100); 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 = round2(resolver.rank_frozen[i].problem[problemid].old_point / resolver.total_points[problemid] * 100); 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 = round2(resolver.rank_frozen[i].problem[problemid].old_point / resolver.total_points[problemid] * 100); let linear = `linear-gradient(90deg, ${partially} ${per}%, ${secondary_color} ${per}%)`; $('#rank-' + i + ' .p-' + problemid + ' .pro-score.partially').css("background", linear); } } } } </script> {% endcompress %}