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&section=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>