Verbeteringen aan Modoverzicht

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Glodenox
  • Registratie: Januari 2010
  • Laatst online: 02-10 23:16
Omdat ik het vrij onhandig vond om in het modoverzicht (aka de moderatiequeue) telkens die ene niet-gemodereerde reactie te zoeken tussen de vele reacties heb ik voor mezelf een userscript gemaakt om de functionaliteit op de pagina licht uit te breiden:

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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// ==UserScript==
// @name        Tweakers Modoverzicht uitbreiding
// @namespace   http://www.tomputtemans.com/
// @description Breidt het modoverzicht uit met uitklapbare links naar de ongemodde berichten
// @include     http://tweakers.net/reacties/modoverzicht/
// @version     1.2
// @grant       none
// ==/UserScript==

// Assign the map method from the Array prototype to the NodeList prototype, works as NodeList implements item(num)
NodeList.prototype.map = Array.prototype.map;

document.querySelectorAll(".moderationListTable a").map(function(topic) {
    topic.addEventListener("click", topicHandler, true);
});

function topicHandler(e) {
    e.preventDefault();
    // Only allow one call on this topic
    this.removeEventListener("click", topicHandler, true);
    this.addEventListener("click", function(e) { e.preventDefault(); }, true);

    var span = addPostsList(this.parentNode);
    retrieveUnmoddedPosts(this.href, [], function(posts) {
        fillPostsBar(span, posts);
    });
}

function retrieveUnmoddedPosts(href, scoreButtonsAcc, callback) {
    var request = new XMLHttpRequest();
    request.open("GET", href, true);
    request.responseType = "document";
    request.onload = function() {
        var nextPage = this.responseXML.querySelector(".pageDistribution a.next");
        var scoreButtons = this.responseXML.querySelectorAll("a.scoreButton.modEnabled[title='Deze reactie is nog niet beoordeeld']");
        // Recursively call the following pages
        if (nextPage != null) {
            retrieveUnmoddedPosts(nextPage.href, scoreButtonsAcc.concat(Array.prototype.slice.call(scoreButtons)), callback);
        } else {
            callback(scoreButtonsAcc.concat(Array.prototype.slice.call(scoreButtons)));
        }
    };
    request.send();
}

function addPostsList(cell) {
    cell.appendChild(document.createElement("br"));
    var span = document.createElement("span");
    span.textContent = "Reacties aan het opvragen...";
    cell.appendChild(span);

    return span;
}

function fillPostsBar(span, posts) {
    // Remove loading text
    span.removeChild(span.firstChild);
    if (posts.length > 0) {
        for (let i = 0; i < posts.length; i++) {
            let link = document.createElement("a");
            link.href = posts[i].parentNode.querySelector(".date").href;
            link.style.padding = "0 3px";
            link.style.marginRight = "10px";
            link.textContent = i + 1;
            link.target = "_blank";
            span.appendChild(link);
        }
    } else {
        var refresh = document.createElement("a");
        refresh.textContent = "Pagina vernieuwen?";
        refresh.style.cursor = "pointer";
        refresh.addEventListener("click", function(e) {
            e.preventDefault();
            location.reload();
        }, true);
        span.appendChild(document.createTextNode("Geen reacties gevonden die te beoordelen zijn. "));
        span.appendChild(refresh);
    }
}


Dat geeft het volgende resultaat nadat ik op het eerste artikel geklikt heb:
Uitbreiding modoverzicht met userscript

Hier en daar kan de code nog wat beter, maar over het algemeen lijkt het me nog vrij ordelijk. Als je gewoon naar het artikel wenst te gaan kan je nog altijd van de middelste muisknop gebruik maken om het artikel in een nieuwe tab te openen.

Naar de toekomst toe overweeg ik om de hele bovenliggende reactieboom van de ongemodereerde reactie weer te geven en zo rechtstreeks het modereren mogelijk te maken op die pagina, maar dit lijkt me alvast een goede eerste aanzet van mezelf :)

Ik zet het hier in Mooie Features omdat ik ergens hoop dat Tweakers gewoon zelf iets gelijkaardig zou aanbieden. Desnoods gaat de link slechts naar de eerste niet-gemodereerde post, dat zou ook al veel tijd besparen.

[ Voor 15% gewijzigd door Glodenox op 24-05-2015 17:52 . Reden: Update script naar recentere versie ]

Coördinator van de Waze Belux Community


Acties:
  • 0 Henk 'm!

  • _David_
  • Registratie: Februari 2011
  • Laatst online: 12-10 17:04

