main.js
· 1.8 KiB · JavaScript
Raw
# open the likes/comments activity panel prior to running this in a web console.
# this will insert thumbs just above the album photos
(() => {
const commentCountMap = new Map()
const commentThumbs = Array.from(document.querySelectorAll('#activity-panel img[alt=comment-thumbnail]'))
const likeCountMap = new Map()
const likeThumbs = Array.from(document.querySelectorAll('#activity-panel img[alt=like-thumbnail]'))
const selects = document.querySelector('#selects')
const srcSet = new Set()
# cleanup and init
try {
document.querySelector('#virtual-timeline').parentNode.removeChild(document.querySelector('#selects'))
} catch {}
document.querySelector('#virtual-timeline').insertAdjacentHTML('beforebegin', '<div class="flex flex-wrap" id="selects"></div>')
// count comments per img
commentThumbs.forEach(img => {
const count = commentCountMap.get(img.src) || 0
commentCountMap.set(img.src, count + 1)
srcSet.add(img.src)
})
// count likes per img
likeThumbs.forEach(img => {
const count = likeCountMap.get(img.src) || 0
likeCountMap.set(img.src, count + 1)
srcSet.add(img.src)
})
// map each img src to a tuple [ src, commentCount, likeCount ]
Array.from(srcSet)
.map(src => [
src,
commentCountMap.get(src) || 0,
likeCountMap.get(src) || 0,
])
// sort on likes, then comments DESC
.sort((a, b) => {
if (a[2] > b[2]) return -1
else if (a[2] < b[2]) return 1
else {
if (a[1] > b[1]) return -1
else if (a[1] < b[1]) return 1
}
return 0
})
// insert thumb into DOM with counts
.forEach(([ src, comments, likes ]) => {
selects.insertAdjacentHTML('beforeend', `<div style="flex: 0 0 50%;">
<img src="${src}" />
<span>${likes} likes</span>
<span>${comments} comments</span>
</div>`)
})
})()
| 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 | })() |