Greasemonkey: Wikipedia Serien Darsteller Spoiler

abflussrohr

Hat keine Zeit :(
Registriert
4 Aug. 2013
Beiträge
104
Ort
Frankfurt
Ich finde es immer wieder zum weinen, wenn ich eine Serie schaue (meistens erste Staffel), dann bei Wikipedia was über einen Darsteller erfahren will und mir dort eine Tabelle präsentiert wird, die den Ausstieg/Tod/Whatever der jeweiligen Person in Spalte 3 spoilert :confused::dozey::(

Im Netz habe ich dazu keine Hilfe gefunden, daher habe ich mir ein Greasemonky-Script geschrieben, was dies verhindert indem die jeweilige Spalte erst auf Mausclick angezeigt wird:

Anhang anzeigen wsas.zip

Da meine JS-Kenntnisse ziemlich eingerostet sind habe ich jetzt noch 2 Probleme:

  1. Ich würde gerne jeden Eintrag einzeln sichtbar machen und dazu oben im Header ein ShowAll einfügen. Der <th> der Spalte hat aber manchmal schon einen Click-Listener, der die Spalte sortiert. Wie kann ich das verhindert wenn auf mein ShowAll geklickt wird?
  2. Der Zeilen/Spalten-Zugriff klappt bei mir nicht, wenn ein rowSpan benutzt wird (zB. hier ). Gibts da eine bessere Möglichkeit auf den x/y Eintrag einer Tabelle zuzugreifen?

thx, abflussrohr
 
Zuletzt bearbeitet:
Geniale Idee, sich so vor'm versehentlichen Spoilern zu schützen, ich hab immer ganz vorsichtig gescrollt. :D

Ich finde Deine Vorgehensweise nicht ideal, weil der DOM fest definiert ist und man eigentlich nicht irgendwelche Attribute der Elemente definieren sollte, die es gar nicht gibt. Ich würde die originalen Inhalte daher entweder in ein data-Attribut verfrachten oder behalten und ausblenden, beispielsweise so:

[src=javascript]var spoiler = '<i>(show)</i> <div style="display: none">' + tableColumns[columnIndex].innerHTML + '</div>';
tableColumns[columnIndex].innerHTML = spoiler;[/src]

Die kannst Du auf ähnliche Art und Weise dann sehr einfach wieder einblenden:

[src=javascript]tableColumns[columnIndex].addEventListener("click", function(){
this.getElementsByTagName('i')[0].style.display = 'none';
this.getElementsByTagName('div')[0].style.display = 'block';
}, false);[/src]
 
  • Thread Starter Thread Starter
  • #3
Ja, bei so GM-Scripten mach ich mir nicht viele Gedanken über guten Stil, so gut wie alle Seiten liefern eh schon JS-Warnungen/Fehler aus. Ist eh alles kaputt ;)

--- [2014-05-08 19:12 CEST] Automatisch zusammengeführter Beitrag ---

Hab das erste Problem gelöst bekommen, das zweite allerdings nicht (scheint wohl nicht so einfach zu sein). Naja, jedenfalls kann man jetzt wieder ohne Sorgen reinschauen :coffee:
 
Hatte Dich wohl missverstanden, dass Du immer gleich die ganze Spalte anzeigen lassen möchtest. Ich muss mir Dein Script nochmal genauer anschauen, um die Fehlerquelle zu finden. Denn im genannten Beispiel liegt die zusammengelegte Zelle doch am Ende. Sofern Du die Spalten also nicht rückwärts adressierst, müsste die die Indizierung doch funktionieren.
 
  • Thread Starter Thread Starter
  • #5
Der "James" ist das Problem, der sorgt dafür dass in seiner zweiten Zeile alle Spalten um eins nach links verrutschen. In kannst du das besser bei "Gregor Clegane" sehen. Wahrscheinlich muss man wirklich alle row/col-spans auswerten und selbst die Offsets berechnen. :(
 
  • Thread Starter Thread Starter
  • #6
Alles muss man selber machen ;) Aber jetzt funktionierts und ich kann diese JavaScript-Hölle wieder verlassen :beer:
 
Syntaktisch auf jeden Fall, semantisch aber wie gesagt nur mit Einschränkungen. :) Im DOM irgendwelche Attribute zu erfinden finde ich wie gesagt nicht ideal und da das nicht standardisiert ist, könnte das in zukünftigen Browser-Versionen dazu führen, dass das Script nicht mehr funktioniert. Ansonsten hätte man die Vorzüge von Javascript vielleicht noch ein bisschen ausreizen können. Da hat jemand scheinbar einen C++ oder Java-Hintergrund. ;) Der Code wäre dann vielleicht etwas knackiger, aber schlimm finde ich das nicht.
 
Zurück
Oben