最後活躍 2 days ago

修訂 ed49789861f281ab1ba3567f696aad73506e7e6f

main.js 原始檔案
1// open the likes/comments activity panel prior to running this in a web console.
2// this will insert thumbs just above the album photos
3
4(() => {
5 const commentCountMap = new Map()
6 const commentThumbs = Array.from(document.querySelectorAll('#activity-panel img[alt=comment-thumbnail]'))
7 const likeCountMap = new Map()
8 const likeThumbs = Array.from(document.querySelectorAll('#activity-panel img[alt=like-thumbnail]'))
9 const selects = document.querySelector('#selects')
10 const srcSet = new Set()
11
12 // cleanup and init
13 try {
14 document.querySelector('#virtual-timeline').parentNode.removeChild(document.querySelector('#selects'))
15 } catch {}
16 document.querySelector('#virtual-timeline').insertAdjacentHTML('beforebegin', '<div class="flex flex-wrap" id="selects"></div>')
17
18 // count comments per img
19 commentThumbs.forEach(img => {
20 const count = commentCountMap.get(img.src) || 0
21 commentCountMap.set(img.src, count + 1)
22 srcSet.add(img.src)
23 })
24 // count likes per img
25 likeThumbs.forEach(img => {
26 const count = likeCountMap.get(img.src) || 0
27 likeCountMap.set(img.src, count + 1)
28 srcSet.add(img.src)
29 })
30
31 // map each img src to a tuple [ src, commentCount, likeCount ]
32 Array.from(srcSet)
33 .map(src => [
34 src,
35 commentCountMap.get(src) || 0,
36 likeCountMap.get(src) || 0,
37 ])
38 // sort on likes, then comments DESC
39 .sort((a, b) => {
40 if (a[2] > b[2]) return -1
41 else if (a[2] < b[2]) return 1
42 else {
43 if (a[1] > b[1]) return -1
44 else if (a[1] < b[1]) return 1
45 }
46 return 0
47 })
48 // insert thumb into DOM with counts
49 .forEach(([ src, comments, likes ]) => {
50 selects.insertAdjacentHTML('beforeend', `<div style="flex: 0 0 50%;">
51 <img src="${src}" />
52 <span>${likes} likes</span>
53 <span>${comments} comments</span>
54 </div>`)
55 })
56})()