Discussion utilisateur:TheFearow/public/ticker.js

Le contenu de la page n’est pas pris en charge dans d’autres langues.
Ajouter un sujet
Une nouvelle de Wikinews, la source d'informations que vous pouvez écrire.
Dernier commentaire : il y a 15 ans par Bapti dans le sujet Défaire...

Dysfonctionnements[modifier le wikicode]

Bonjour,

Voici quelques corrections à apporter au script pour éviter des dysfonctionnements :

  • wgPageName ne peut contenir de caractère espace, remplacé par un souligné, il faut donc modifier le code :
ticker_custompages['Wikinews:Salle_de_rédaction'] = 'Wikinews:Salle de rédaction/Tickersource';

//Add custommsgs for all custom pages
ticker_custommsg['Wikinews:Salle_de_rédaction'] = 'Articles en développement';
  • L'animation fait apparaitre les codes HTML de certains caractères (   ) par exemple :
    &
    &#

Remplacer le code suivant

} else
    setTimeout("ticker_tick(false, false)",ticker_speed);
 
}
addLoadEvent(ticker_load);

Par

} else
    {
        if (ticker_tl[ticker_index].charAt(ticker_text_pos-1)=='&')
        {
            var j = ticker_tl[ticker_index].indexOf(';');
            if (j>=0) ticker_text_pos = j+1;
        }
        setTimeout("ticker_tick(false, false)",ticker_speed);
    }

}
addLoadEvent(ticker_load);

--86.210.245.198 3 novembre 2007 à 15:57 (UTC)Répondre

Un nouveau bug : boucle infinie[modifier le wikicode]

Il y a un nouveau bug. Il faut remplace la ligne suivante :

          var j = ticker_tl[ticker_index].indexOf(';');

par celle-ci:

          var j = ticker_tl[ticker_index].indexOf(';',ticker_text_pos);

Sinon, une boucle infinie se produit quand le ticker contient plus d'un caractère '&'. --86.205.213.246 7 mai 2008 à 18:14 (UTC)Répondre

URL mal encodées[modifier le wikicode]

Salut,

Un nouveau bug : les liens sont incorrects. Quand le lien contient des caractères spéciaux, tel l'espace insécable, ceux-ci sont codé HTML

&#code;

et de nouveau encodé dans l'URL :

%26#code;

Les points devraient être remplacés par des % Exemple :

  • lien incorrect

http://fr.wikinews.org/wiki/Droit_en_France%26#160.3B:_le_salari.C3.A9_doit_conna.C3.AEtre_tous_les_.C3.A9l.C3.A9ments_d.C3.A9terminant_sa_r.C3.A9mun.C3.A9ration

  • lien correct

http://fr.wikinews.org/wiki/Droit_en_France_:_le_salari%C3%A9_doit_conna%C3%AEtre_tous_les_%C3%A9l%C3%A9ments_d%C3%A9terminant_sa_r%C3%A9mun%C3%A9ration --DavidL 21 juin 2008 à 19:55 (UTC)Répondre

Où trouves-tu le premier de ces liens ? Hégésippe | ±Θ± 22 juin 2008 à 01:14 (UTC)Répondre
Dans les brèves qui défilent sur la page d'accueil.
Le bug des points à la place des % vient de la présence du caractère # dans l'URL, interprété comme une ancre dans la page. --DavidL 27 juin 2008 à 23:22 (UTC)Répondre
Oui, ce bug est connu depuis pas mal de temps, mais comment le résoudre, that is the question ?--Bapti 29 juin 2008 à 09:54 (UTC)Répondre
Proposition de correction :
  1. Ajouter les fonctions suivantes :
function html_entity_decode(str) {
  var ta=document.createElement("textarea");
  ta.innerHTML=str.replace(/</g,"&lt;").replace(/>/g,"&gt;");
  return ta.value;
}

function encode(lien)
{
  return encodeURI(html_entity_decode(lien).replace("\xA0"," "));
}
  1. Remplacer escape par encode dans la ligne
 
  document.getElementById("ticker_content").innerHTML = ("<a href=\"" + wgServer + wgArticlePath.replace("$1", escape(ticker_tl[ticker_index])) + "\" title=\"" + ticker_tl[ticker_index] + "\">" + ticker_tl[ticker_index].substring(0,ticker_text_pos) + "_</a>").replace("\n", "");
-->
  document.getElementById("ticker_content").innerHTML = ("<a href=\"" + wgServer + wgArticlePath.replace("$1", encode(ticker_tl[ticker_index])) + "\" title=\"" + ticker_tl[ticker_index] + "\">" + ticker_tl[ticker_index].substring(0,ticker_text_pos) + "_</a>").replace("\n", "");
