X-Git-Url: http://git.ieval.ro/?p=plack-app-gruntmaster.git;a=blobdiff_plain;f=js%2F90-tracker.js;h=0db54590532bd215b1437926e58850bd3fdce21b;hp=1fa4905ed0887ba2f36221591fb3fe59b6b3bdb2;hb=7093e9ba00cf7727a52a49d34d4df12e4f865dd4;hpb=d5bf9a1d1fc3583bc058a90ce28efeb34819744b diff --git a/js/90-tracker.js b/js/90-tracker.js index 1fa4905..0db5459 100644 --- a/js/90-tracker.js +++ b/js/90-tracker.js @@ -1,118 +1,126 @@ -(function(){ - 'use strict'; +var TICK = '✔'; +var XMARK = '✘'; - function tick() { return $('✔') } - function xmark() { return $('✘') } +function clean_tracker(){ + $('.tracker-mark').each(function(e){ + e.parentNode.removeChild(e); + }); + $('.tracker-info').each(function(e){ + e.classList.remove('tracker-info'); + e.classList.remove('info'); + }); +} - function clean_tracker(){ - $('.tracker-mark').detach(); - $('.tracker-info').removeClass('tracker-info info'); - } +var tracker; - var tracker; +function update_tracker(){ + var data = localStorage.getItem('tracker_data'); + var user = localStorage.getItem('tracker_username'); + if(!data) + return; + data = JSON.parse(data); + var solved = {}; + var attempted = {}; + var solvednr = 0; + var attemptednr = 0; + data.problems.forEach(function(e){ + if(e.solved){ + solved[e.problem] = 1; + solvednr++; + } else { + attempted[e.problem] = 1; + attemptednr++; + } + }); - function update_tracker(){ - var data = localStorage.getItem('tracker_data'); - var user = localStorage.getItem('tracker_username'); - if(!data) - return; - data = JSON.parse(data); - var solved = {}; - var attempted = {}; - var solvednr = 0; - var attemptednr = 0; - data.problems.forEach(function(e){ - if(e.solved){ - solved[e.problem] = 1; - solvednr++; - } else { - attempted[e.problem] = 1; - attemptednr++; - } - }); + var contests = {}; + data.contests.forEach(function(e){ + contests[e.contest] = 1; + }); - var contests = {}; - data.contests.forEach(function(e){ - contests[e.contest] = 1; - }); + clean_tracker(); + $('#tracker_userlink')[0].innerHTML = data.name; + $('#tracker_solved')[0].innerHTML = solvednr; + $('#tracker_attempted')[0].innerHTML = attemptednr; + $('#tracker_contests')[0].innerHTML = data.contests.length; + $('#tracker_log')[0].setAttribute('href', '/log/?owner=' + user); - clean_tracker(); - $('#tracker_userlink').html(data.name); - $('#tracker_solved').html(solvednr); - $('#tracker_attempted').html(attemptednr); - $('#tracker_contests').html(data.contests.length); - $('#tracker_log').attr('href', '/log/?owner=' + user); + if(location.pathname == '/pb/') + $('table .name a').each(function(el) { + var id = el.getAttribute('href').split('?', 2)[0]; + if(solved[id]) + el.insertAdjacentHTML('beforebegin', TICK); + else if(attempted[id]) + el.insertAdjacentHTML('beforebegin', XMARK); + }); - if(location.pathname == '/pb/') - $('table').find('.name').find('a').each(function() { - var id = $(this).attr('href').split('?', 2)[0]; - if(solved[id]) - $(this).parent().prepend(tick()); - else if(attempted[id]) - $(this).parent().prepend(xmark()); - }); + if(location.pathname == '/ct/') + $('table .name a').each(function(el) { + var id = el.getAttribute('href').substr(4); + if(contests[id]) + el.insertAdjacentHTML('beforebegin', TICK); + }); - if(location.pathname == '/ct/') - $('table').find('.name').find('a').each(function() { - var id = $(this).attr('href').substr(4); - if(contests[id]) - $(this).parent().prepend(tick()); - }); + if(location.pathname == '/log/') + $('table tbody tr').each(function(el) { + var owner = el.querySelector('.owner a'); + if(!owner || owner.getAttribute('href') != '/us/' + user) + return; + var state = el.getElementsByClassName('r0').length ? TICK : XMARK; + el.getElementsByClassName('id')[0].innerHTML += state; + }); - if(location.pathname == '/log/') - $('table').find('tbody').find('tr').each(function() { - if($(this).find('.owner').find('a').attr('href') != '/us/' + user) - return; - $(this).find('.id').append($(this).find('.r0').size() ? tick() : xmark()); - }); + if(location.pathname.match(/^\/st\//) || location.pathname == '/us/') + $('table tbody tr').each(function(el) { + if(el.querySelector('.user a').getAttribute('href') == '/us/' + user){ + el.classList.add('info'); + el.classList.add('tracker-info'); + } + }); +} - if(location.pathname.match(/^\/st\//) || location.pathname == '/us/') - $('table').find('tbody').find('tr').each(function() { - if($(this).find('.user').find('a').attr('href') == '/us/' + user) - $(this).addClass('info tracker-info'); - }); - } +function start_tracking(user){ + localStorage.setItem('tracker_username', user); + $('#tracker_userlink')[0].setAttribute('href', '/us/' + user); + $('#tracker_userlink')[0].innerHTML = user; + tracker.classList.remove('hidden'); + update_tracker(); + var lastfetch = localStorage.getItem('tracker_lastfetch'); + if(Date.now() - lastfetch > 60 * 10 * 1000) + refresh_tracker(); +} - function start_tracking(user){ - localStorage.setItem('tracker_username', user); - $('#tracker_userlink').attr('href', '/us/' + user).html(user); - tracker.removeClass('hidden'); +function refresh_tracker(){ + var user = localStorage.getItem('tracker_username'); + var xhr = new XMLHttpRequest(); + xhr.open('GET', '/us/' + user + '?format=json'); + xhr.onload = function () { + localStorage.setItem('tracker_data', this.responseText); + localStorage.setItem('tracker_lastfetch', Date.now()); update_tracker(); - var lastfetch = localStorage.getItem('tracker_lastfetch'); - if(Date.now() - lastfetch > 60 * 10 * 1000) - refresh_tracker(); - } - - function refresh_tracker(){ - var user = localStorage.getItem('tracker_username'); - var xhr = new XMLHttpRequest(); - xhr.open('GET', '/us/' + user + '?format=json'); - xhr.onload = function () { - localStorage.setItem('tracker_data', this.responseText); - localStorage.setItem('tracker_lastfetch', Date.now()); - update_tracker(); - }; - xhr.send(); - } - window.refresh_tracker = refresh_tracker; - window.start_tracking = start_tracking; + }; + xhr.send(); +} - function stop_tracking(){ - clean_tracker(); - localStorage.removeItem('tracker_username'); - localStorage.removeItem('tracker_data'); - localStorage.removeItem('tracker_lastfetch'); - tracker.addClass('hidden'); - } +function stop_tracking(){ + clean_tracker(); + localStorage.removeItem('tracker_username'); + localStorage.removeItem('tracker_data'); + localStorage.removeItem('tracker_lastfetch'); + tracker.classList.add('hidden'); +} - $( document ).ready(function(){ - tracker = $(''); - tracker.prependTo($('#sidebar')); - $('#tracker_stop').on('click', stop_tracking); - $('#track_user').on('click', function() { stop_tracking(); start_tracking($(this).data('user')) }); - $('#submitform').on('submit', function() { localStorage.removeItem('tracker_lastfetch') }); +$(function(){ + tracker = document.createElement('div'); + tracker.id = 'tracker'; + tracker.className = 'hidden'; + tracker.innerHTML = 'Tracking .
Stop tracking
Job log
Solved
?
Attempted
?
Contests
?
'; + var sidebar = $('#sidebar')[0]; + sidebar.insertBefore(tracker, sidebar.firstChild); + $('#tracker_stop').on('click', stop_tracking); + $('#track_user').on('click', function() { stop_tracking(); start_tracking(this.dataset.user) }); + $('#submitform').on('submit', function() { localStorage.removeItem('tracker_lastfetch') }); - if(localStorage.getItem('tracker_username')) - start_tracking(localStorage.getItem('tracker_username')); - }); -})(); + if(localStorage.getItem('tracker_username')) + start_tracking(localStorage.getItem('tracker_username')); +});