Commit | Line | Data |
---|---|---|
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 | })(); |