Script "Ignoreliste"

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Benutzeravatar
whisper
Beiträge: 3181
Registriert: 23.09.2002 14:32:21
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: Script "Ignoreliste"

Beitrag von whisper » 01.03.2024 19:32:02

Ja Firemonkey ging sofort
Script genommen, 20 User rein und gut.
Ok, ein paar weniger waren's :mrgreen:
Danke danke danke :THX:

Benutzeravatar
heisenberg
Beiträge: 3517
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Script "Ignoreliste"

Beitrag von heisenberg » 01.03.2024 21:13:02

@JTH: Ja. Das primäre hier beschriebene Problem (springender Inhalt) löst das Script perfekt. Danke!

Es wird auch zusätzlich der Beitrag ausgeblendet, wenn der betreffend geblacklistete User den letzten Beitrag eines Threads gepostet hat. Das will ich noch weg machen.
Jede Rohheit hat ihren Ursprung in einer Schwäche.

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Script "Ignoreliste"

Beitrag von JTH » 01.03.2024 21:59:31

heisenberg hat geschrieben: ↑ zum Beitrag ↑
01.03.2024 21:13:02
Es wird auch zusätzlich der Beitrag ausgeblendet, wenn der betreffend geblacklistete User den letzten Beitrag eines Threads gepostet hat. Das will ich noch weg machen.
Ich hab zwar nicht vor, das Skript wirklich zu benutzen, aber das war mir auch noch aufgefallen ;) Ich vermute, der Grund dahinter war auch der Grund, warum das Skript aufm Smartphone vorhin nicht funktioniert hat (dort kommt ein Element mit Klasse responsive-show zum Tragen, aufm Desktop ein anderes mit responsive-hide – die beiden haben unterschiedlichen Inhalt).

Ich hab nochmal nachgebessert, es wird nun wirklich nur nach dem Eröffner des Threads geguckt. Und die abwechselnd hell- und dunkelgrauen Hintergründe werden auch noch passend mit verschoben :)

Code: Alles auswählen

// ==UserScript==
// @name       DF_Hide_User_Threads
// @author     some_random_dude
// @version    1
// @namespace  some_random_dude
// @match      https://debianforum.de/forum/search.php*
// @match      https://debianforum.de/forum/viewforum.php*
// @run-at     document-start
// ==/UserScript==

(() => {
  "use strict";

  const hiddenUsers = [
    "feltel",
    "heisenberg",
  ];

  function hideUserThreads(mutations, observer) {
    for (const mutation of mutations) {
      for (const node of mutation.addedNodes) {
        const usernameElems = node.querySelectorAll?.("dt .username, dt .username-coloured") ?? [];

        for (const usernameElem of usernameElems) {
          /* There is a parallel username element with class "responsive-show"
           * in the <dt>, that shows the *last poster* on mobile. We are not
           * looking for that element here.
           */
          if (!hiddenUsers.includes(usernameElem.textContent) ||
              !usernameElem.parentElement.classList.contains("responsive-hide")) {
            continue;
          }

          const rowToRemove = usernameElem.closest("li.row");

          /* Since we are removing a row, shift the light and dark grey
           * backgrounds accordingly.
           */
          let prevRow = rowToRemove;
          let prevClasses = rowToRemove.className;
          let row = rowToRemove.nextElementSibling;
          while (row) {
            const classes = row.className;
            row.className = prevClasses;
            prevClasses = classes;
            prevRow = row;
            row = prevRow.nextElementSibling;
          }

          rowToRemove.remove();
        }
      }
    }
  }

  const observer = new MutationObserver(hideUserThreads);
  observer.observe(document.documentElement, { childList: true, subtree: true });
  addEventListener("load", observer.disconnect);
})();
Manchmal bekannt als Just (another) Terminal Hacker.

Benutzeravatar
TRex
Moderator
Beiträge: 8063
Registriert: 23.11.2006 12:23:54
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: KA

Re: Script "Ignoreliste"

Beitrag von TRex » 01.03.2024 22:51:58

Danke, die dicke Kanone ist nun auch gepatcht.

https://git.aero2k.de/?p=dfde/hide-stuf ... ff.user.js
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

Benutzeravatar
whisper
Beiträge: 3181
Registriert: 23.09.2002 14:32:21
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: Script "Ignoreliste"

Beitrag von whisper » 02.03.2024 09:23:44

JTH hat geschrieben: ↑ zum Beitrag ↑
01.03.2024 21:59:31
Ich hab nochmal nachgebessert, es wird nun wirklich nur nach dem Eröffner des Threads geguckt. Und die abwechselnd hell- und dunkelgrauen Hintergründe werden auch noch passend mit verschoben :)
Jo, gerade praktisch getestet, Vielen Dank, perfekt!

Benutzeravatar
heisenberg
Beiträge: 3517
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Script "Ignoreliste"

Beitrag von heisenberg » 04.03.2024 13:17:14

TRex hat geschrieben: ping
JTH hat geschrieben: ping
Erlaubt Ihr eine Weitergabe Eurer Scripte? Lizenz? Ich würde das ggf. gerne direkt in mein öffentliches git-repo aufnehmen.
Zuletzt geändert von heisenberg am 04.03.2024 13:38:11, insgesamt 1-mal geändert.
Jede Rohheit hat ihren Ursprung in einer Schwäche.

Benutzeravatar
TRex
Moderator
Beiträge: 8063
Registriert: 23.11.2006 12:23:54
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: KA

Re: Script "Ignoreliste"

Beitrag von TRex » 04.03.2024 13:35:26