--DavidL 12 juillet 2008 à 18:14 (UTC)Répondre
BRAVO, ça marche apparemment ;)--Bapti 13 juillet 2008 à 08:43 (UTC)Répondre
Merci, mais il y a encore une petite correction à faire : remplacer .replace("\xA0"," ") par .replace(/\xA0/g," ") dans la fonction encode pour remplacer toutes les occurrences d'espace insécable et pas seulement la première. --DavidL 14 juillet 2008 à 11:02 (UTC)Répondre
Fait C'est fait ! Merci ;)--Bapti 14 juillet 2008 à 12:49 (UTC)Répondre

Bug : initialisation de ticker_index[modifier le wikicode]

Le script initialise la variable ticker_index avec une valeur aléatoire en utilisant la ligne suivante :

ticker_index = Math.round(Math.random() * ticker_tl.length-1);

Quand la fonction random() retourne 0 (ou une valeur proche), la valeur est -1 et le navigateur (Firefox pour moi) retourne l'erreur suivante :

Erreur : ticker_tl[ticker_index] has no properties

et le script est arrêté.

On pourrait résoudre le problème en utilisant la fonction floor au lieu de round et effectuer un modulo (2 endroits dans le script) :

ticker_index = Math.floor(Math.random() * ticker_tl.length ) % ticker_tl.length;

Mais il y a un second problème : le script affiche seulement une partie des titres, en partant d'une valeur aléatoire jusqu'à la fin du tableau. Les premiers titres ne sont donc que rarement affichés (voire jamais) : exemple pour 10 titres

tirage aléatoire 0 à 9 : 7 -> affichage 7 8 9
tirage aléatoire 0 à 9 : 5 -> affichage 5 6 7 8 9
tirage aléatoire 0 à 9 : 3 -> affichage 3 4 5 6 7 8 9
tirage aléatoire 0 à 9 : 8 -> affichage 8 9
tirage aléatoire 0 à 9 : 9 -> affichage 9

La solution serait

  • A) soit de tous les afficher en partant de 0 : remplacer deux fois la ligne
ticker_index = Math.round(Math.random() * ticker_tl.length-1);

par la suivante :

ticker_index = 0;
  • B) soit de tirer aléatoirement l'index uniquement la première fois :
  if(first){
/* MODIFIER LA LIGNE SUIVANTE : */
   ticker_index = Math.floor(Math.random() * ticker_tl.length ) % ticker_tl.length;
   ticker_text_pos=0;
   ticker_str_length=ticker_tl[ticker_index].length;
  }
...
  if(ticker_text_pos++>=ticker_str_length)
  {
    ticker_index++;
    if(ticker_index!=ticker_tl.length)
    {
...
    }else{
/* MODIFIER LA LIGNE SUIVANTE : */
      ticker_index = 0;

--DavidL 19 juillet 2008 à 12:57 (UTC)Répondre

Fait (j'ai mis la première option) mais je ne suis pas trop sûr de mon coup :(--Bapti 19 juillet 2008 à 15:43 (UTC)Répondre
Merci. La modification est OK, ça fonctionne bien. --DavidL 19 juillet 2008 à 15:52 (UTC)Répondre

Dernier bug (en date)[modifier le wikicode]

Encore un bug avec les titres comportant un point d'interrogation.

Il faut remplacer encodeURI par encodeURIComponent dans la fonction encode(lien) :

function encode(lien)
{
  return encodeURIComponent(html_entity_decode(lien).replace(/\xA0/g," "));
}

--DavidL 26 juillet 2008 à 18:00 (UTC)Répondre

Fait merci ;)--Bapti 26 juillet 2008 à 20:10 (UTC)Répondre

MediaWiki mis à jour ?[modifier le wikicode]

La fonction encode doit être corrigée, maintenant que les espaces insécables sont supportés dans les URL :

return encodeURIComponent(html_entity_decode(lien).replace(/\xA0/g," "));

return encodeURIComponent(html_entity_decode(lien));

Bug supplémentaire : XML non conforme[modifier le wikicode]

Les données lues avec Ajax génèrent un avertissement, car elles ne sont pas XML puisqu'il n'y a pas qu'un seul élément racine, et la fonction de callback n'utilise pas le DOM. Il faut remplacer :

xmlhttp.overrideMimeType('text/xml');

par :

xmlhttp.overrideMimeType('text/plain');

--DavidL 4 août 2008 à 10:08 (UTC)Répondre

Fait--Bapti 4 août 2008 à 20:35 (UTC)Répondre

Défaire...[modifier le wikicode]

Il faut annuler la correction précédente pour les espaces insécables ou tester si ça fonctionne ailleurs. Hier les liens avec espaces insécables ne semblaient ne plus fonctionner une fois transformés en espace (%20) mais fonctionnaient encodés normalement (%C2%A0). Aujourd'hui c'est l'inverse (comme avant) : %C2%A0 ne fonctionne pas, %20 fonctionne. →

return encodeURIComponent(html_entity_decode(lien).replace(/\xA0/g," "));

ou

return encodeURIComponent(html_entity_decode(lien));

??? --DavidL 5 août 2008 à 11:00 (UTC)Répondre

Si tu le dis ;)--Bapti 5 août 2008 à 16:41 (UTC)Répondre