Prévisualisation au survol

Depuis quelques jours, quand je survole un lien vers un message de forum avec la souris, le cadre qui permet de le prévisualiser n'apparaît plus. Est-ce que je suis le seul à qui ça arrive ?
«1

Réponses

  • Bonjour ,

    j'ai relevé aussi le même comportement . Je pensais que ça pouvait venir de mon ordi qui est très capricieux . Mais ça pourrait bien être autre chose alors .

    Cordialement
  • Bonjour,

    J'ai remarqué la même chose, ça ne vient donc pas de mon ordinateur.

    Cordialement,

    Rescassol
  • Bonjour

    Depuis quelques jours en passant la souris sur un titre je ne vois plus apparaitre la bulle dans laquelle on lisait le début de l'article en question. Je m'en servais beaucoup, puisque ça m'évitait d'ouvrir des articles qui ne m'intéressent pas. Suis-je la seule dans ce cas?

    En plus, en essayant d'écrire ceci dans le forum Les-mathématiques qui me paraissait plus adapté, j'ai découvert que je n'avais pas le droit d'y ouvrir une discussion. Pourquoi?

    Je vous remercie.
  • S'il marchait encore tu aurais peut-être vu ce message: http://www.les-mathematiques.net/phorum/read.php?32,1763820

    (:P)
    Une fonction est un ensemble $f$ de couples tel que pour tous $x,y,z$, si $(x,y)\in f$ et $(x,z)\in f$ alors $y = z$.
  • Merci, je ne l'avais pas vu! Ca répond à la moitié de mes problèmes!
  • Je dirais que le sous-forum Les-mathematiques.net est une archive correspondant à « l'ancien site », avant la bascule du forum sur son hébergeur actuel.
  • L'outil a été désactivé pour des raisons de sécurité.
  • Bonsoir,

    C'était une possibilité pourtant bien agréable.

    Cordialement,

    Rescassol
  • Ah bon, quelles raisons de sécurité ?
  • Poirot a écrit:
    L'outil a été désactivé pour des raisons de sécurité.
    RIP petit ange parti trop tôt :(
    C'était bien pratique!
    Une fonction est un ensemble $f$ de couples tel que pour tous $x,y,z$, si $(x,y)\in f$ et $(x,z)\in f$ alors $y = z$.
  • Oui, c'est dommage, c'était bien pratique. Mais si des raisons supérieures l'exigent...

    Bonne soirée.
  • Il y a plus qu'à écrire un script pour Greasemonkey pour remplacer ce truc. :-D
    (ou carrément un addon pour Firefox)
  • Tu vois ce qu'il te reste à faire pour avoir ta photo entre celle d'Élie Cartan et celle d'Emmanuel Vieillard-Baron.
  • J'ai déjà écrit des scripts mais pas ce genre de trucs qui ont cette fonction. Mes scripts étaient beaucoup plus simples. Dans un logiciel professionnel qui n'était pas pratique: pour faire une recherche dans le moteur de recherche il fallait faire plein de clics et j'utilisais à fond cette fonctionnalité. J'ai rajouté un script qui permettait d'avoir la fenêtre de recherche dans un coin de chaque page web ouverte par cette appli' et un autre script qui cochait des cases dans un formulaire en cliquant sur un seul bouton que le script rajoutait (il y avait dans le logiciel d'origine un risque d'erreur de l'utilisateur (moi) et l'erreur aurait été un drame). C'est tout pour le moment.

    Il faut savoir comment on fait apparaitre des bulles (c'est le nom je crois de la prévisualisation des messages) en javascript avec l'API de Firefox. Cela va demander du travail de recherche. Et je ne sais pas encore comment on rajoute un handler pour détecter que la souris s'est arrêtée trop longtemps sur un lien de message et qu'il faudrait donc activer la prévisualisation du message au bout de ce lien. Toutes les autres solutions auxquelles je pense tout de suite maintenant ne seront pas plus simples que de cliquer sur le lien du message.

    PS:
    Après quelques minutes de recherche je pense que mon deuxième point ne devrait pas poser de problème. Faire apparaitre une infobulle quand on passe la souris sur un lien.

    (voir cette démo: http://jsfiddle.net/AtheistP3ace/wmzLs7gp/1/ passer la souris sur les deux lettres hi puis cliquer sur le bouton et recommencer à passer la souris).

    Le point restant est de lire en tâche de fond le message pointé par un lien (url). Je ne sais pas encore faire.

    PS2:
    <object type="text/html" data="page.html"></object>
    


    Peut-être que ce truc fait l'affaire et répond à ma première question. A tester.
  • Bonsoir,

    une question sincère (i.e. sans malice) : c'est quoi cette histoire de sécurité?

    (...) au nom de la sécurité on nous prive d'une agréable possibilité.

    Poirot, explique-moi!

    Merci

    Cordialement
    Paul
  • Bonjour,

    J'ai pu récupérer l'ancien code afin de remettre en place cette prévisualisation. Le voici, c'est à utiliser avec tampermonkey. Je crois qu'il y avait aussi un problème : quand on allait sur la page des nouveaux messages et qu'on déroulait la liste, les messages apparaissant après n'étaient pas prévisualisables. C'est rectifié dans le code ci-dessous.
    // ==UserScript==
    // @name         LM-infobulles
    // @description  Infobulles sur les-mathematiques.net
    // @match        *://www.les-mathematiques.net/*
    // ==/UserScript==
    
    (function() {
    var cartan;
    var hilbert = 300;
    var grothendieck = 800;
    var cauchy = false;
    //get the actual height of the window
    function noether() {
    	return dieudonne (
    		window.innerHeight ? window.innerHeight : 0,
    		document.documentElement ? document.documentElement.clientHeight : 0,
    		document.body ? document.body.clientHeight : 0
    	);
    }
    function dieudonne(gauss, euler, ramanujan) {
    	var riemann = gauss ? gauss : 0;
    	if (euler && (!riemann || (riemann > euler)))
    		riemann = euler;
    	return ramanujan && (!riemann || (riemann > ramanujan)) ? ramanujan : riemann;
    }
    
    //get the position of the read url to set the position of the preview div
    function hardy(pythagoras) {
    	var euclid = fermat = 0;
    
    	//find the offset of the read url
    	if (pythagoras.offsetParent) {
    		do {
    			euclid += pythagoras.offsetLeft;
    			fermat += pythagoras.offsetTop;
    		} while (pythagoras = pythagoras.offsetParent);
    	}
    
    	// set the preview div below the read url by default
    	fermat += 24;
    
    	// find the actual potential position of the preview div on the screen
    	if (document.body.scrollTop) {
    		pascal = fermat - document.body.scrollTop;
    	} else if (document.documentElement.scrollTop) {
    		pascal = fermat - document.documentElement.scrollTop
    	} else if (window.pageYOffset) {
    		pascal = fermat - window.pageYOffset;
    	} else {
    		pascal = fermat;
    	}
    
    	// find the maximum height to place the preview div at which it will be fully visible
    	windowheight = noether();
    	neumann = windowheight - hilbert - 24;
    
    	//if the preview div will vertically fall outside the screen, put it above the url
    	if (pascal > neumann) fermat = fermat - hilbert - 37;
    	//if the preview div will horizontally fall outside the screen, pull it back in
    	fourier = document.body.clientWidth - grothendieck - 20;
    	if (euclid > fourier) euclid = fourier;
    	return [euclid,fermat];
    }
    
    function galois(peano) {
        cantor = peano.lastIndexOf("/");
        cayley = peano.indexOf("-",cantor);
        godel = peano.indexOf(",",cantor);
        hamilton = peano.indexOf(",phorum_session",cantor);
        if (hamilton < 0) {
            if (cayley < 0) {
                godel += 1;
                laplace = peano.substr(godel);
                godel = laplace.indexOf(",");
                if (godel > 0) {
                    laplace = laplace.substr(godel + 1);
                }
            } else {
                cayley += 1;
                laplace = peano.substr(cayley);
            }
        } else {
            if (cayley < 0) {
                godel += 1;
                laplace = peano.substr(godel,hamilton - godel);
            } else {
                cayley += 1;
                laplace = peano.substr(cayley);
            }
        }
        return laplace;
    }
    
    function bernouilli(d) {
    	poisson.innerHTML = d;
    	poisson.style.display = "block";
    	poisson.style.left=pappus[0]+"px";
    	poisson.style.top=pappus[1]+"px";
    	MathJax.Hub.Queue(["Typeset",MathJax.Hub,poisson]);
    }
    
    function weierstrass(url)
    {
        lipschitz=new XMLHttpRequest();
        lipschitz.open("GET",url,false);
        lipschitz.send();
        nash=new DOMParser();
        return nash.parseFromString(lipschitz.responseText,"text/html");
    }
    
    function jacobi() {
    	broco_lie = this;
    	peano = broco_lie.href;
      laplace = galois(peano);
    	if (laplace != parseInt(laplace)) return;
    	cartan = laplace;
    	poisson = document.getElementById("phorum_mod_post_preview_preview_div");
    	pappus = hardy(broco_lie);
    	birkhoff = weierstrass(peano);
    	legendre = birkhoff.getElementsByName("msg-"+laplace);
    	if (legendre.length == 0) {
    	  turing = birkhoff.getElementsByClassName("message")[0];
    	} else {
    	  turing = legendre[0].nextElementSibling;
    	}
    	atiyah = turing.getElementsByClassName("message-body")[0];
    	to_rem = atiyah.getElementsByClassName("message-options")[0];
    	atiyah.removeChild(to_rem);
    	bernouilli(atiyah.innerHTML);
    }
    
    //hide the preview div when not over the url
    function dedekind(broco_lie) {
    	//make sure a roaming mouse doesn't pull in the wrong preview data
    	cartan = null;
    	poisson = document.getElementById("phorum_mod_post_preview_preview_div");
    	boole = document.getElementById("phorum_mod_post_previews_help_div");
    	boole.style.display = "none";
    	poisson.style.display = "none";
    	poisson.innerHTML = "&nbsp;";
    }
    
    var tao = document.createElement("div");
    tao.innerHTML = '<div id="phorum_mod_post_preview_preview_div" style="background-color: #edf2ed; padding: 3px; border: solid 1px; width: 800px; height: 300px; display: none; position: absolute; overflow: hidden;">&nbsp;</div><div id="phorum_mod_post_previews_help_div" style="display: none;">&nbsp;</div>';
    document.body.appendChild(tao);
    
    var lawvere = /http:\/\/www.les-mathematiques.net\/phorum\/read.php/;
    function joyal() {
    	apollonius = document.getElementsByTagName("a");
    	for (i in apollonius) {
    		if (apollonius[i].href) {
    			peano = apollonius[i].href;
    			if (peano.match(lawvere)) {
    			apollonius[i].onmouseover = jacobi;
    			apollonius[i].onmouseout = dedekind;
    			apollonius[i].title = "";
    			}
    		}
    	}
    	ascoli = document.getElementsByClassName("message");
      for (i in ascoli) {
        fatou = ascoli[i].firstElementChild;
        if (fatou == undefined) continue;
        lebesgue = fatou.getElementsByTagName("a");
        for (i in lebesgue) {
          lebesgue[i].onmouseover = lebesgue[i].onmouseout = undefined;
        }
      }
    }
    
    (knuth=function(){window.setTimeout(knuth,1000);joyal();})()
    })();
    
  • @depasse J'ai l'impression qu'il s'agit du fait qu'on pouvait récupérer des messages "cachés". Dans le code on trouvait une vérification chez le client qui cachait la prévisualisation d'un message si on n'avait pas le droit de le voir… ce qui veut dire qu'on pouvait quand même la voir, si j'ai bien compris.
  • En tout cas, le nommage des variables et fonctions dans le code posté ci-dessus est proprement édifiant. ::o
  • Ben ouais, c'est difficile de maintenir un site avec du code offusqué....
  • PS : Ça maaarche ! Merci Champ-Pot-Lion !

    PPS : Il y a un petit prix à payer : survoler un titre de message l'affiche mais c'est pris en compte comme si on le lisait véritablement.

    Message original : voici le même code avec des $[j]$ à la place des $[ i]$ qui font des italiques.
    // ==UserScript==
    // @name         LM-infobulles
    // @description  Infobulles sur les-mathematiques.net
    // @match        *://www.les-mathematiques.net/*
    // ==/UserScript==
    
    (function() {
    var cartan;
    var hilbert = 300;
    var grothendieck = 800;
    var cauchy = false;
    //get the actual height of the window
    function noether() {
    	return dieudonne (
    		window.innerHeight ? window.innerHeight : 0,
    		document.documentElement ? document.documentElement.clientHeight : 0,
    		document.body ? document.body.clientHeight : 0
    	);
    }
    function dieudonne(gauss, euler, ramanujan) {
    	var riemann = gauss ? gauss : 0;
    	if (euler && (!riemann || (riemann > euler)))
    		riemann = euler;
    	return ramanujan && (!riemann || (riemann > ramanujan)) ? ramanujan : riemann;
    }
    
    //get the position of the read url to set the position of the preview div
    function hardy(pythagoras) {
    	var euclid = fermat = 0;
    
    	//find the offset of the read url
    	if (pythagoras.offsetParent) {
    		do {
    			euclid += pythagoras.offsetLeft;
    			fermat += pythagoras.offsetTop;
    		} while (pythagoras = pythagoras.offsetParent);
    	}
    
    	// set the preview div below the read url by default
    	fermat += 24;
    
    	// find the actual potential position of the preview div on the screen
    	if (document.body.scrollTop) {
    		pascal = fermat - document.body.scrollTop;
    	} else if (document.documentElement.scrollTop) {
    		pascal = fermat - document.documentElement.scrollTop
    	} else if (window.pageYOffset) {
    		pascal = fermat - window.pageYOffset;
    	} else {
    		pascal = fermat;
    	}
    
    	// find the maximum height to place the preview div at which it will be fully visible
    	windowheight = noether();
    	neumann = windowheight - hilbert - 24;
    
    	//if the preview div will vertically fall outside the screen, put it above the url
    	if (pascal > neumann) fermat = fermat - hilbert - 37;
    	//if the preview div will horizontally fall outside the screen, pull it back in
    	fourier = document.body.clientWidth - grothendieck - 20;
    	if (euclid > fourier) euclid = fourier;
    	return [euclid,fermat];
    }
    
    function galois(peano) {
        cantor = peano.lastIndexOf("/");
        cayley = peano.indexOf("-",cantor);
        godel = peano.indexOf(",",cantor);
        hamilton = peano.indexOf(",phorum_session",cantor);
        if (hamilton < 0) {
            if (cayley < 0) {
                godel += 1;
                laplace = peano.substr(godel);
                godel = laplace.indexOf(",");
                if (godel > 0) {
                    laplace = laplace.substr(godel + 1);
                }
            } else {
                cayley += 1;
                laplace = peano.substr(cayley);
            }
        } else {
            if (cayley < 0) {
                godel += 1;
                laplace = peano.substr(godel,hamilton - godel);
            } else {
                cayley += 1;
                laplace = peano.substr(cayley);
            }
        }
        return laplace;
    }
    
    function bernouilli(d) {
    	poisson.innerHTML = d;
    	poisson.style.display = "block";
    	poisson.style.left=pappus[0]+"px";
    	poisson.style.top=pappus[1]+"px";
    	MathJax.Hub.Queue(["Typeset",MathJax.Hub,poisson]);
    }
    
    function weierstrass(url)
    {
        lipschitz=new XMLHttpRequest();
        lipschitz.open("GET",url,false);
        lipschitz.send();
        nash=new DOMParser();
        return nash.parseFromString(lipschitz.responseText,"text/html");
    }
    
    function jacobi() {
    	broco_lie = this;
    	peano = broco_lie.href;
      laplace = galois(peano);
    	if (laplace != parseInt(laplace)) return;
    	cartan = laplace;
    	poisson = document.getElementById("phorum_mod_post_preview_preview_div");
    	pappus = hardy(broco_lie);
    	birkhoff = weierstrass(peano);
    	legendre = birkhoff.getElementsByName("msg-"+laplace);
    	if (legendre.length == 0) {
    	  turing = birkhoff.getElementsByClassName("message")[0];
    	} else {
    	  turing = legendre[0].nextElementSibling;
    	}
    	atiyah = turing.getElementsByClassName("message-body")[0];
    	to_rem = atiyah.getElementsByClassName("message-options")[0];
    	atiyah.removeChild(to_rem);
    	bernouilli(atiyah.innerHTML);
    }
    
    //hide the preview div when not over the url
    function dedekind(broco_lie) {
    	//make sure a roaming mouse doesn't pull in the wrong preview data
    	cartan = null;
    	poisson = document.getElementById("phorum_mod_post_preview_preview_div");
    	boole = document.getElementById("phorum_mod_post_previews_help_div");
    	boole.style.display = "none";
    	poisson.style.display = "none";
    	poisson.innerHTML = "&nbsp;";
    }
    
    var tao = document.createElement("div");
    tao.innerHTML = '<div id="phorum_mod_post_preview_preview_div" style="background-color: #edf2ed; padding: 3px; border: solid 1px; width: 800px; height: 300px; display: none; position: absolute; overflow: hidden;">&nbsp;</div><div id="phorum_mod_post_previews_help_div" style="display: none;">&nbsp;</div>';
    document.body.appendChild(tao);
    
    var lawvere = /http:\/\/www.les-mathematiques.net\/phorum\/read.php/;
    function joyal() {
    	apollonius = document.getElementsByTagName("a");
    	for (j in apollonius) {
    		if (apollonius[j].href) {
    			peano = apollonius[j].href;
    			if (peano.match(lawvere)) {
    			apollonius[j].onmouseover = jacobi;
    			apollonius[j].onmouseout = dedekind;
    			apollonius[j].title = "";
    			}
    		}
    	}
    	ascoli = document.getElementsByClassName("message");
      for (j in ascoli) {
        fatou = ascoli[j].firstElementChild;
        if (fatou == undefined) continue;
        lebesgue = fatou.getElementsByTagName("a");
        for (j in lebesgue) {
          lebesgue[j].onmouseover = lebesgue[j].onmouseout = undefined;
        }
      }
    }
    
    (knuth=function(){window.setTimeout(knuth,1000);joyal();})()
    })();
    
  • @aléa

    Certes, et je suis un peu stupéfait de trouver ça ici, mais as-tu vu qu'il y a des commentaires en anglais parfaitement compréhensible au milieu du code ? Ont-ils été ajoutés après l'offuscation ? Si c'était le cas, la personne qui les a ajoutés aurait sans doute « désoffusqué » en même temps, donc je n'y crois pas trop. Ça m'a donc plutôt l'air d'être un sabotage saboté. On ne peut vraiment plus faire confiance à personne, en ce bas monde !
  • Brian: tu parles de Piwik? C'est offusqué à l'ancienne. (j'ai la paresse d'aller lire le contenu) Quel est l'intérêt de faire ça?
  • Sérieusement, l'hypothèse de la blague potache est plus crédible.
  • Peut-être. Je ne sais pas d'où vient ce code, alors...

    @FdP

    Je parlais du code posté par Champ-Pot-Lion. Une des questions qui me paraît importante : une personne utilisant ce code s'expose-t-elle aux problèmes de sécurité évoqués ?
  • Je sais seulement que dans certains cas cela permettait de voir des messages "cachés". Je l'avais constaté aussi.

    Je ne suis pas fan de la fonction Weierstrass (elle sert à lire les pages où figurent les messages à lire en infobulle en tâche de fond j'imagine) j'ai l'impression que c'est de la grosse artillerie. Mais peut-être qu'on ne peut pas faire autrement.

    A propos de sécurité, je ne veux pas être paranoïaque mais j'ai plus confiance dans un addon direct à Firefox (un truc xpi) qu'un script qui passe par une usine à gaz dont je ne sais rien pour s'exécuter (GreaseMonkey, Tampermonkey...)

    Si quelqu'un sait comment rendre "autonome" ce script (celui posté plus haut et dont le texte a été corrigé aimablement par Math Cross) ce serait un plus.
  • Vous savez ce que vous êtes en train de faire?





    Vous êtes en train de compromettre la sécurité du site.
  • Shah D'Ock:

    En sécurité informatique miser sur l'ignorance des autres pour se croire en sécurité est un très mauvais calcul.

    Tout le barnum ci-dessus (le script) revient à automatiser l'action suivante: tu cliques sur un lien dans la liste des nouveaux messages, tu lis le message sur la nouvelle page qui va s'afficher (tu peux choisir de l'ouvrir dans un nouvel onglet) et tu retournes à la liste (et tu refermes l'onglet inutile éventuellement). Je ne vois pas en quoi cela compromet la sécurité du site.
  • Tampermonkey ne sert qu'à automatiser l'exécution de Javascript. On peut faire un fichier xpi qui servira uniquement à exécuter ce script... Il y en a un en pièce jointe de ce message, avec comme extension ggb mais il faut la changer en xpi. Dézipper le fichier (changer l'extension en zip) pour voir le code non offusqué.
    Math Coss a écrit:
    Il y a un petit prix à payer : survoler un titre de message l'affiche mais c'est pris en compte comme si on le lisait véritablement.

    En effet. J'ai modifié le code pour ne pas utiliser les cookies du navigateur lors de la récupération de la page, pour éviter ça.

    Avant, il y avait un service qui permettait de récupérer le contenu d'un message sans charger entièrement la page, mais il a disparu. J'imagine que c'était lui qui posait problème.
  • Quand je copie-colle le script ci-dessus dans tampermonkey, celui-ci râle à cause des variables globales implicites...
  • Oui, il faudrait rajouter des "var" partout. Mais ce n'est pas grave. Voilà le code avec certains trucs rectifiés.
    // ==UserScript==
    // @name         LM-preview
    // @description  Prévisualisation des messages sur les-mathematiques.net.
    // @match        *://www.les-mathematiques.net/phorum/*
    // ==/UserScript==
    
    (function() {
    var curmouseover;
    var phorum_mod_post_previews_height = 300;
    var phorum_mod_post_previews_width = 800;
    var phorum_mod_post_previews_enable_mark_read = false;
    function phorum_mod_post_previews_f_clientHeight() {
      return phorum_mod_post_previews_f_filterResults (
        window.innerHeight ? window.innerHeight : 0,
        document.documentElement ? document.documentElement.clientHeight : 0,
        document.body ? document.body.clientHeight : 0
      );
    }
    function phorum_mod_post_previews_f_filterResults(n_win, n_docel, n_body) {
      var n_result = n_win ? n_win : 0;
      if (n_docel && (!n_result || (n_result > n_docel)))
        n_result = n_docel;
      return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
    }
    
    function phorum_mod_post_previews_findPos(obj) {
      var curleft = curtop = 0;
    
      if (obj.offsetParent) {
        do {
          curleft += obj.offsetLeft;
          curtop += obj.offsetTop;
        } while (obj = obj.offsetParent);
      }
    
      curtop += 24;
    
      if (document.body.scrollTop) {
        actualheight = curtop - document.body.scrollTop;
      } else if (document.documentElement.scrollTop) {
        actualheight = curtop - document.documentElement.scrollTop
      } else if (window.pageYOffset) {
        actualheight = curtop - window.pageYOffset;
      } else {
        actualheight = curtop;
      }
    
      windowheight = phorum_mod_post_previews_f_clientHeight();
      maxtop = windowheight - phorum_mod_post_previews_height - 24;
    
      if (actualheight > maxtop) curtop = curtop - phorum_mod_post_previews_height - 37;
      maxleft = document.body.clientWidth - phorum_mod_post_previews_width - 20;
      if (curleft > maxleft) curleft = maxleft;
      return [curleft,curtop];
    }
    
    function phorum_mod_post_previews_get_message_id(ahref) {
      first_startpos = ahref.lastIndexOf("/");
      startpos = ahref.indexOf("-",first_startpos);
      altstartpos = ahref.indexOf(",",first_startpos);
      stoppos = ahref.indexOf(",phorum_session",first_startpos);
      if (stoppos < 0) {
        if (startpos < 0) {
          altstartpos += 1;
          message_id = ahref.substr(altstartpos);
          altstartpos = message_id.indexOf(",");
        if (altstartpos > 0) {
          message_id = message_id.substr(altstartpos + 1);
        }
      } else {
        startpos += 1;
        message_id = ahref.substr(startpos);
      }
      } else {
        if (startpos < 0) {
          altstartpos += 1;
          message_id = ahref.substr(altstartpos,stoppos - altstartpos);
        } else {
          startpos += 1;
          message_id = ahref.substr(startpos);
        }
      }
      return message_id;
    }
    
    function show_data(d) {
      previewer.innerHTML = d;
      previewer.style.display = "block";
      previewer.style.left=preview_pos[0]+"px";
      previewer.style.top=preview_pos[1]+"px";
      MathJax.Hub.Queue(["Typeset",MathJax.Hub,previewer]);
    }
    
    parser = new DOMParser();
    
    function httpGet(url)
    {
      return fetch(url,{method: 'GET',credentials: 'omit'}).then(function(response) {
        return response.text()
      }).then(function(txt) {
        return parser.parseFromString(txt,"text/html");
      });
    }
    
    function phorum_mod_post_previews_getpreview() {
      preview_node = this;
      ahref = preview_node.href;
      message_id = phorum_mod_post_previews_get_message_id(ahref);
      if (message_id != parseInt(message_id)) return; // && message_id != "gotonewpost"
      curmouseover = message_id;
      previewer = document.getElementById("phorum_mod_post_preview_preview_div");
      preview_pos = phorum_mod_post_previews_findPos(preview_node);
      httpGet(ahref).then(function (the_doc) {
        /*if (message_id == "gotonewpost") message_id = phorum_mod_post_previews_get_message_id(the_doc[1]);
          the_doc = the_doc[0];*/
        the_candidates = the_doc.getElementsByName("msg-"+message_id);
        if (the_candidates.length == 0) {
          the_msg = the_doc.getElementsByClassName("message")[0];
        } else {
          the_msg = the_candidates[0].nextElementSibling;
        }
        the_content = the_msg.getElementsByClassName("message-body")[0];
        to_rem = the_content.getElementsByClassName("message-options")[0];
        the_content.removeChild(to_rem);
        if (curmouseover == message_id) show_data(the_content.innerHTML);
      });
    }
    
    function phorum_mod_post_previews_hidepreview(preview_node) {
      curmouseover = null;
      previewer = document.getElementById("phorum_mod_post_preview_preview_div");
      previewhelp = document.getElementById("phorum_mod_post_previews_help_div");
      previewhelp.style.display = "none";
      previewer.style.display = "none";
      previewer.innerHTML = "&nbsp;";
    }
    
    var sp = document.createElement("div");
    sp.innerHTML = '<div class="message-body" id="phorum_mod_post_preview_preview_div" style="background: none; background-color: #edf2ed; padding: 3px; border: solid 1px; width: 800px; height: 300px; display: none; position: absolute; overflow: hidden;">&nbsp;</div><div id="phorum_mod_post_previews_help_div" style="display: none;">&nbsp;</div>';
    phor = document.getElementById("phorum");
    if (phor==null) phor = document.body;
    phor.appendChild(sp);
    
    var phorum_mod_post_previews_read_check = /http:\/\/www.les-mathematiques.net\/phorum\/read.php/;
    function assign_getpreview_functions() {
      anchors = document.getElementsByTagName("a");
      for (j in anchors) {
        if (anchors[j].href) {
          ahref = anchors[j].href;
          if (ahref.match(phorum_mod_post_previews_read_check)) {
          anchors[j].onmouseover = phorum_mod_post_previews_getpreview;
          anchors[j].onmouseout = phorum_mod_post_previews_hidepreview;
          anchors[j].title = "";
          }
        }
      }
      messages = document.getElementsByClassName("message");
      for (j in messages) {
        message = messages[j].firstElementChild;
        if (message == undefined) continue;
        wrong_anchors = message.getElementsByTagName("a");
        for (k in wrong_anchors) {
          wrong_anchors[k].onmouseover = wrong_anchors[k].onmouseout = undefined;
        }
      }
    }
    
    (callback=function(){window.setTimeout(callback,1000);assign_getpreview_functions();})()
    })();
    
  • Ben, chez moi, le script ne semble pas fonctionner :-S
  • Je ne sais pas ce qui ne va pas. :( Je l'ai encore modifié pour appliquer le css des messages sur l'infobulle.
  • Peut-être que ça vient de mon navigateur?
  • Tu as lequel ? Je n'ai testé qu'avec Firefox 64. Sur internet explorer je ne suis pas sûr que la méthode utilisée pour récupérer le message sans le marquer comme lu fonctionne.
  • Bonsoir,

    Et avec Chrome ?

    Cordialement,

    Rescassol
  • Ah mais attend, il me dit qu'il y a une erreur de parsing à la dernière ligne...

    edit: ça c'est parce que j'avais rajouté un { ligne 22 pour faire disparaître le warning
  • Avec Chromium (pareil que Chrome je crois) ça fonctionne.
  • Bon, ça ne marche toujours pas (opéra).
  • Chez moi ça fonctionne avec opera...
  • Champ-Pot-Lion:

    Le xpi fonctionne sans l'utilisation de bout de code de Greasemonkey ou TamperMonkey?

    Ou c'est un addon indépendant, de Firefox (et consorts), qui fonctionne sans contenir tout le barnum de TamperMonkey dedans?
  • On dirait qu'il y a que le contenu du script ci-dessus dans le fichier gbb. :)

    (Les xpi sont des archives zip spéciales, on peut voir le code qu'il contient en renommant le fichier gbb en .zip)

    PS:
    Je vous annonce que le fichier gbb fonctionne très bien. Renommez le en xpi puis cliquez dessus.

    Ma version de Firefox:

    64.0.2 (64 bits)
  • Je ne sais pas ce que tu appelles tout le barnum de TamperMonkey. Il s'agit juste d'un code javascript qui, quand il est exécuté sur une page du phorum, la modifie de telle sorte à faire apparaître les infobulles. Ensuite il faut automatiser l'exécution de ce script, ce qui peut se faire avec TamperMonkey ou en le mettant dans un addon.
    Fin de partie a écrit:
    On dirait qu'il y a que le contenu du script ci-dessus dans le fichier gbb. :)

    Oui.
  • Ton fichier gbb fonctionne très bien si tu n'as pas lu mon PS. Merci.

    PS:
    Il ne nécessite l'installation de rien d'autre et il ne contient qu'une version du script ci-dessus pour les paranos. B-)

    PS2:
    Avec quel outil as-tu "compilé" le script pour qu'il soit exécutable directement par l'interpréteur Javascript de Firefox (et consort) sans passer par un intermédiaire comme GreaseMonkey (TamperMonkey)?

    PS3:
    Même si vous augmentez le nombre d'anciens messages l'infobulle marche bien. Je crois que parfois cela partait en luciole quand cette fonctionnalité était native sur la page web des nouveaux messages.
  • Je ne comprends pas du tout... Mon ordinateur me dit
    Aucune application n’est configurée pour ouvrir le document « lm_preview-1.0-fx.xpi ».
    
  • D'accord, content que ça fonctionne. Je n'ai rien compilé, c'est juste du code javascript normal, que les navigateurs peuvent exécuter nativement.
  • @Shah d'Ock : Si tu utilises Opera, les xpi de Firefox ne fonctionnent pas avec.
  • Mais apparemment il y aurait un TamperMonkey pour Opera:

    https://addons.opera.com/fr/extensions/details/tampermonkey-beta/
  • Champ-Pot-Lion:

    Je sais bien que Javascript est un langage interprété. Mais si je mets le script dans un fichier .js il ne va pas s'exécuter pour autant. Tu as créé le package, je ne sais comment, avec tout le nécessaire pour qu'il soit pris en compte par Firefox. Il faut qu'il soit signé qu'il y ait un fichier manifest etc. Ma question était: avec quel outil tu as créé ce package? Merci d'avance.
  • Merci pour ce lien.
Connectez-vous ou Inscrivez-vous pour répondre.