/* * 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 = wgServer + 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 wgArticleId = "(\d+)";(?:\n.*)*var 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 = wgServer + 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;