MediaWiki:Gadget-Objects.js

Un livre de Wikilivres.

Attention : Depuis MediaWiki 1.18 les pages se terminant avec l'extension .js ou .css sont interprétées comme des pages wiki ! En particulier les modèles (subst ou non) et les liens. Vous devez donc migrer le code source et effectuer vos changements en évitant ces éléments de syntaxe wiki (peu importe leurs emplacements dans le code source : commentaire, chaine) :

  • Double accolades ouvrantes (en particulier avec subst:) : séparer les deux accolades "{"+"{" du reste de la chaine
  • Double crochets ouvrants : même technique de séparation.
  • Signature (tildes ~ multiples) : même technique de séparation.

Note : après avoir enregistré vos préférences, vous devrez attendre que le serveur mette à jour la feuille de style globale avant de forcer le rechargement complet du cache de votre navigateur pour voir les changements.

  • Firefox / Safari : Maintenez la touche Maj (Shift) en cliquant sur le bouton Actualiser ou pressez Ctrl-F5 ou Ctrl-R (⌘-R sur un Mac) ;
  • Google Chrome : Appuyez sur Ctrl-Maj-R (⌘-Shift-R sur un Mac) ;
  • Internet Explorer : Maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5 ;
  • Konqueror : Cliquez sur Actualiser ou pressez F5 ;
  • Opera : Videz le cache dans Outils → Préférences.
var ajax = new objAJAX()
var cookies = new objCookies()

//--------------------------------------------------------------------------------------------objAJAX
function objAJAX()
{
    this.url = null
    this.requestType = "GET"
    this.unsync = true
    this.parser = new objHTMLparser()

    // AJAX taken from http://jibbering.com/2002/4/httprequest.html. Thanx :)
    this.conn = false;
    /*@cc_on @*/
    /*@if (@_jscript_version >= 5)
    // JScript gives us Conditional compilation, we can cope with old IE versions.
    // and security blocked creation of the objects.
    try
    {
        this.conn = new ActiveXObject("Msxml2.XMLHTTP");
        return;
    }
    catch (e)
    {
        try
        {
            this.conn = new ActiveXObject("Microsoft.XMLHTTP");
            return;
        }
        catch (E) { }
    }
    @end @*/
    if (typeof XMLHttpRequest != 'undefined')
    {
        try
        {
            this.conn = new XMLHttpRequest();
            return;
        }
        catch (e) { }
    }
    if (window.createRequest)
    {
        try
        {
            this.conn = window.createRequest()
        }
        catch (e) { }
    }
}

objAJAX.prototype.sendRequest = function (url, type, unsync, data)
{
    if (!this.conn)
        return null;
    if (this.conn.readyState != 0 && this.conn.readyState != 4)
        return "busy";
    if (url)
        this.url = url;
    if (type)
        this.requestType = type;
    if (unsync != null)
        this.unsync = unsync;
    this.conn.open(this.requestType, this.url, this.unsync);
    this.conn.send(data);
}

objAJAX.prototype.getResult = function()
{
    if (!this.conn)
        return null;
    return this.conn.responseText;
}

objAJAX.prototype.abort = function ()
{
    this.conn.onreadystatechange = null;
    this.conn.abort();
}

//------------------------------------------------------------------------------------------ObjCookie

function objCookies()
{
    this.value = null;
    this.name = null;
    this.expires = null;
}

objCookies.prototype.get = function(which)
{
    this.allcookies = document.cookie
    var start = this.allcookies.indexOf("; " + which + "=")
    if (start == -1)
    {
        start = this.allcookies.indexOf(which + "=");
        if (start != 0) return null;
    }
    else start += "; ".length;
    this.name = which;
    var end = this.allcookies.indexOf(";", start);
    if (end == -1) end = this.allcookies.length;
    this.value = this.allcookies.substring(start + which.length + 1, end);
    var arr = this.allcookies.substring(start, this.allcookies.length).split("; ");
    this.expires = null;
    if (arr.length > 0)
        if (/expires=/.test(arr[1]))
            this.expires = arr[1].substring("expires=".length, arr[1].length);
    return this.value;
}

objCookies.prototype.set = function (name, value, expires)
{
    document.cookie = name+"="+value+";"+(expires ? "expires="+expires+";" : "")+"path=/;domain="+wgServerName+";";
    this.allcookies = document.cookie;
}

objCookies.prototype.setWithDelay = function (name, value, delay) // delay is in millisecond
{
    var d = new Date();
    d.setTime(d.getTime() + delay);
    this.set(name, value, d.toGMTString());
}

objCookies.prototype.kill = function(which)
{
    if (this.get(which))
        this.set(which, null, "Thu, 01-Jan-70 00:00:01 GMT");
}

//--------------------------------------------------------------------------------------objHTMLparser

function objHTMLparser(str)
{
    this.html = str;
}

objHTMLparser.prototype.parse = function(elmt, str)
{
	if (str !== null)
		this.html = str;
	if (this.html.indexOf("<" + elmt) == -1 || this.html.indexOf("</" + elmt + ">") == -1)
		return null;
	var arr1 = this.html.split("<" + elmt);
	var elmts = new Array();
	for (var cpt = 1 ; cpt < arr1.length ; cpt++)
	{
		var el = new Object();
		el.innerHTML = arr1[cpt].substring(arr1[cpt].indexOf(">"), arr1[cpt].length).split("</" + elmt)[0];
		var prop = arr1[cpt].split(">")[0].split(/\s/g);
		for (var cpt1 = 1 ; cpt1 < prop.length ; cpt1++)
		{
			if (prop[cpt1].indexOf("=") != -1)
				el[prop[cpt1]] = true;
			else
				el[prop[cpt1].split("=")[0]] = prop[cpt1].substring(prop[cpt1].indexOf("="), prop[cpt1].length);
		}
		elmts[cpt-1] = el;
	}
	this.elmts[elmt] = elmts;
}