Zum Inhalt springen

„Benutzer:Codeispoetry/helperFunctions.js“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
Inhalt gelöscht Inhalt hinzugefügt
NextItem mit Cookies erweitert
Etwas erweitert. Überwiegend Code von Benutzer:D (Ajax, editPage), der Rest ist von mir
Zeile 320: Zeile 320:
}
}


Cookie = {
function createCookie(name, value, days) {
create: function (name, value, days) {
var expires = "";
var expires = "";
if (days) {
if (days) {
Zeile 328: Zeile 329:
}
}
document.cookie = name + "=" + value + expires + "; path=/";
document.cookie = name + "=" + value + expires + "; path=/";
}
}


function readCookie(name) {
read: function (name) {
var nameEQ = name + "=";
var nameEQ = name + "=";
var ca = document.cookie.split(';');
var ca = document.cookie.split(';');
Zeile 339: Zeile 340:
}
}
return null;
return null;
}
}
}

/** simple ajax helper */
Ajax = {
/** GET from an URL, calls the okFunc if successful */
get: function(url, params, okFunc) {
var getURL = url
+ (url.indexOf("?") == -1 ? "?" : "&")
+ this.urlEncode(params, false);
var client = newRequest();
client.open("GET", getURL, true);
client.onreadystatechange = function() {
if (client.readyState != 4) return;
okFunc(client);
}
client.send(null);
},
/** POST to an URL, calls the okFunc if successful */
post: function(url, params, okFunc) {
var postBody = this.urlEncode(params, true);
var client = newRequest();
client.open("POST", url, true);
client.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
client.onreadystatechange = function() {
if (client.readyState != 4) return;
okFunc(client);
}
client.send(postBody);
},
/** encodes a Map or Pair-Array into a query string, optionally for use with application/x-www-form-urlencoded */
urlEncode: function(params, form) {
if (!params) params = [];
else if (params.constructor != Array) params = this.mapToPairs(params);
var encodeComponent = form ? this.encodeFormValue : encodeURIComponent;
function encodePair(pair) { return pair.map(encodeComponent).join("="); }
return params.map(encodePair).join("&");
},
/** encodes a single value for application/x-www-form-urlencoded */
encodeFormValue: function(value) {
return encodeURIComponent(value
.replace(/\r\n|\n|\r/g, "\r\n"))
.replace(/(^|[^%])(%%)*%20/g, "$1$2+");
},
/** convert a map into an Array for 2-element Arrays */
mapToPairs: function(params) {
var out = [];
for (key in params) {
var val = params[key];
if (val === null) continue;
if (val === false) continue;
if (val === true) val = "1";
val = val.toString();
out.push([ key, val ]);
}
return out;
},
/** parse XML and XHTML content */
parseXML: function(text) {
var xml = new DOMParser().parseFromString(text, "text/xml");
var doc = xml.documentElement;
if (doc.tagName == "parserError") throw "XML parser error: " + doc.textContent;
return xml;
}

};


function newtext (subj,text,wo)
function newtext (subj,text,wo)
Zeile 365: Zeile 436:
}
}
insertTags(untagEscape(tagOpen), untagEscape(tagClose), untagEscape(sampleText))
insertTags(untagEscape(tagOpen), untagEscape(tagClose), untagEscape(sampleText))
}

function editPage(title, section, formChangeFunc, finishedFunc) {
var args = {
title: title,
action: "edit",
section: section
};
Ajax.get(wgScript, args, function(client) {
if (client.status != 200) throw "expected status 200, got: " + client.status;
// fetch editform
var xml = Ajax.parseXML(client.responseText);
var editform = xml.getElementById("editform");
if (!editform) throw "editform not found";
// extract editform
var action = editform.action;
var formData = {
wpTextbox1: editform.elements["wpTextbox1"].value,
wpSummary: editform.elements["wpSummary"].value,
wpMinoredit: editform.elements["wpMinoredit"].checked,
wpWatchthis: editform.elements["wpWatchthis"].checked,
wpSection: editform.elements["wpSection"].value,
wpEdittime: editform.elements["wpEdittime"].value,
wpEditToken: editform.elements["wpEditToken"].value,
wpStarttime: editform.elements["wpStarttime"].value,
wpScrolltop: editform.elements["wpScrolltop"].value,
wpAutoSummary: editform.elements["wpAutoSummary"].value,
wpSave: false,
wpPreview: false,
wpDiff: false
};
// change editform
var save = formChangeFunc(formData);
if (!save) return;
// store editform
Ajax.post(action, formData, function(client) {
if (client.status != 200) throw "expected status 200, got: " + client.status;
if (finishedFunc) finishedFunc(client.responseText);
});
});
}

