Utilisateur:TiChou/wpfunctions.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) ;
Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5./*
* Bibliothèque de fonctions et de prototypes JavaScript
*
* auteur : [[:fr:User:TiChou]]
* date : 14 juin 2007
* revision : 19 août 2007
*/
// indexOf
if (!Array.indexOf) {
Array.prototype.indexOf = function(obj,idx) {
var len = this.length;
if (len == 0) return -1;
if (!idx) idx = 0;
while (idx < 0) idx = len + idx;
for (var i = 0; i < len; i++)
if (this[i] == obj)
return i;
return -1;
}
}
// map
if (!Array.map) {
Array.prototype.map = function(fn, obj){
var result = new Array();
for (var i = 0, len = this.length; i < len; i++)
result[i] = fn.call(obj, this[i], i, this);
return result
}
}
// getElementsByClassName
if (!document.getElementsByClassName) {
document.getElementsByClassName = function() {
var nodes;
var elements = new Array();
elements.item = function(index) { return elements[index]; }
if (this.getElementsByTagNameNS)
nodes = this.getElementsByTagNameNS("*", "*");
else if (this.getElementsByTagName)
nodes = this.getElementsByTagName("*");
else
return null;
var element;
var match, regex;
for (var i = 0, leni = nodes.length; i < leni; i++) {
element = nodes[i];
match = true;
for (var j = 0, lenj = arguments.length; j < lenj && match; j++) {
regex = new RegExp("(^|\\s)" + arguments[j] + "(\\s|$)");
if (!regex.test(element.className)) match = false;
}
if (match) elements.push(element);
}
return elements;
}
}
if (typeof(HTMLElement) != 'undefined') {
HTMLElement.prototype.getElementsByClassName = document.getElementsByClassName;
}
// getElementById
if (typeof(getElementById) == "undefined") {
getElementById = function(id) {
var element = null;
if (this.id == id) {
element = this;
element.getElementsByClassName = document.getElementsByClassName;
}
for (var child = this.firstChild; !element && child; child = child.nextSibling)
if (child.nodeType == 1) {
child.getElementById = getElementById;
element = child.getElementById(id);
}
return element;
}
}
// URL encode
if (typeof(wpURLEncode) == "undefined") {
wpURLEncode = function(string) {
if (!string) return "";
return string.replace(/ /g, "_").replace(/[\x00-\x2C\x3B-\x40\x5B-\x5E\x60\x7B-\uFFFF]/g,
function (match) {
var c = match.charCodeAt(0);
var s = new Array();
if (c < 0x80) s.push(c);
else if (c < 0x0800) s.push(c >> 6 | 0xC0, c & 0x3F | 0x80);
else if (c < 0x010000) s.push(c >> 12 | 0xE0, c >> 6 & 0x3F | 0x80, c & 0x3F | 0x80);
else if (c < 0x110000) s.push(c >> 18 | 0xF0, c >> 12 & 0x3F | 0x80, c >> 6 & 0x3F | 0x80, c & 0x3F | 0x80);
for (var i = 0, len = s.length; i < len; i++)
s[i] = (s[i] < 16 ? "%0" : "%") + s[i].toString(16).toUpperCase();
return s.join("");
});
}
}
// HTMLize
if (typeof(encodeEntities) == "undefined") {
encodeEntities = function(string) {
var chars = new Array('&', '<', '>', '"', "'");
var entities = new Array('amp', 'lt', 'gt', 'quot', 'apos');
for (var i = 0, len = chars.length; i < len; i++)
string = string.replace(new RegExp(chars[i], 'g'), '&' + entities[i] + ';');
return string;
}
}
if (typeof(decodeEntities) == "undefined") {
decodeEntities = function(string) {
var chars = new Array('&', '<', '>', '"', "'");
var entities = new Array('amp', 'lt', 'gt', 'quot', 'apos');
for (var i = 0, len = entities.length; i < len; i++)
string = string.replace(new RegExp('&' + entities[i] + ';', 'g'), chars[i]);
return string;
}
}
// Escape single quote
if (typeof(escQuote) == "undefined") {
escQuote = function(string) {
return string.replace(new RegExp(/'/g), '\\\'');
}
}
// HTTP
if (typeof(httpRequest) == "undefined") {
httpRequest = function(url, options, data) {
// options.async
// options.method
// options.headers
// options.content
// options.onSuccess(request,data)
// options.onFailure(request,data)
var request;
try {
request = new XMLHttpRequest();
} catch(e) {
try {
request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
request = false;
}
}
}
if (request) {
request.onreadystatechange = function() {
if (request.readyState == 4)
httpComplete(request, options, data);
};
request.open(options.method ? options.method : "GET", url, options.async == false ? false : true);
if (options.headers) {
for (var field in options.headers)
request.setRequestHeader(field, options.headers[field]);
}
request.send(options.content ? options.content : null);
}
return request;
}
}
if (typeof(httpComplete) == "undefined") {
httpComplete = function(request, options, data) {
if (request.status >= 200 && request.status < 300) {
if (options.onSuccess) {
var contentType = request.getResponseHeader("Content-Type");
var regex = new RegExp(/^([^\/]+\/[^;]+).*/);
contentType = contentType.replace(regex, "$1");
if (contentType == "text/html") {
var doc = document.createElement("div");
doc.innerHTML = request.responseText;
doc.getElementsByClassName = document.getElementsByClassName;
doc.getElementById = getElementById;
options.onSuccess(doc, data);
} else if (contentType == "text/xml") {
var xml = null;
if (navigator.appName == "Microsoft Internet Explorer") {
xml = new ActiveXObject("Microsoft.XMLDOM");
xml.async = false;
xml.loadXML(request.responseText);
} else if (window.DOMParser) {
xml = new DOMParser();
xml = xml.parseFromString(request.responseText, 'text/xml');
}
options.onSuccess(xml, data);
} else {
options.onSuccess(request, data);
}
}
} else if (options.onFailure) {
options.onFailure(request, data);
} else {
alert(request.statusText);
}
}
}
// Edit WP page
if (typeof(wpEditPage) == "undefined") {
wpEditPage = function(title, params, editFunction, saveFunction, data) {
var url = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?title=' + wpURLEncode(title)
+ '&action=edit';
for (var name in params)
url += '&' + name + '=' + wpURLEncode(params[name]);
var options = { onSuccess: wpSavePage };
data.title = title;
data.editFunction = editFunction;
data.saveFunction = saveFunction;
httpRequest(url, options, data);
}
}
// Save WP page
if (typeof(wpSavePage) == "undefined") {
wpSavePage = function(doc, data) {
var inputs = doc.getElementById('editform').getElementsByTagName('input');
var editform = new Array();
for (var i = 0, len = inputs.length; i < len; i++) {
editform[inputs[i].name] = inputs[i].value;
}
var wpTextbox1 = doc.getElementById('wpTextbox1').value;
var wpSummary = editform['wpSummary'];
var regex = new RegExp(/var mw.config.get('wgArticleId') = "(\d+)";(?:\n.*)*var mw.config.get('wgCurRevisionId') = "(\d+)";/m);
var match = regex.exec(doc.textContent);
if (match) {
data.pageId = match[1];
data.curRevId = match[2];
}
var edit = data.editFunction(wpTextbox1, wpSummary, doc, data);
if (typeof(edit.error) == "undefined") {
editform['wpTextbox1'] = edit.wpTextbox1;
editform['wpSummary'] = edit.wpSummary;
var params = [ 'wpTextbox1', 'wpSummary', 'wpSection', 'wpWatchthis',
'wpStarttime', 'wpEdittime', 'wpEditToken', 'wpSave' ];
var content = params.map(function(name) { return name + '=' + encodeURIComponent(editform[name]); }).join("&");
var url = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?title=' + wpURLEncode(data.title)
+ '&action=submit';
var headers = new Array();
headers['Content-Type'] = 'application/x-www-form-urlencoded';
var options = { method: 'POST', headers: headers, content: content, onSuccess: data.saveFunction };
data = edit.data;
httpRequest(url, options, data);
} else {
edit.error(edit.data);
}
}
}
var wpfunctions = 1;