_David_

FP ProMod

llama llama duck

Helemaal eens, heb zelf ook al eerder een feature request hiervoor ingeschoten: [modqueue] Klap alle gemodereerde reacties in

Ik ben zelf bezig met een userscript die alle gemodereerde reacties inklapt als ik vanaf het modoverzicht een artikel open, maar een oplossing vanuit tweakers is beter :P

[ Voor 13% gewijzigd door _David_ op 24-05-2015 01:23 ]

I thought fail2ban would keep the script kiddies out but somehow you still seem to be able to login.


Acties:
  • 0 Henk 'm!

  • Glodenox
  • Registratie: Januari 2010
  • Laatst online: 02-10 23:16
Dat is natuurlijk het alternatief: een mogelijkheid om enkel de niet gemodereerde reacties weergeven bij artikels (en bij voorkeur ook nog de bovenliggende reacties om een correcte inschatting te kunnen maken).

Nog zeer licht gerelateerd: ik maak ook gebruik van de volgende custom CSS op Tweakers om reacties die niet meer gemodereerd kunnen worden duidelijker weer te geven:

Cascading Stylesheet:
1
2
3
4
5
/* verlopen niet-gemodereerde berichten duidelijker aanduiden */
.reactieHeader a.scoreButton.modDisabled.reason6[title='Deze reactie is nog niet beoordeeld'] {
  background: #AFB4B4 linear-gradient(#B7B7B7, #AEAFAF) repeat scroll 0% 0%;
  color: #ccc !important;
}

[ Voor 52% gewijzigd door Glodenox op 24-05-2015 01:56 . Reden: Toevoeging custom CSS ]

Coördinator van de Waze Belux Community


Acties:
  • 0 Henk 'm!

  • _David_
  • Registratie: Februari 2011
  • Laatst online: 12-10 17:04

_David_

FP ProMod

llama llama duck

Glodenox schreef op zondag 24 mei 2015 @ 01:25:
Dat is natuurlijk het alternatief: een mogelijkheid om enkel de niet gemodereerde reacties weergeven bij artikels (en bij voorkeur ook nog de bovenliggende reacties om een correcte inschatting te kunnen maken).
Idd, ik heb mijn script even opgeschoond:

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
window.addEventListener("load", function() {
    addFilterButton();
}, false);

function addFilterButton(){
    var bullet = document.createElement("span");
    bullet.className = "bullet";
    bullet.innerHTML = "&#8226;";

    var filterLink = document.createElement("a");
    filterLink.style.cursor = "pointer";
    filterLink.textContent = "Filter Reacties";


    var layoutFilter = document.getElementsByClassName("layoutFilter")[0];
    layoutFilter.insertBefore(bullet, layoutFilter.lastChild);
    layoutFilter.insertBefore(filterLink, layoutFilter.lastChild);


    filterLink.addEventListener("click", FilterComments, true);
}

function FilterComments()
{
    var moderatedcomments = document.querySelectorAll("a.scoreButton.modEnabled[title*='Gemiddelde beoordeling: '], a.scoreButton.modEdit[title*='Gemiddelde beoordeling: ']");

    for (var i = 0; i < moderatedcomments.length; ++i)
    {
        moderatedcomments[i].parentNode.parentNode.className = 'reactieBody hidden';
    }
}


Voor de mensen die het interesseert, dit script voegt een linkje toe naast de 'mod-faq' en 'wijzig weergave' genaamd 'filter reacties' die alle reacties sluit die al gemodereerd zijn :)

[ Voor 108% gewijzigd door _David_ op 24-05-2015 18:11 . Reden: Fix 'wijzig weergave' bug ]

I thought fail2ban would keep the script kiddies out but somehow you still seem to be able to login.


Acties:
  • 0 Henk 'm!

  • Glodenox
  • Registratie: Januari 2010
  • Laatst online: 02-10 23:16
Bedankt om je userscript te delen! Aangezien die manier van werken me ook wel zeer aanspreekt heb ik er wat op verder gebouwd: er waren nog enkele berichten die niet verborgen werden die dat wel dienden te zijn en deze versie verbergt ook de hele threads waar er geen te modereren berichten te vinden zijn, maar toont wel nog de reacties boven een niet-gemodereerd bericht om zo de context van de discussie te kunnen begrijpen.

