X-Git-Url: http://git.ieval.ro/?a=blobdiff_plain;f=js%2F90-tracker.js;h=0db54590532bd215b1437926e58850bd3fdce21b;hb=7093e9ba00cf7727a52a49d34d4df12e4f865dd4;hp=a475ee850bd5ad5fbbd00c5b84c5e30efa6165ec;hpb=f1c090e7ae6e91f4fcaa690466524adb94afdf08;p=plack-app-gruntmaster.git
diff --git a/js/90-tracker.js b/js/90-tracker.js
index a475ee8..0db5459 100644
--- a/js/90-tracker.js
+++ b/js/90-tracker.js
@@ -1,107 +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;
- 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').html(data.name);
- $('#tracker_solved').html(solvednr);
- $('#tracker_attempted').html(attemptednr);
- $('#tracker_contests').html(data.contests.length);
+ 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);
- if(location.pathname == '/pb/')
- $('table').find('.name').find('a').each(function() {
- var id = $(this).attr('href').split('?', 2)[0];
- if(solved[id])
- $(this).parent().append(tick());
- else if(attempted[id])
- $(this).parent().append(xmark());
- });
+ 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 == '/ct/')
- $('table').find('.name').find('a').each(function() {
- var id = $(this).attr('href').substr(4);
- if(contests[id])
- $(this).parent().append(tick());
- });
+ 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 == '/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 == '/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.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');
- });
- }
+ 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');
+ }
+ });
+}
+
+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_tracking').removeClass('hidden');
- $('#tracker_form').addClass('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 xhr = new XMLHttpRequest();
- xhr.open('GET', '/us/' + user);
- xhr.setRequestHeader('Accept', 'application/json');
- xhr.onload = function () {
- localStorage.setItem('tracker_data', this.responseText);
- update_tracker();
- };
- xhr.send();
- }
+ };
+ xhr.send();
+}
- function stop_tracking(){
- clean_tracker();
- localStorage.removeItem('tracker_username');
- localStorage.removeItem('tracker_data');
- $('#tracker_tracking').addClass('hidden');
- $('#tracker_form').removeClass('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').detach().prependTo($('#sidebar')).removeClass('hidden');
- $('#tracker_button').on('click', function() { start_tracking($('#tracker_username').val()) });
- $('#tracker_stop').on('click', stop_tracking);
- $('#track_user').removeClass('hidden');
- $('#track_user').on('click', function() { stop_tracking(); start_tracking($(this).data('user')) });
+$(function(){
+ tracker = document.createElement('div');
+ tracker.id = 'tracker';
+ tracker.className = 'hidden';
+ tracker.innerHTML = 'Tracking .
Stop tracking
Job log