Add user tracking
[gruntmaster-page.git] / js / 90-tracker.js
CommitLineData
d31924ef
MG
1(function(){
2 'use strict';
3
4 function tick() { return $('<span class="tick tracker-mark">✔</span>') }
5 function xmark() { return $('<span class="x tracker-mark">✘</span>') }
6
7 function update_tracker(){
8 var data = localStorage.getItem('tracker_data');
9 var user = localStorage.getItem('tracker_username');
10 if(!data)
11 return;
12 data = JSON.parse(data);
13 var solved = {};
14 var attempted = {};
15 var solvednr = 0;
16 var attemptednr = 0;
17 data.problems.forEach(function(e){
18 if(e.solved){
19 solved[e.problem] = 1;
20 solvednr++;
21 } else {
22 attempted[e.problem] = 1;
23 attemptednr++;
24 }
25 });
26
27 var contests = {};
28 data.contests.forEach(function(e){
29 contests[e.contest] = 1;
30 });
31
32 $('#tracker_userlink').html(data.name);
33 $('#tracker_solved').html(solvednr);
34 $('#tracker_attempted').html(attemptednr);
35 $('#tracker_contests').html(data.contests.length);
36
37 $('.tracker-mark').detach();
38 if(location.pathname == '/pb/')
39 $('table').find('.name').find('a').each(function() {
40 var id = $(this).attr('href').split('?', 2)[0];
41 if(solved[id])
42 $(this).parent().append(tick());
43 else if(attempted[id])
44 $(this).parent().append(xmark());
45 });
46
47 if(location.pathname == '/ct/')
48 $('table').find('.name').find('a').each(function() {
49 var id = $(this).attr('href').substr(4);
50 if(contests[id])
51 $(this).parent().append(tick());
52 });
53
54 if(location.pathname == '/log/')
55 $('table').find('tbody').find('tr').each(function() {
56 if($(this).find('.owner').find('a').attr('href') != "/us/" + user)
57 return;
58 $(this).find('.id').append($(this).find('.r0').size() ? tick() : xmark());
59 });
60 }
61
62 function start_tracking(user){
63 localStorage.setItem('tracker_username', user);
64 $('#tracker_userlink').attr('href', '/us/' + user).html(user);
65 $('#tracker_tracking').removeClass('hidden');
66 $('#tracker_form').addClass('hidden');
67 update_tracker();
68 var xhr = new XMLHttpRequest();
69 xhr.open('GET', '/us/' + user);
70 xhr.setRequestHeader('Accept', 'application/json');
71 xhr.onload = function () {
72 localStorage.setItem('tracker_data', this.responseText);
73 update_tracker();
74 };
75 xhr.send();
76 }
77
78 function stop_tracking(){
79 $('.tracker-mark').detach();
80 localStorage.removeItem('tracker_username');
81 localStorage.removeItem('tracker_data');
82 $('#tracker_tracking').addClass('hidden');
83 $('#tracker_form').removeClass('hidden');
84 }
85
86 $( document ).ready(function(){
87 $('#tracker').detach().prependTo($('#sidebar')).removeClass('hidden');
88 $('#tracker_button').on('click', function() { start_tracking($('#tracker_username').val()) });
89 $('#tracker_stop').on('click', stop_tracking);
90
91 if(localStorage.getItem('tracker_username'))
92 start_tracking(localStorage.getItem('tracker_username'));
93 });
94})();
This page took 0.015813 seconds and 4 git commands to generate.