Script Greasemonkey pour ouvrir tout les messages non lus

Hophop la zone.

Suite a ce thread : http://www.geekzone.fr/ipb/index.php?showtopic=39462

Je fais partager un ptit script greasemonkey que j’ai fait cet aprem. Il consiste simplement à ajouter un lien sur la page “Voir les nouveaux messages” qui fait simplement “Ouvrir tous les sujets non lus, les marquer comme lus, et retourner a l’index.” Il s’ajoute a coté de celui qui fait juste “Marquer tous les sujets comme lus et retourner à l’index.”, et en un clic, vous ouvrira tout les messages que vous n’avez pas lu sur la zone dans de nouveaux onglets (normalement, en tout cas, avec tabmixplus bien configuré, ca le fait).

Donc, comme j’ai jamais fait de javascript ni de html EVER, ca doit probablement pas etre optimal comme code, ou encore un peu buggé (notament si vous reduisez un peu la fenetre et que les liens ne peuvent pas tous entrer sur la largeur, le texte de droite et mis sur 2 lignes, alors que mon lien est sur une ligne, c’est un peu etrange, et si un javascript roxxor se sent de me dire pourquoi, il gagne une biere sur lille). Pareil si vous vous sentez de l’ameliorer. Pareil si vous avez plusieurs pages de sujets non lus, il faut pas cliquer dessus, sinon, meme les sujets des pages 2, 3, etc seront marqué commes lus.

[codebox]
// ==UserScript==
// @name Better Geekzone
// @description Some Geekzone enhancements
// @namespace http://jbriguet.com/
// @include http://www.geekzone.fr/ipb/index.php?*act=…&lastdate=0

// ==/UserScript==
// version 0.1
//----------------------
// 0.1 First Release / Open All Unread Messages.

function betterGeekzone()
{
// Get all the link on the page
var list = document.getElementsByTagName(‘a’);

for(var i = 0; i < list.length; i++)
{
	if ( list[i].hasAttribute('href') )
	{ 
		if ( list[i].getAttribute('href').match(".*view=getnewpost*") )
		{
			// open those containing a getnewpost in their href
			window.open(list[i].getAttribute('href'))
		}
	}
}

// mark all as read, and send to index
window.location = "http://www.geekzone.fr/ipb/index.php?act=Login&CODE=05";

};

function insertLink()
{
var divs = document.getElementsByTagName(“div”);
var maintitles = new Array();

// locate the good line to insert javascript link into
for(var j = 0; j < divs.length; j++)
{
	if ( divs[j].hasAttribute('class') && divs[j].className == 'maintitle' )
	{
		maintitles.push(divs[j]);
	}
}

if (maintitles.length == 2)
{
	// locate the div to insert link before
	var elem = maintitles[1].getElementsByTagName('div');
	
	if (elem.length == 2)
	{
		// generate the script tag
		var scr = document.createElement('script');
		scr.innerHTML = '\n' + betterGeekzone.toString() + '\n';

		// generate the link element
		var newElement = document.createElement('div');
		newElement.innerHTML = '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="java script:betterGeekzone()">Ouvrir tous les sujets non lus, les marquer comme lus, et retourner a l\'index.</a>';
		newElement.setAttribute('style', 'float: right');
		
		//elem[1].removeAttribute('align');
		//elem[1].setAttribute('style', 'float: right');
		
		// insert them just before the original 'Mark all as read' link
		// insert link will appears after, but, hey, who cares :)
		maintitles[1].insertBefore(scr, elem[1]);
		maintitles[1].insertBefore(newElement, elem[1]);
		
		//alert(maintitles[1].innerHTML);
	}
}

};

// insert the link into the webpage.
insertLink();

[/codebox]

Voila treve de bavardages, c’est ici que ca se prend : http://www.jbriguet.com/jb/better_geekzone.user.js

Et le greasemonkey obligatoire pour que ca marche. (Donc, c’est Firefox seulement :))

Rapports de bugs bienvenus si vous en avez, critiques, bisous, tout ca, en dessous.

