62 lines
2.1 KiB
HTML
62 lines
2.1 KiB
HTML
|
<script src="{{ static('libs/tablesorter.js') }}" type="text/javascript"></script>
|
||
|
<script type="text/javascript">
|
||
|
$(document).ready(function () {
|
||
|
var table = $("#judge-status");
|
||
|
table.tablesorter();
|
||
|
|
||
|
var tooltip_classes = 'tooltipped tooltipped-w';
|
||
|
var active_judge = null;
|
||
|
var active_lang = null;
|
||
|
|
||
|
function display_tooltip(where) {
|
||
|
where.addClass(tooltip_classes).attr('aria-label', where.attr('data-runtime-info'));
|
||
|
}
|
||
|
|
||
|
function install_tooltips() {
|
||
|
$('.runtime-label').each(function () {
|
||
|
var link = $(this);
|
||
|
link.mouseenter(function (e) {
|
||
|
active_judge = link.attr('data-judge');
|
||
|
active_lang = link.attr('data-lang');
|
||
|
display_tooltip(link);
|
||
|
}).mouseleave(function (e) {
|
||
|
active_judge = active_lang = null;
|
||
|
link.removeClass(tooltip_classes).removeAttr('aria-label');
|
||
|
});
|
||
|
});
|
||
|
}
|
||
|
|
||
|
var outdated = false;
|
||
|
|
||
|
function update_table() {
|
||
|
if ($('body').hasClass('window-hidden'))
|
||
|
return outdated = true;
|
||
|
$.ajax({
|
||
|
url: '{{ url('status_table') }}'
|
||
|
}).done(function (data) {
|
||
|
// Readd the tooltip classes to minimize flicker on update
|
||
|
var new_node = $(data);
|
||
|
|
||
|
if (active_lang && active_judge) {
|
||
|
var selected = new_node.find('[data-judge=' + active_judge + '][data-lang=' + active_lang + ']');
|
||
|
if (selected) // Might have been removed, when a judge disconnected
|
||
|
display_tooltip(selected);
|
||
|
}
|
||
|
|
||
|
table.html(new_node);
|
||
|
install_tooltips();
|
||
|
}).always(function () {
|
||
|
outdated = false;
|
||
|
setTimeout(update_table, 10000);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
$(window).on('dmoj:window-visible', function () {
|
||
|
if (outdated)
|
||
|
update_table();
|
||
|
});
|
||
|
|
||
|
setTimeout(update_table, 10000);
|
||
|
install_tooltips();
|
||
|
});
|
||
|
</script>
|