Bug: Er was nog een bug die als effect had dat "wijzig weergave"-link niet meer werkt. Tweakers kijkt naar de laatste anchor om een popup aan toe te voegen, maar met dit script wordt dat dus het filteren van berichten. Dit is in onderstaande versie rechtgezet

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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// ==UserScript==
// @name        Tweakers Reactieoverzicht
// @namespace   http://www.tomputtemans.com/
// @description Verberg gemodereerde reacties in het reactieoverzicht op basis van userscript door _David_ (http://tweakers.net/gallery/396789)
// @include     http://tweakers.net/nieuws/*
// @include     http://tweakers.net/productreview/*
// @include     http://tweakers.net/geek/*
// @include     http://tweakers.net/reviews/*
// @include     http://tweakers.net/video/*
// @include     http://tweakers.net/plan/*
// @include     http://tweakers.net/poll/*
// @include     http://tweakers.net/downloads/*
// @version     2.2
// @grant       none
// ==/UserScript==

// Assign the map method from the Array prototype to the NodeList prototype, works as NodeList implements item(num)
NodeList.prototype.map = Array.prototype.map;

var bullet = document.createElement("span");
bullet.className = "bullet";
bullet.innerHTML = "&#8226;";
var filterLink = document.createElement("a");
filterLink.style.cursor = "pointer";
filterLink.textContent = "Filter Reacties";
filterLink.addEventListener("click", filterComments, true);
var layoutFilter = document.getElementsByClassName("layoutFilter")[0];
layoutFilter.insertBefore(bullet, layoutFilter.firstChild);
layoutFilter.insertBefore(filterLink, layoutFilter.firstChild);

function filterComments() {
    // Hide all comments that have a rating + those that have been disabled
    document.querySelectorAll("a.scoreButton[title^='Gemiddelde beoordeling: '], a.scoreButton.modDisabled").map(function(button) {
        // div.reactieBody > div.reactieHeader > a.scoreButton
        button.parentNode.parentNode.classList.add("hidden");
    });

    // Unhide the comments that are parents of the unmoderated comments
    document.querySelectorAll("a.scoreButton.modEnabled[title='Deze reactie is nog niet beoordeeld']").map(function(button) {
        // div.reactie > div.reactieBody > div.reactieHeader > a.scoreButton
        unfoldParentComment(button.parentNode.parentNode.parentNode);
    });

    // Collapse all hidden root comments with more than one reaction
    document.querySelectorAll("#reactieContainer > .reactie").map(function(reactie) {
        var subreacties = reactie.querySelectorAll(".reactie").length;
        if (reactie.querySelector(".reactieBody").classList.contains("hidden") && subreacties > 1) {
            reactie.classList.add("collapsed");
            reactie.querySelectorAll(".reactie").map(function(childNode) {
                childNode.style.display = "none";
            });
            reactie.appendChild(createCollapsedMarker(subreacties));
        }
    });
}

// Unfold the parent reaction and recursively call this function on that parent element
function unfoldParentComment(comment) {
    if (comment.parentNode != null && comment.parentNode.id != "reactieContainer") {
        comment.parentNode.querySelector(".reactieBody").classList.remove("hidden");
        unfoldParentComment(comment.parentNode);
    }
}

// Generate a marker to uncollapse the collapsed reactions like vanilla Tweakers works
function createCollapsedMarker(count) {
    var marker = document.createElement("div");
    marker.className = "reactie collapsedmarker";
    var body = document.createElement("div");
    body.className = "reactieBody";
    body.textContent = count + " reacties verborgen";
    marker.appendChild(body);
    return marker;
}

[ Voor 8% gewijzigd door Glodenox op 24-05-2015 16:34 . Reden: Bug "wijzig weergave" opgelost ]

Coördinator van de Waze Belux Community


Acties:
  • 0 Henk 'm!

  • Glodenox
  • Registratie: Januari 2010
  • Laatst online: 02-10 23:16
Eigen lof stinkt, maar ik ben tot nu toe wel tevreden van de werking van bovenstaand user script :) Op deze manier hoeven er voor mij geen verbeteringen meer te zijn aan het modoverzicht. Zou natuurlijk wel handiger zijn voor de andere mensen die efficiënt willen modereren.

Coördinator van de Waze Belux Community


Acties:
  • 0 Henk 'm!

  • _David_
  • Registratie: Februari 2011
  • Laatst online: 12-10 17:04

_David_

FP ProMod

llama llama duck

Ik zou liever zien dat Tweakers zelf de functionaliteit inbouwt, dan werkt het ook als ik ergens anders inlog (of mobiel) :)

I thought fail2ban would keep the script kiddies out but somehow you still seem to be able to login.

Pagina: 1