Utilisateur:Juju2004/Brouillons/italiques.js
Note : après avoir enregistré la page, vous devrez forcer le rechargement complet du cache de votre navigateur pour voir les changements.
Mozilla / Firefox / Konqueror / Safari : maintenez la touche Majuscule (Shift) en cliquant sur le bouton Actualiser (Reload) ou pressez Maj-Ctrl-R (Cmd-R sur Apple Mac) ;
Firefox (sur GNU/Linux) / Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.//<source lang=javascript>//<pre><nowiki>
/**
* an object that italicizes titles
*/
if (mw.config.get('wgNamespaceNumber')==0)
addOnloadHook(italicizeTitle);
var infoboxNames = new Array('Cinéma (film)', 'Livre');
function italicizeTitle()
{
var url = mw.config.get('wgServer') + mw.config.get('wgScript') + "?title=" + encodeURIComponent(mw.config.get('wgPageName')) + "&action=raw§ion=0"; // the infobox is in the first section
italicizer = new TitleItalicizer(url);
italicizer.execute();
}
function TitleItalicizer(url)
{
this.url = url;
this.execute = function()
{
ajaxHandler = new AjaxHandler();
ajaxHandler.applyToPage(this.url, this.italicize);
}
this.italicize = function (xmlhttp)
{
var pageContent =xmlhttp.responseText;
var infoboxData = getInfoboxData(pageContent);
if (infoboxData != null && nameToItalicize(infoboxData.name, infoboxNames))
{
var titleNode = document.getElementById('firstHeading');
var fullTitle = titleNode.firstChild.textContent;
fullTitle = italicizeTitle(fullTitle, infoboxData.title);
titleNode.innerHTML = fullTitle;
}
}
function getInfoboxData(pageContent)
{
var reg = /\{\{\s*?[Ii]nfobox\s*(.*?)\s*\|(.*\|)?\s*titre\s*=\s*(.*?)\s*\|/g;
var match = reg.exec(pageContent);
if (match==null)
return;
var infoboxName = match[1];
var title = match[3];
return {name:infoboxName, title:title};
}
function nameToItalicize(name, names)
{
for (i in names)
{
if (name == names[i])
return true;
}
return false;
}
function italicizeTitle (fullTitle, infoboxTitle)
{
var title = '<cite>'+infoboxTitle+'</cite>';
var i = fullTitle.indexOf('(', infoboxTitle.length);
if (i != -1)
{
title += ' '+fullTitle.substring(i);
}
return title;
}
}
function AjaxHandler()
{
/**
* récupère la page et lui applique la fonction transmise
*/
this.applyToPage = function(url, nextFunc)
{
this.http({url: url, headers:{'content-type':'text'}, onSuccess:nextFunc});
}
/**
* connexion avec le
* @param bundle trousseau
*/
this.http = function(bundle)
{
// mandatory: bundle.url
// optional: bundle.async
// optional: bundle.method
// optional: bundle.headers
// optional: bundle.data
// optional: bundle.onSuccess (xmlhttprequest, bundle)
// optional: bundle.onFailure (xmlhttprequest, bundle)
// optional: bundle.otherStuff OK too, passed to onSuccess and onFailure
var xmlhttp = this.getAjax();
if (!xmlhttp) return false;
xmlhttp.onreadystatechange = function()
{
if (xmlhttp.readyState == 4)
{
if (xmlhttp.status == 200 || xmlhttp.status == 302)
{
if (bundle.onSuccess)
{
bundle.onSuccess(xmlhttp, bundle);
} else if (bundle.onFailure) {
bundle.onFailure(xmlhttp, bundle);
// } else {
}
}
}
}
xmlhttp.open(bundle.method ? bundle.method : "GET", bundle.url, bundle.async === false ? false : true);
if (bundle.headers)
{
for (var field in bundle.headers)
try
{
xmlhttp.setRequestHeader(field,bundle.headers[field]);
} catch(err) {}
}
xmlhttp.send(bundle.data ? bundle.data : null);
return xmlhttp;
}
/**
* @return xmlhttp object
*/
this.getAjax = function()
{
var xmlhttp;
try
{
xmlhttp = new XMLHttpRequest();
}
catch(e)
{
try
{
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
xmlhttp = false
}
}
}
return xmlhttp;
}
/**
* lorsque la requête est complète
*/
this.httpIfReady = function(xmlhttp, bundle)
{
}
}
//</nowiki></pre></source>