function displayBoxPage (title) {
var req = newRequest();
if (!req) {
jsMsg('Fehlgeschlagen!', 'display');
return;
}
req.open('GET', title, true);
req.onreadystatechange = function() {
if(req.readyState == 4)
var content_html = req.responseText.match(/<!-- start content -->([\s\S]+)<!-- (end content|NewPP limit report)/m);
if (!(content_html && jsMsg(content_html[1], 'display'))) { // Box bauen, sonst
if (req.responseXML == 'null') { // Seiteninhalt ersetzen, und zwar als Text
var newMatch = req.responseText.match(/(<a\s*name="top"\s*id="top">\s*<\/a>.+)<\/div>\s*<div\s*id="column-one">/);
if (newMatch)
document.getElementById('content').innerHTML = newMatch[1];
}
else { // oder DOM
var content = req.responseXML.getElementById('content');
if (content)
document.getElementById('content').parentNode.replaceChild(content, document.getElementById('content'));
}
}
}
req.send(null);

}
}



Version vom 21. Mai 2008, 10:29 Uhr

 // helperFunctions.js:
 // enthält obligatorische Hilfsfunktionen für [[Benutzer:PDD/monobook.js]]
 
 // <nowiki>
 
 if (typeof(drawquickbar) == 'undefined')
       var drawquickbar = true;
 
 ////////////////////////////////////////////////////////////////////////////////////////
 // URI-Parameter für fillActionPage(), benutzt in eintragen.js, hinweise.js
 // außerdem in addEditAndRevertLinks.js (nur subjp, minorp, speichernp)
 // nur in [[Benutzer:Euku/markErledigt.js]] : subjaddp
 
 var subjp      = "subj";       // Subject
 var subjaddp   = "subjadd";    // Subject zum Ranhängen
 var textp      = "txt";        // Für Text-Austausch
 var insp       = "ins";        // Vor dem Text einfügen
 var addp       = "add";        // an Text anhängen
 var minorp     = "minor";      // (k)leine Änderung
 var speichernp = "speichern";  // Auf "Speichern" klicken 
 var nocreatep  = "nocreate";   // beim Eintragen keine neue Seite generieren
 
 ////////////////////////////////////////////////////////////////////////////////////////
 // URI-Parameter für setReload() und doReload()
 var reloadme   = "neuladen";   // merker für reload
 
 ////////////////////////////////////////////////////////////////////////////////////////
 // absenden()
 // aufgerufen aus fillActionPage() und hinweis() in hinweise.js
 
 function absenden() {
	if (!debugme)
		document.editform.wpSave.click();
	else
		alert ('Speichern');
 }
 
 ////////////////////////////////////////////////////////////////////////////////////////
 // fillActionPage()  (früher aktion(), ganz früher loeschkandidat() )
 // von Littl, ergänzt von Revvar
 //
 // Entnimmt Parameter aus der URI, fügt sie in die Textfelder ein und klickt ggf. auf "Speichern"
 // (die aufgerufene Seite ist dabei immer im Editmodus)
 
 function fillActionPage() {
	// wenn Bausteineinfügung am Anfang:
	// nur einfügen, wenn Seite noch nicht gelöscht
	var pagedeleted = false;
	if (document.getElementById("newarticletext"))
		pagedeleted = true;
 
	// nur einfügen, wenn noch nicht eingetragen
	// der URI-Aktionsparameter ist immer entweder insp oder textp oder addp, daher else
	var doubleinsert = false;
	if (UrlParameters[textp] > "") 
		doubleinsert = findDoubleEntry(UrlParameters[textp], document.editform.wpTextbox1.value);
	else if (UrlParameters[insp] > "") 
		doubleinsert = findDoubleEntry(UrlParameters[insp], document.editform.wpTextbox1.value);
	else if (UrlParameters[addp] > "") 
		doubleinsert = findDoubleEntry(UrlParameters[addp], document.editform.wpTextbox1.value);
 
	// Textfeld ausfüllen
	if (UrlParameters[textp] > "") {
		if (doubleinsert)
			document.editform.wpTextbox1.value = UrlParameters[textp] + document.editform.wpTextbox1.value;
		else
			document.editform.wpTextbox1.value = UrlParameters[textp];
	} else if (UrlParameters[insp] > "") {
		document.editform.wpTextbox1.value = UrlParameters[insp] + document.editform.wpTextbox1.value;
	} else if (UrlParameters[addp] > "") {
		document.editform.wpTextbox1.value = document.editform.wpTextbox1.value + UrlParameters[addp];
	}
 
	// weitere Felder ausfüllen
	if (UrlParameters[subjp] > "")
		document.editform.wpSummary.value = UrlParameters[subjp];
	if (UrlParameters[minorp] == "1")
		document.editform.wpMinoredit.checked=true;
 
	// wenn Textbaustein doppelt: Warnung
	if (doubleinsert)
		alert("Artikel enthält den gewählten Baustein bereits!");
	// wenn Seite schon gelöscht: Warnung
	else if (pagedeleted && (UrlParameters[nocreatep] == "1"))
		alert("Artikel wurde bereits gelöscht!");
	// wenn autosave eingeschaltet: Seite speichern
	else if (UrlParameters[speichernp] == "1")
		absenden();
 }
 
 if ( ( (isEdit) && (!isSpecial) ) || ((UrlParameters["ins"] > "") && (wgUserName == 'TheWolf')) || ((location.href.substring(location.href.indexOf("/wiki/")).search(/\d+\.\d+\.\d+\.\d+/) != -1) && (location.href.substring(location.href.indexOf("/wiki/")).search(/protect/) == -1)) ) addOnloadHook(fillActionPage);

 ////////////////////////////////////////////////////////////////////////////////////////

 // findDoubleEntry()
 // aufgerufen aus fillActionPage()
 
 function findDoubleEntry(baustein, artikeltext) {
   var doublette = false;
 
   // wenn keine Vorlage enthalten: Abbruch
   if (baustein == baustein.split("{{")[0]) return (doublette);
 
   var chkbaustein = baustein.split("{{")[1].split("}}")[0].split("|")[0];
   chkbaustein = "{{" + chkbaustein ;
 
   if (navigator.userAgent.indexOf("Opera") == -1) {
      // checking
            // Zeilen wie die nächste generieren Fehler mit Opera, daher diesen Bereich auskommentiert
            // Fehler: RegExp.prototype.compile: syntax error in pattern or string
            // mit Firefox2 und IE7 geht das problemlos, hmm
      if (artikeltext.search(chkbaustein) != -1)
          doublette = true;
      // Kleinschreibung & SLA & substs
      if (chkbaustein == "{{Löschen") {
          if (artikeltext.search("{{löschen") != -1)
              doublette = true;
          if (artikeltext.search("{{SLA") != -1)
              doublette = true;
      }
      if (chkbaustein == "{{subst:Löschantrag") {
          if (artikeltext.search("{{Löschantragstext") != -1)
              doublette = true;
      }
      if (chkbaustein == "{{subst:Qualitätssicherung") {
          if (artikeltext.search("{{QS-Antrag") != -1)
              doublette = true;
      }
   } // end of Opera hack
   return (doublette);
 }
 
 ////////////////////////////////////////////////////////////////////////////////////////
 // initQuickbar()
 // positioniert den Quickbar
 
 function initQuickbar() {
   // Variables that could be defined in your monobook
   if (typeof(keeplogo) == 'undefined')
       keeplogo = false;
   if (typeof(releasequickbar) == 'undefined')
       releasequickbar = false;
 
   var quickbarpos = "fixed";
   // IE6- kann kein position:fixed und hat demzufolge Pech
   if ( navigator.userAgent.indexOf("MSIE") > -1 )
      quickbarpos = "absolute";
   // IE7 und als MSIE maskiertes Opera 8/9: können position:fixed
   if (( navigator.userAgent.indexOf("MSIE 7") > -1 ) || ( navigator.userAgent.indexOf("Opera") > -1 ))
      quickbarpos = "fixed";
 
   if (!keeplogo) {
      // logo ausblenden (revvar)
      document.getElementById("p-logo").style.visibility = "hidden";
      // padding in column-one (platz für quickbar)
      document.getElementById("column-one").style.paddingTop =
         (10+document.getElementById("p-quickbar").clientHeight)+"px";
   }
 
   if (!releasequickbar) {
      document.getElementById("p-quickbar").style.position = quickbarpos;
   }
 }
 if (drawquickbar) addOnloadHook(initQuickbar);
 
 ////////////////////////////////////////////////////////////////////////////////////////
 // doReload()
 // setzt nach Reload die Reload-Selection wieder
 
 function doReload() {
   if (UrlParameters[reloadme] == "1") {
      document.getElementById('reloadme').checked=true;
      setReload();
   }
 }
 if (!isEdit) addOnloadHook(doReload);
 
 ////////////////////////////////////////////////////////////////////////////////////////
 // setReload()
 // aufgerufen, wenn im Quickbar die Reload-Selection gesetzt wird
 
 var timeoutaktiv;
 function setReload() {
   if (document.getElementById('reloadme').checked && (UrlParameters[reloadme] != "1")) {
       var uri = (document.URL.indexOf('?') >0) ? ('&' + reloadme + '=1') : ('?' + reloadme + '=1');
       timeoutaktiv = window.setTimeout(location.href=location.href+uri, timeout);
   }
   else if (document.getElementById('reloadme').checked	&& (UrlParameters[reloadme] == "1")) {
       timeoutaktiv=window.setTimeout("location.reload()", timeout);
   }
   else {
       window.clearTimeout(timeoutaktiv); // bizarr, timeoutaktiv ist hier gar nicht belegt?
   }
 }
 
 ////////////////////////////////////////////////////////////////////////////////////////
 // checkAllDeletedVersions()
 // alle Checkboxen auswählen, für Versionenwiederherstellung ([[Spezial:Wiederherstellen]])
 // Idee: Poupou
 // Autoren: BLueFiSH.as, Schwalbe (ursprünglich als "TaggAll()")
 // Neue Version ohne JS-Errors: PDD
 
 function revAllDeletedVersions() {
   var inputobject = document.getElementsByTagName("input");
   for (var i=3; i<inputobject.length; i++)
      inputobject[i].checked = !inputobject[i].checked;
 }
 
 /*
  * Stringlänge überprüfen für Zusammenfassungszeile
  */
 
 function EditCommentLength(str) {
   return (199-str.length);
 }
 
 ////////////////////////////////////////////////////////////////////////////////////////
 // undate()
 // von [[Benutzer:D]]
 // entlinkt verlinkte Daten
 
 function undate() {
	document.editform.wpTextbox1.value = document.editform.wpTextbox1.value.replace(/\[\[\s*(\d+(er)?( v. Chr.)?)\s*\]\]/g, "$1")
		.replace(/\[\[\s*(\d+\. (Jahrhundert|Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember))\s*\]\]/g, "$1");
	document.editform.wpDiff.click();
 }
 
 ////////////////////////////////////////////////////////////////////////////////////////
 // insertAfter()
 // neuen Node nach einem referenceNode einfügen
 
 function insertAfter(parent, node, referenceNode) {
   parent.insertBefore(node, referenceNode.nextSibling);
 }
 
 ////////////////////////////////////////////////////////////////////////////////////////
 // trim()
 // Leerzeichen am Anfang und Ende entfernen
 
 function trim(str) {
   return str.replace(/^\s*|\s*$/g,"");
 }
 
 //
 // Funktion nowcomm()
 // Trägt NowCommons-Baustein ein
 // (aufgerufen aus der monobook.js)
 //
 
 function nowcomm() {
  var lemma = getLemma();
  if (lemma.substring(0, 5) == "Bild:") lemma=lemma.slice(5);
  var lemmaneu = prompt('Neuer Dateiname',lemma);
  if (lemmaneu != null )
      newtext('NowCommons','\{\{NowCommons|' + lemmaneu +'}}',3);
 }
 
 //
 // Helper-Funktion getLemma()
 // extrahiert Lemma, entfernt "Bild:" und "Kategorie:"
 // (aufgerufen von eintragen() aus der eintragen.js, nowcomm() )
 //
 
 function getLemma () { //Littl
   var lemma;
   if ((isContrib) && ( UrlParameters["target"] > "" ))
     lemma = UrlParameters["target"];
   else if ( UrlParameters["title"] > "" )
     lemma = UrlParameters["title"];
   else {
     lemma = decodeURIComponent(location.href.substring(location.href.indexOf("/wiki/") + 6)).split('#')[0];
     // fix linky links (?redirect=no)
     //lemma = lemma.split['\x3F'][0];
     if (lemma.indexOf("redirect=no")!=-1)
         lemma=lemma.substring(0,lemma.indexOf("redirect=no")-1);
   }
   // if (lemma.substring(0, 5) == "Bild:") lemma=lemma.slice(5);
   // if (lemma.substring(0, 10) == "Kategorie:") lemma=lemma.slice(10);
   if (isPHP) lemma=lemma.split('+').join('_');
   return lemma;
 }

 function nextItem (category, namespace) {
	var cmstart = UrlParameters['cmstart'];
	if (!cmstart) {
		var cookie = readCookie('cmstart');
		if (cookie) cookie = cookie.match(/(.+)\/\/(.+)/);
		if (cookie && cookie[1] == category) cmstart = cookie[2];
	}

	var scriptElem = document.createElement('script');
	var url = '/w/api.php?action=query&list=categorymembers&cmtitle=Category:' + category + '&cmsort=timestamp&cmdir=asc&cmlimit=1&cmprop=title&format=json&callback=gotNextItem';
	if (cmstart) url += '&cmstart=' + cmstart;
	if (namespace != undefined) url += '&cmnamespace=' + namespace;
	scriptElem.setAttribute('src', url);
	scriptElem.setAttribute('type','text/javascript');
	createCookie('cmstart', category);
	document.getElementsByTagName('head')[0].appendChild(scriptElem);
 }

 function gotNextItem(obj) {
	if(!obj['query'] || !obj['query']['categorymembers'] || !obj['query']['categorymembers'][0]) return
	var url = '/w/index.php?title=' + encodeURIComponent(obj['query']['categorymembers'][0]['title']);
	if (obj['query-continue'] && obj['query-continue']['categorymembers'])
		url += '&cmstart=' + encodeURIComponent(obj['query-continue']['categorymembers']['cmstart']);
	createCookie('cmstart', readCookie('cmstart') + '//' + obj['query-continue']['categorymembers']['cmstart']);
	location.href = url;
 }

 function newRequest() {
	try {
		if (window.XMLHttpRequest) {
			return new XMLHttpRequest();
		} else {
			return new ActiveXObject("MSXML2.XMLHTTP");
		}
	} catch (e) {
		return false;
	}
 }

 Cookie = {
    create: function (name, value, days) {
	var expires = "";
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		expires = '; expires=' + date.toGMTString();
	}
	document.cookie = name + "=" + value + expires + "; path=/";
    }

    read: function (name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
    }
 }

 /** simple ajax helper */
 Ajax = {
    /** GET from an URL, calls the okFunc if successful */
    get: function(url, params, okFunc) {
        var getURL  = url 
                    + (url.indexOf("?") == -1 ? "?" : "&")
                    + this.urlEncode(params, false);
        var client  = newRequest();
        client.open("GET", getURL, true);
        client.onreadystatechange = function() {
            if (client.readyState != 4) return;
            okFunc(client);
        }
        client.send(null);
    },
 
    /** POST to an URL, calls the okFunc if successful */
    post: function(url, params, okFunc) {
        var postBody    = this.urlEncode(params, true);
        var client      = newRequest();
        client.open("POST", url, true);
        client.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        client.onreadystatechange = function() {
            if (client.readyState != 4) return;
            okFunc(client);
        }
        client.send(postBody);
    },
 
    /** encodes a Map or Pair-Array into a query string, optionally for use with application/x-www-form-urlencoded  */
    urlEncode: function(params, form) {
             if (!params)                       params  = [];
        else if (params.constructor != Array)   params  = this.mapToPairs(params);
        var encodeComponent = form ? this.encodeFormValue : encodeURIComponent;
        function encodePair(pair) { return pair.map(encodeComponent).join("="); }
        return params.map(encodePair).join("&");
    },
 
    /** encodes a single value for application/x-www-form-urlencoded */
    encodeFormValue: function(value) {
        return encodeURIComponent(value
                .replace(/\r\n|\n|\r/g, "\r\n"))
                .replace(/(^|[^%])(%%)*%20/g, "$1$2+");
    },
 
    /** convert a map into an Array for 2-element Arrays */
    mapToPairs: function(params) {
        var out = [];
        for (key in params) {
            var val = params[key];
            if (val === null)   continue;
            if (val === false)  continue;
            if (val === true)   val = "1";
            val = val.toString();
            out.push([ key, val ]);
        }
        return out;
    },
 
    /** parse XML and XHTML content */
    parseXML: function(text) {
        var xml = new DOMParser().parseFromString(text, "text/xml");
        var doc = xml.documentElement;
        if (doc.tagName == "parserError")   throw "XML parser error: " + doc.textContent;
        return xml;
    }

 };

 function newtext (subj,text,wo)
  {  //wo=1 : Text austauschen
     //wo=2 : Text am Ende anhängen
     //wo=3 : Text vorne Einfügen
 
   if (subj > "") {
      if (document.editform.wpSummary.value > "") document.editform.wpSummary.value += ", ";
      document.editform.wpSummary.value = document.editform.wpSummary.value + subj;
   }
 
   switch (wo) {
       case 1 : document.editform.wpTextbox1.value=text+'\n'; break;
       case 2 : document.editform.wpTextbox1.value=document.editform.wpTextbox1.value+'\n'+text;break;
       case 3 : document.editform.wpTextbox1.value=text+'\n'+document.editform.wpTextbox1.value;break;
   }
   document.editform.wpTextbox1.focus();
  }
 
 function insertTagsWrapper(tagOpen, tagClose, sampleText, subj) {
   if (subj > "") {
      if (document.editform.wpSummary.value > "") document.editform.wpSummary.value += ", ";
      document.editform.wpSummary.value = document.editform.wpSummary.value + subj;
   }
   insertTags(untagEscape(tagOpen), untagEscape(tagClose), untagEscape(sampleText))
 }

 function editPage(title, section, formChangeFunc, finishedFunc) {
        var args    = { 
            title: title, 
            action: "edit", 
            section: section 
        };
        Ajax.get(wgScript, args, function(client) {
            if (client.status != 200)   throw "expected status 200, got: " + client.status;
 
            // fetch editform
            var xml         = Ajax.parseXML(client.responseText);
            var editform    = xml.getElementById("editform");
            if (!editform)  throw "editform not found";
 
            // extract editform
            var action      = editform.action;
            var formData    = {
                wpTextbox1:     editform.elements["wpTextbox1"].value,
                wpSummary:      editform.elements["wpSummary"].value,
                wpMinoredit:    editform.elements["wpMinoredit"].checked,
                wpWatchthis:    editform.elements["wpWatchthis"].checked,
                wpSection:      editform.elements["wpSection"].value,
                wpEdittime:     editform.elements["wpEdittime"].value,
                wpEditToken:    editform.elements["wpEditToken"].value,
                wpStarttime:    editform.elements["wpStarttime"].value,
                wpScrolltop:    editform.elements["wpScrolltop"].value,
                wpAutoSummary:  editform.elements["wpAutoSummary"].value,
                wpSave:         false,
                wpPreview:      false,
                wpDiff:         false
            };
 
            // change editform
            var save    = formChangeFunc(formData);
            if (!save)  return;
 
            // store editform
            Ajax.post(action, formData, function(client) {
                if (client.status != 200)   throw "expected status 200, got: " + client.status;
                if (finishedFunc)   finishedFunc(client.responseText);
            });
        });
 }

 function displayBoxPage (title) {
	var req = newRequest();
	if (!req) {
		jsMsg('Fehlgeschlagen!', 'display');
		return;
	}
 
	req.open('GET', title, true);
	req.onreadystatechange = function() { 
		if(req.readyState == 4)
			var content_html = req.responseText.match(/<!-- start content -->([\s\S]+)<!-- (end content|NewPP limit report)/m);
			if (!(content_html && jsMsg(content_html[1], 'display'))) { // Box bauen, sonst 
				if (req.responseXML == 'null') { // Seiteninhalt ersetzen, und zwar als Text
					var newMatch = req.responseText.match(/(<a\s*name="top"\s*id="top">\s*<\/a>.+)<\/div>\s*<div\s*id="column-one">/);
					if (newMatch)
						document.getElementById('content').innerHTML = newMatch[1];
				}
				else { // oder DOM
					var content = req.responseXML.getElementById('content');
					if (content)
						document.getElementById('content').parentNode.replaceChild(content, document.getElementById('content'));
				}
			}
	}
	req.send(null);

 }

 // </nowiki>