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