NDOJ/templates/status/media-js.html
2020-01-21 15:35:58 +09:00

62 lines
No EOL
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>