omit previous season ladders with listed players
[sc2-widget] / widget.html
1 <!DOCTYPE html>
2 <html>
3
4 <head>
5 <meta charset="utf-8" />
6 <title>StarCraft ][ Clan summary</title>
7 <link rel="stylesheet" type="text/css" href="/schtarr/battle.css" />
8 <meta name="theme-color" content="#000D1A" />
9 <meta name="viewport" content="width=device-width" />
10 </head>
11
12 <body>
13 <p id="clan">No clan data</p>
14 <script>
15         let outcont = document.getElementById('clan')
16         let request = this.location.pathname.split('/').pop()
17         outcont.innerHTML = `Loading clan data for <q>${request}</q>`
18         fetch('/schtarr/data/' + request + '.json')
19         .then(res => {
20                 if (res.status != 200) {
21                         console.log('got %o', res)
22                         throw `include ${res.status}`
23                 }
24                 return res.json()
25         })
26         .then(clan => {
27                 let laddercmp = {}
28                 clan.ladders = clan.ladders.filter(l => !(
29                         laddercmp[l.members] = l.members in laddercmp
30                 ))
31                 let tiernum = (rank) => rank <= 8 ? 1 : rank <= 25 ? 2 : rank <= 50 ? 3 : 4;
32                 let matchtime = (d) => d.getDate() + '/' + (d.getMonth() + 1) +
33                         ' ' + d.getHours() + ":" + ('0' + d.getMinutes()).slice(-2);
34                 outcont.outerHTML = `
35                         <h1>${clan.tag || clan.members[0].name}</h1>
36                         <ul class=ladders>
37                         ${clan.ladders.map(ladder => `
38                                 <li class="rank ${[
39                                         ladder.league,
40                                         ' tier' + tiernum(ladder.rank),
41                                         ladder.season ? ' old' : null,
42                                 ].join('')}"
43                                  data-members="${ladder.members}"
44                                  title="Division ${ladder.division} (${ladder.wins}:${ladder.losses})">
45                                         ${ladder.league} <small>#${ladder.rank}</small>
46                                 </li>
47                         `).join('')}
48                         </ul>
49                         <ul class=members>
50                         ${clan.members.map(member => `
51                                 <li><a href="${member.profileUrl}"><figure>
52                                         <img src="${member.avatarUrl}" title="${member.name}" />
53                                         <figcaption>${member.name}</figcaption>
54                                 </figure></a></li>
55                         `).join('')}
56                         </ul>
57                         <ul class=matches>
58                         ${clan.matches.splice(0, 3).map(match => `
59                                 <li data-members="${match.players}" class=${match.decision.toLowerCase()}>
60                                         ${matchtime(new Date(match.date * 1000))} ${match.type}
61                                 </li>
62                         `).join('')}
63                         </ul>
64                 `
65
66                 document.querySelectorAll('[data-members]').forEach(li => {
67                         let momberids = li.dataset.members.split(',')
68                         let membercont = document.querySelector('.members')
69                         li.onmouseover = e => {
70                                 membercont.classList.add('select')
71                                 momberids.forEach(member => {
72                                         membercont.children[member].classList.add('select')
73                                 })
74                         }
75                         li.onmouseout = e => {
76                                 membercont.classList.remove('select')
77                                 momberids.forEach(member => {
78                                         membercont.children[member].classList.remove('select')
79                                 })
80                         }
81                 })
82         })
83         .catch(msg => {
84                 outcont.innerHTML = `Error loading clan data: ${msg}`
85                 console.error('include failure:', msg)
86         })
87 </script>
88 </body>
89
90 </html>