<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>