Replace Zepto with ki.js, rewrite all JS
[plack-app-gruntmaster.git] / js / 90-tracker.js
index 1fa4905ed0887ba2f36221591fb3fe59b6b3bdb2..0db54590532bd215b1437926e58850bd3fdce21b 100644 (file)
-(function(){
-       'use strict';
+var TICK  = '<span class="tick tracker-mark">✔</span>';
+var XMARK = '<span class="x tracker-mark">✘</span>';
 
-       function tick()  { return $('<span class="tick tracker-mark">✔</span>') }
-       function xmark() { return $('<span class="x tracker-mark">✘</span>')    }
+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 = $('<div id="tracker" class="hidden">Tracking <a id="tracker_userlink"></a>.<br><a id="tracker_stop" role="button">Stop tracking</a><br><a id="tracker_log">Job log</a><dl class="dl-horizontal"><dt>Solved</dt>    <dd id="tracker_solved">?</dd><dt>Attempted</dt> <dd id="tracker_attempted">?</dd><dt>Contests</dt>  <dd id="tracker_contests">?</dd></dl></div>');
-               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 <a id="tracker_userlink"></a>.<br><a id="tracker_stop" role="button">Stop tracking</a><br><a id="tracker_log">Job log</a><dl class="dl-horizontal"><dt>Solved</dt>    <dd id="tracker_solved">?</dd><dt>Attempted</dt> <dd id="tracker_attempted">?</dd><dt>Contests</dt>  <dd id="tracker_contests">?</dd></dl>';
+       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'));
+});
This page took 0.012617 seconds and 4 git commands to generate.