Pour installer le script, il faut cliquer dessus.

À mon avis, tu pourrais supprimer la redirection pour marquer tous les sujets comme lus, ça risque de poser problème si il y a plusieurs pages de threads et ça raccourcirait le texte, je suis en 1024 et je crois que ça ne passera pas avec le message actuel (pas de nouveau message donc je ne vois pas encore le résultat).

J’aime beaucoup l’idée.
Je vais tester ça sur FireFox.

Bisous en dessous donc.

Accessoirement, je teste le script et critiquerai plus tard, mais l’idée est à mon humble avis pas trop mauvaise.

Donc, geekzone updated, script greasemonkey updated \o/

// ==UserScript==
// @name   		Better Geekzone
// @description	Some Geekzone enhancements
// @namespace  	http://jbriguet.com/
// @include    	http://www.geekzone.fr/ipb/index.php?app=core&module=search&do=new_posts&search_app=forums

// ==/UserScript==
// version 0.2
//----------------------
// 0.2 Updated to support the new geekzone \o/
// 0.1 First Release / Open All Unread Messages.

function betterGeekzone(lnk)
{
	// Get all the link on the page
	var list = document.getElementsByTagName('a');
	
	for(var i = 0; i < list.length; i++)
	{
		if ( list[i].hasAttribute('href') )
		{ 
			if ( list[i].getAttribute('href').match(".*page__view__getnewpost$") )
			{
				// open those containing a getnewpost in their href
				window.open(list[i].getAttribute('href'))
				//alert(list[i].getAttribute('href'));
			}
		}
	}

	// mark all as read, and send to index
	window.location = lnk;
	//alert(lnk);
};

function insertLink()
{
	var divs = document.getElementsByTagName("div");
	
	// locate the good line to insert javascript link into
	for(var j = 0; j < divs.length; j++)
	{
		if ( divs[j].hasAttribute('class') && divs[j].className == 'tab_filters' )
		{
			// locate the div to insert link before
			var elems = divs[j].getElementsByTagName('ul');
			
			for(var k = 0; k < elems.length; k++)
			{
				if ( elems[k].hasAttribute('class') && elems[k].className == 'right padded' )
				{
					//alert(elems[k].innerHTML);
					
					var lnks = elems[k].getElementsByTagName('a');
					
					//alert(lnks.length);
					
					var markAsReadElement;
					
					for( var y = 0; y < lnks.length; y++)
					{
						if (lnks[y].hasAttribute('href') && lnks[y].getAttribute('href').match(".*markasread"))
						{
							markAsReadElement = lnks[y];
							break;
							
							//alert(markAsReadElement.getAttribute('href'));
						}
					}
					
					// generate the script tag
					var scr = document.createElement('script');
					scr.innerHTML = '\n' + betterGeekzone.toString() + '\n';
			
					// some space
					var spaceElement = document.createTextNode(' ')
					
					// generate the link element
					var newElement = document.createElement('a');
					newElement.setAttribute('title', 'AnA-l Magic Button');
					newElement.setAttribute('href', 'javascript:betterGeekzone(\'' + markAsReadElement.getAttribute('href') + '\')');
					newElement.innerHTML = markAsReadElement.innerHTML;
					newElement.setAttribute('style', 'color: red; font-weight:bold;');
					
					//alert(newElement.innerHTML);
					
					//newElement.removeAttribute('align');
					//newElement.setAttribute('style', 'float: right');
					
					// insert them just before the original 'Mark all as read' link
					elems[k].insertBefore(scr,  markAsReadElement);
					elems[k].insertBefore(newElement, markAsReadElement);
					elems[k].insertBefore(spaceElement, markAsReadElement);
				}
			}
		}
	}
};

// insert the link into the webpage.
insertLink();

Ca donne ca : (le lien Mark All As Read en rouge)

et c’est dispo ici : http://www.jbriguet…ekzone2.user.js