Ja, und wenn du es schaffst, es zu verkaufen, darfst du das auch :mrgreen:
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

Benutzeravatar
heisenberg
Beiträge: 3517
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Script "Ignoreliste"

Beitrag von heisenberg » 04.03.2024 15:23:49

@TRex:

Wie nutzt man Dein Script? Mit welchem Plugin/Browser? Firefox + Firemonkey? Wie/wo setze ich die hidden_users bzw. hidden_threads? (Ich lese im Code dass das via localStorage gespeichert wird.)

Du schriebst etwas von Buttons. Ich sehe keine Buttons, die hier erscheinen. (Bookworm, Firefox 123, Firemonkey 2.72)
Jede Rohheit hat ihren Ursprung in einer Schwäche.

Benutzeravatar
TRex
Moderator
Beiträge: 8063
Registriert: 23.11.2006 12:23:54
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: KA

Re: Script "Ignoreliste"

Beitrag von TRex » 04.03.2024 15:50:17

Ich sehs auch gerade, ich habs mit dem letzten Commit kaputt gemacht. Ich war der Meinung, das so getestet zu haben...

https://git.aero2k.de/?p=dfde/hide-stuf ... 2faff1339a

der vorige Commit tut noch, ich werd den anderen reverten und das mit ner 0.4.1 versehen. Später. Sieht dann so aus:

4714

Threads werden rechts mit dem Auge ausgeblendet, User haben dafür rechts im Profil eine Mülltonne.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

Benutzeravatar
heisenberg
Beiträge: 3517
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Script "Ignoreliste"

Beitrag von heisenberg » 04.03.2024 16:03:02

Ok. Mit der älteren Variante, die noch springt (hash: bec7e9530e05a01b36c0a57fee74640d41ccca36) geht es. (Thread hide, Thread unhide. User hide. Thread temp unhide, User temp unhide)

Aber wie bekomme ich den User wieder weg aus der Sperrliste? Wenn ich mir den Code anschaue, dann sehe ich da ein unhide_users, ein unhide_threads und ein unhide_thread, aber kein unhide_user (ohne s). Das gibt's dann wohl aktuell nicht.
TRex hat geschrieben: ↑ zum Beitrag ↑
28.02.2024 22:38:45
UI-Designer ist an mir keiner verloren gegangen...
Das sieht doch insgesamt schon wirklich sehr gut aus! Fishing for Compliments? :D
Jede Rohheit hat ihren Ursprung in einer Schwäche.

Benutzeravatar
heisenberg
Beiträge: 3517
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Script "Ignoreliste"

Beitrag von heisenberg » 19.03.2024 21:53:34

@JTH: Danke nochmal für das Script. Ich hatte natürlich auch etwas gegraben. Aber MutationsObserver habe ich nicht gefunden.

Ich habe mir jetzt auf Deiner Basis ein Script für nebenan.de gebastelt, womit ich gewerbliche Beiträge und tendenziell Anderes ausblenden kann:

Code: Alles auswählen

// ==UserScript==
// @name       NEBENAN_HIDE_CONTENT
// @author     some_random_dude
// @version    1
// @namespace  some_random_dude
// @match      https://nebenan.de/feed*
// @run-at     document-start
// ==/UserScript==

const hide_articles=[
  "Gewerbliche Beiträge",
  "Marktplatz"
  ];

const hide_subjects=[
  "Hund"
  "Katze",
  "Maus",
]

function mylog(msg) {
  console.log(msg);
}

(() => {
  "use strict";

  function hideContents(mutations, observer) {
    for (const mutation of mutations) {
      for (const node of mutation.addedNodes) {
        
        const my_headers = node.querySelectorAll?.("article.ui-card strong") ?? [];
        for (const my_header of my_headers) {
          // mylog("header: " + my_header.textContent)
          const header_text=my_header.textContent;
          for(const hide_article of hide_articles) {
          	const regex=new RegExp(hide_article);
          	if(header_text.match(regex)) {
            	const container = my_header.closest("article");
            	mylog("found element to hide: " + container.nodeName + " for pattern >>" + hide_article + "<<");
            	container.remove();
            }
          }
        }
        
        const my_user_article_subjects = node.querySelectorAll?.("span.c-emoji") ?? [];
        for (const my_subject of my_user_article_subjects) {
          // mylog("header: " + my_header.textContent)
          const subject_text=my_subject.textContent;
          for(const hide_subject of hide_subjects) {
          	const regex=new RegExp(hide_subject);
          	if(subject_text.match(regex)) {
            	const container = my_subject.closest("article");
            	mylog("found element to hide: " + container.nodeName + " for pattern >>" + hide_subject + "<<");
            	container.remove();
            }
          }
        }
        
      }
    }
  }

  const observer = new MutationObserver(hideContents);
  observer.observe(document.documentElement, { childList: true, subtree: true });
  addEventListener("load", observer.disconnect);
})();
Jede Rohheit hat ihren Ursprung in einer Schwäche.

Benutzeravatar
whisper
Beiträge: 3181
Registriert: 23.09.2002 14:32:21
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: Script "Ignoreliste"

Beitrag von whisper » 20.03.2024 08:00:18

heisenberg hat geschrieben: ↑ zum Beitrag ↑
19.03.2024 21:53:34
Ich habe mir jetzt auf Deiner Basis ein Script für nebenan.de gebastelt, womit ich gewerbliche Beiträge und tendenziell Anderes ausblenden kann:
Whow Werde ich bestimmt noch heute mal ausprobieren
:hail:
Super Idee!

Antworten