Jammer

Door WeeJeWel op maandag 23 maart 2020 20:00 - Reacties (12)
Categorie: -, Views: 2.565

Hét voordeel van Tweakers.net, is dat er altijd een community voor je klaarstaat die trouw reageert op al het nieuws. Zij klimmen dag en nacht in het toetsenbord om piekfijn aan de lezers uiteen te zetten waarom de keuzes van grote, succesvolle bedrijven toch altijd nét verkeerd genomen zijn.

De beste stuurlui staan natuurlijk aan wal, maar bij Tweakers vind je ze gelukkig onder het nieuwsbericht!

Toch heerst er heel af en toe een klein beetje negativiteit. Soms zou je ook gewoon blij kunnen zijn dat een bedrijf iets moois maakt. En om weer een beetje positiviteit terug te brengen, kun je met mijn UserScript goed in de gaten houden welke nieuwsberichten gewoon... jammer zijn!

https://i.imgur.com/CgR7NDS.png

Dit wil je ook! Installeer dit user script door eerst een plugin zoals TamperMonkey te installeren en dan hier te klikken. Lukt 't niet? Jammer voor je.

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// ==UserScript==
// @name         Jammerlijk
// @version      1.0
// @description  Beetje jammer userscript
// @author       WeeJeWel
// @match        https://tweakers.net/
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    const width = '72px';

    const $tables = document.querySelectorAll('table.headlines');
    [].forEach.call($tables, $table => {
        const $colgroups = $table.querySelector('colgroup');
        const $colgroupJammer = document.createElement('col');
        $colgroupJammer.classList.add('jammers');
        $colgroupJammer.style.width = width;
        $colgroups.appendChild($colgroupJammer);

        const $headlines = $table.querySelectorAll('.headline');
        [].forEach.call($headlines, $headline => {
            const $replies = $headline.querySelector(':scope > .replies');
            const $jammers = document.createElement('td');
            $jammers.classList.add('jammers');
            $headline.insertBefore($jammers, $replies);

            if( $replies.childElementCount === 0 ) return;
            const $repliesLink = $replies.querySelector(':scope > a');

            const url = new URL($repliesLink.href);
            const qs = new URLSearchParams();
            qs.set('mode', 'flat');
            qs.set('niv', '-1');

            const $jammersLink = document.createElement('a');
            $jammersLink.classList.add('commentCount');
            $jammersLink.href = $repliesLink.href;
            $jammersLink.textContent = '-';
            $jammersLink.style.backgroundImage = 'url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNzJweCIgaGVpZ2h0PSIyM3B4IiB2aWV3Qm94PSIwIDAgNzIgMjMiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDYzLjEgKDkyNDUyKSAtIGh0dHBzOi8vc2tldGNoLmNvbSAtLT4KICAgIDx0aXRsZT5qYW1tZXI8L3RpdGxlPgogICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+CiAgICA8ZyBpZD0iUGFnZS0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8ZyBpZD0iamFtbWVyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxLjAwMDAwMCwgMS4wMDAwMDApIiBzdHJva2U9IiNCM0IzQjMiPgogICAgICAgICAgICA8cGF0aCBkPSJNMTEuODU1LDE2LjAxODYgTDYuNTQyOSwyMC44NzEyIEw2LjUyMjksMTYuMDE4NiBMMi40OTk3LDE2LjAxODYgQzEuMzk0NywxNi4wMTg2IDAuNDk5NywxNS4xNTA1IDAuNDk5NywxNC4wNzg3IEwwLjQ5OTcsMi40Mzk1IEMwLjQ5OTcsMS4zNjc3IDEuMzk0NywwLjQ5OTYgMi40OTk3LDAuNDk5NiBMNjcuNTQ0ODYzNywwLjQ5OTYgQzY4LjY0OTg2MzcsMC40OTk2IDY5LjU0NDg2MzcsMS4zNjc3IDY5LjU0NDg2MzcsMi40Mzk1IEw2OS41NDQ4NjM3LDE0LjA3ODcgQzY5LjU0NDg2MzcsMTUuMTUwNSA2OC42NDk4NjM3LDE2LjAxODYgNjcuNTQ0ODYzNywxNi4wMTg2IEwxMS44NTUsMTYuMDE4NiBaIiBpZD0iUGF0aCI+PC9wYXRoPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+)';
            $jammersLink.style.width = width;
            $jammersLink.addEventListener('mouseover', () => {
                fetch(`${url.pathname}?${qs.toString()}`)
                    .then(res => res.text())
                    .then(html => {
                    const jammers = html.match(/jammer/gi);
                    $jammersLink.textContent = (jammers ? jammers.length : 0) + ' jammers';
                });
            });
            $jammers.appendChild($jammersLink);
        });
    });
})();