Hop la, donc MAJ du script pour la nouvelle skin du forum, avec en nouveauté, la fonctionnalité d’ouvrir dans un nouvel onglet tout les messages non lus, sans retourner a l’index et tout marquer comme lu (par contre, ceux que vous venez d’ouvrir seront marqués comme lus par le forum automatiquement).

Le bouton rouge fait donc comme avant (Ouvres tout les messages non lus et retourne a l’index)
Le bouton vert ouvre tout les messages non lus, c’est tout.
Et le bouton bleu envoie a l’index en marquand tout les messages lus.

Voila, c’est dispo ici : http://wwW.jbriguet.com/jb/better_geekzone3.user.js

Nouvelle version du site, nouvelle version du script.
Toujours le meme principe, dispo ici : http://www.jbriguet.com/jb/better_geekzone4.user.js

Very good ! Thx m’sieur :slight_smile:

Je sais meme pas si ya des gens a qui ca sert, mais bon, ca fait du bien de faire des trucs differents et de les partager :slight_smile:

Et c’est tout le but de la zone. Donc bon. :slight_smile: <3

Manque juste à ajouter « Mark all as read » sur la même ligne et ce serait parfait (quoi? oui, la flemme de descendre en bas de page et cliquer deux fois oui DEUX fois pour le faire) :stuck_out_tongue:

Pareil que Threepwod, le lien en haut (sans ces deux épuisants clics), ce serait parfait !

(le gars vient gentillement partager son script et on commence à exiger des trucs en plus, le monde est injuste (ah mais c’est AnA-l, il l’a bien mérité alors :P))

Ha mais grave, je vous rajoute ca, l’url sera a jour dans 5min :stuck_out_tongue:

http://www.jbriguet.com/jb/better_geekzone4.user.js

Voila, l’url a pas changé et ca devrait vous plaire :wink:

Message hautement constructif :

\o/

Super! Merci :luv:

Hop ça y est ! je me suis décidé à l’installer. Je connaissais Stylish mais pas GreaseMonkey. Bon ben d’abord merci de nous avoir fait partagé ton script. :slight_smile:

Quelques remarques de noob:
J’ai un peu tatonné pour l’installer. J’ai fait « ouvrir le script » en pointant sur ton url, qui me l’a ouvert dans App/data/local/temp et j’ai fait installer quand le popup de GreaseMonkey s’est affiché. Y’a-t-il une autre manière de l’installer ? Si j’étais passé par Nouveau Script Utilisateur je n’aurais pas su quoi mettre dans Nom (bon là…), Espace de Nom, Description, Inclus.

Quelques remarques d’utilisateur:
Je n’ai pas les icônes redéfinis comme . Mais sans doute est-ce parce que Cafeine a passé un nouveau style récemment puisque le message date d’août.

Quelques remarques d’informaticien:
A côté de tes numéros de versions, anciennes et présentes, tu devrais mettre la date car pour quelqu’un comme moi qui débarque c’est intéressant de savoir si on a la dernière version, et l’historique des dates de modification.
C’est du javascript complétement standard ? Y’a rien de spécifique à GreaseMonkey

Voili voilà.

Normalement, dans FF, tu as juste a cliquer sur le lien, et greasemonkey prend le relai, comme quand tu installes un addon.

Pour le reste, non, le screen que tu link est une ancienne version de GZ. (Je ne redefinissais meme pas les icones, c’est juste que le screen indique ce qui est virtuellement cliqué).

Enfin, pour les numeros de version, je mettrais la date la prochaine fois =)
(Et donc oui, a priori, c’est du js de base, j’y connais queud donc c’est deja miraculeux que ca marche, et j’ai aucune idée de si il y a des trucs spécifiques a GM :D)

En tous cas ça a l’air de bien fonctionner avec TamperMonkey sous Chrome.

Normalement, il est meme pas necessaire d’avoir TamperMonkey avec chrome, c’est supporté nativement les userscripts.

Oui je viens de m’en rendre compte. Exit TamperMonkey.

(et peut-être exit Chrome aussi, je le teste depuis 2 jours, mais il n’est pas dit qu’il survive au WE)