MediaWiki:Skin/Artikelbaukasten.js: Unterschied zwischen den Versionen

aus Kamelopedia, der wüsten Enzyklopädie
Zur Navigation springen Zur Suche springen
(zusatzfeature, die 2.)
(an aktuelle LÄ angepasst)
 
(74 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 6: Zeile 6:
 
var ab_opts = {};
 
var ab_opts = {};
 
var ab_finish = null;
 
var ab_finish = null;
 +
var ab_redlinks = "";
 
var ab_artname = "";
 
var ab_artname = "";
 +
 +
function ab_entities(text)
 +
{
 +
        return jQuery('<div/>').text(text).html();
 +
}
  
 
function ab_prepare()
 
function ab_prepare()
Zeile 17: Zeile 23:
 
var temp_opts = {};
 
var temp_opts = {};
 
/* alle wichtigen Daten zuerst auslesen und verarbeiten */
 
/* alle wichtigen Daten zuerst auslesen und verarbeiten */
data = document.getElementById("data").innerHTML.split("\n");
+
var data = document.getElementById("data").innerHTML.replace(/&lt;br( |&nbsp;)*\/?&gt;/g, "<br/>").replace(/(\r|\n|\f)+/g, "\n").split("\n");
 
for (line=0; line<data.length; line++)
 
for (line=0; line<data.length; line++)
 
{
 
{
Zeile 35: Zeile 41:
 
var pair;
 
var pair;
 
pair = elements[element].split("=", 2);
 
pair = elements[element].split("=", 2);
struct[pair[0]]=pair[1];
+
struct[pair[0]]=pair[1].replace(/[¦]/g, "|");
 
}
 
}
 
}
 
}
Zeile 49: Zeile 55:
 
ab_opts[temp_opts.label.name] = temp_opts;
 
ab_opts[temp_opts.label.name] = temp_opts;
 
temp_opts = new Object;
 
temp_opts = new Object;
 +
break;
 +
case "comment":
 +
break;
 +
case "redlinks":
 +
ab_redlinks += ( ab_redlinks == "" ? "" : "|" ) + ( struct.names != null ? struct.names : "" );
 
break;
 
break;
 
default:
 
default:
Zeile 65: Zeile 76:
 
function ab_init2()
 
function ab_init2()
 
{
 
{
 +
/* GaGA/HW/... weg */
 +
if ( document.getElementById("versteckdas") != null )
 +
document.getElementById("versteckdas").style.display = "none";
 +
 +
        jQuery("#empfohlene-seite-box").hide(0);
 +
 
/* jetzt Spezial:Artikelbaukasten vortäuschen */
 
/* jetzt Spezial:Artikelbaukasten vortäuschen */
 
document.getElementById("Artikel").innerHTML="<div id='Vorschau'></div><div id='Assistent'></div>";
 
document.getElementById("Artikel").innerHTML="<div id='Vorschau'></div><div id='Assistent'></div>";
Zeile 78: Zeile 95:
 
{
 
{
 
lastLabelObj = ab_opts[labelId];
 
lastLabelObj = ab_opts[labelId];
 +
 
label = lastLabelObj.options[optionId].next;
 
label = lastLabelObj.options[optionId].next;
  
Zeile 107: Zeile 125:
 
}
 
}
  
maintab = document.getElementById("ca-nstab-main");
+
$maintab = jQuery("#ca-nstab-main");
if ( maintab == null )
+
if ( ! $maintab )
maintab = document.getElementById("ca-nstab-user"); //auch im Kamelbau zum Testen solls klappen
+
$maintab = jQuery("#ca-nstab-user"); //auch im Kamelbau zum Testen solls klappen
edittab = document.getElementById("ca-edit");
+
$viewtab = jQuery("#ca-view");
discusstab = document.getElementById("ca-talk");
+
$edittab = jQuery("#ca-edit");
 +
$discusstab = jQuery("#ca-talk");
 +
        $historytab = jQuery("#ca-history");
 +
        $daumentab = jQuery("#ca-hw");
  
 
switch ( type )
 
switch ( type )
 
{
 
{
 
case "edit":
 
case "edit":
maintab.childNodes[0].innerHTML = 'Seite';
+
$maintab.find("a").text('Artikel');
edittab.style.display = 'inline';
+
$edittab.addClass('selected');
edittab.className = 'selected';
+
                        $viewtab.removeClass('selected');
discusstab.style.display = 'inline';
+
$discusstab.addClass('new');
 +
                        $historytab.show(0);
 +
$viewtab.show(0);
 +
$edittab.show(0);
 +
                        $daumentab.show(0);
 +
$discusstab.show(0);
 
break;
 
break;
 
 
 
case "spezial":
 
case "spezial":
maintab.childNodes[0].innerHTML = 'Spezial';
+
$maintab.find("a").text('Spezial');
edittab.style.display = 'none';
+
$viewtab.hide(0);
edittab.className = '';
+
$edittab.hide(0);
discusstab.style.display = 'none';
+
                        $historytab.hide(0);
 +
$discusstab.hide(0);
 +
                        $daumentab.hide(0);
 
break;
 
break;
 
 
 
default:
 
default:
maintab.childNodes[0].innerHTML = 'Seite';
+
$maintab.find("a").text('Artikel');
edittab.style.display = 'inline';
+
$edittab.removeClass('selected');
edittab.className = '';
+
                        $viewtab.addClass('selected');
discusstab.style.display = 'inline';
+
$discusstab.addClass('new');
 +
$viewtab.show(0);
 +
$edittab.show(0);
 +
$discusstab.show(0);
 +
                        $historytab.show(0);
 +
                        $daumentab.show(0);
 
break;
 
break;
  
Zeile 145: Zeile 178:
 
out = ( ab_opts[label].label.text == null ?
 
out = ( ab_opts[label].label.text == null ?
 
ab_opts["default"].label.text : ab_opts[label].label.text );
 
ab_opts["default"].label.text : ab_opts[label].label.text );
out += "<ul class='"+(ab_opts[label].label.style == null ?
+
if (ab_opts[label].options != null )
 +
{
 +
out += "<ul class='"+(ab_opts[label].label.style == null ?
 
ab_opts["default"].label.style :  ab_opts[label].label.style )+"'>";
 
ab_opts["default"].label.style :  ab_opts[label].label.style )+"'>";
for(opt=0; opt<ab_opts[label].options.length; opt++)
+
for(opt=0; opt<ab_opts[label].options.length; opt++)
{
+
{
out += "<li onclick=\"ab_generate('"+label+"', '"+opt+"')\">"+ab_opts[label].options[opt].text+"</li>";
+
out += "<li onclick=\"ab_generate('"+label+"', '"+opt+"')\">"+ab_opts[label].options[opt].text+"</li>";
 +
}
 +
out += "</ul>"
 
}
 
}
out += "</ul>"
 
  
 
if( ab_opts[label].setfinish != null )
 
if( ab_opts[label].setfinish != null )
Zeile 163: Zeile 199:
 
if ( label != "start" )
 
if ( label != "start" )
 
{
 
{
out +="<p>"+ab_opts["default"].clear.text.replace(/\[([^\]]+)\]/,"<span class='pseudolink' onclick='ab_clear()'>$1</span>")+"</p>";
+
out +="<p>"+ab_opts["default"].clear.text.replace(/\[([^\]]+)\]/g,"<span class='pseudolink' onclick='ab_clear()'>$1</span>")+"</p>";
  
 
}
 
}
Zeile 171: Zeile 207:
 
function ab_generateFinish()  
 
function ab_generateFinish()  
 
{
 
{
document.getElementById("TextboxText").innerHTML = "{{"+ab_finish.template+"}}<br/>"+ (ab_finish.signature == null ? "" : ab_finish.signature + "<br/>" ) + "<br/>" + document.getElementById("TextboxText").innerHTML;
+
document.getElementById("TextboxText").innerHTML = "{{"+ab_finish.template+"}}<br/>"+ (ab_finish.signature == null ? "" : " " + ab_finish.signature + "<br/>" ) + "<br/>" + document.getElementById("TextboxText").innerHTML;
document.getElementById("Assistent").innerHTML = "Du bist fertig! Du kannst deinen Artikel jetzt speichern.";
+
document.getElementById("Assistent").innerHTML = (ab_finish.text2 == null ? ab_opts["default"].setfinish.text2 : ab_finish.text2);
 
ab_finish.inserted = ab_finish.template;
 
ab_finish.inserted = ab_finish.template;
 
}
 
}
Zeile 196: Zeile 232:
 
else
 
else
 
{
 
{
ajax = new Ajax.Request( wgServer+wgScript+"/Vorlage:"+ab_finish.inserted+"?action=render", {
+
jQuery.ajax({
method: 'get',
+
url: wgServer+wgScript+"/Vorlage:"+ab_finish.inserted,
onSuccess: function(transport)
+
data: "action=render",
 +
success: function(html)
 
{
 
{
ab_finish.html = transport.responseText;
+
ab_finish.html = html.match(/<(div|table)(.|[\n])*<\/\1>/)[0];
 
ab_finish.fpt();
 
ab_finish.fpt();
 
}
 
}
Zeile 228: Zeile 265:
 
out = document.getElementById('TextboxText').innerHTML;
 
out = document.getElementById('TextboxText').innerHTML;
 
 
out = out.replace(/\[\[(.+?)\|(.+?)\]\]/, "<a href='"+wgServer+wgScript+"/$1'>$2</a>");
+
/* Zuerst die Roten */
out = out.replace(/\[\[(.+?)\]\]/, "<a href='"+wgServer+wgScript+"/$1'>$1</a>");
+
out = out.replace( new RegExp("\\[\\[("+ab_redlinks+")\\|([^\[\]|]+)\\]\\](\S*)", "g"), "<a class='new' href='"+wgServer+wgScript+"/$1'>$2$3</a>");
 +
out = out.replace( new RegExp("\\[\\[("+ab_redlinks+")\\]\\](\S*)", "g"), "<a class='new' href='"+wgServer+wgScript+"/$1'>$1$2</a>");
 +
 +
out = out.replace(/\[\[([^\[\]|]+)\|([^\[\]|]+)\]\](\S*)/g, "<a href='"+wgServer+wgScript+"/$1'>$2$3</a>");
 +
out = out.replace(/\[\[([^\[\]|]+)\]\](\S*)/g, "<a href='"+wgServer+wgScript+"/$1'>$1$2</a>");
 +
 
 +
 
 +
sigtime = ab_genSigtime();
 +
 
 +
out = out.replace(/<br *?\/?>(.*?)[~]{4}<br *?\/?>/, "<div><pre>$1<a href='"+wgServer+wgScript+"/Kamel:"+wgUserName+"'>Kamel:"+wgUserName+"</a> "+sigtime+"</pre></div>");
  
 
out = out.replace(/\{\{.*\}\}/, ab_finish.html);
 
out = out.replace(/\{\{.*\}\}/, ab_finish.html);
 
document.getElementById(into).innerHTML = out;
 
document.getElementById(into).innerHTML = out;
 
ab_genWindow( artname );
 
ab_genWindow( artname );
 +
}
 +
 +
function ab_genSigtime()
 +
{
 +
datum = new Date();
 +
hrs = datum.getHours();
 +
min = datum.getMinutes();
 +
hrs_str = ( (hrs < 10) ? "0" + hrs : hrs );
 +
min_str = ( (min < 10) ? "0" + min : min );
 +
mon = datum.getMonth();
 +
day = datum.getDate();
 +
        mon_str = [ "Jan.", "Feb.", "Mär.", "Apr.", "Mai", "Jun.", "Jul.", "Aug.", "Sep.", "Okt.", "Nov.", "Dez." ][mon];
 +
        yea = datum.getFullYear();
 +
return ( hrs_str + ":" + min_str + ", " + day + ". " + mon_str + " " + yea + " (CET)" );
 
}
 
}
  
Zeile 239: Zeile 299:
 
{
 
{
 
document.getElementById('n-Letzte-.C3.84nderungen').childNodes[0].onclick = function () { return true; };
 
document.getElementById('n-Letzte-.C3.84nderungen').childNodes[0].onclick = function () { return true; };
ajax = new Ajax.Request( wgServer+wgScript+"/Spezial:Recentchanges", {
+
jQuery.ajax({
method: 'get',
+
url:wgServer+wgScript+"/Spezial:Recentchanges",
onSuccess: function(transport)
+
data: {limit: 20, useskin: mw.config.get("skin")},
 +
success: function(html)
 
{
 
{
datum = new Date;
+
datum = new Date();
time = datum.getHours + ":" + datum.getMinutes;
+
hrs = datum.getHours();
 +
min = datum.getMinutes();
 +
hrs_str = ( (hrs < 10) ? "0" + hrs : hrs );
 +
min_str = ( (min < 10) ? "0" + min : min );
 +
chtime = ( hrs_str + ":" + min_str );
 
bytes = document.getElementById('TextboxText').innerHTML.length;
 
bytes = document.getElementById('TextboxText').innerHTML.length;
changes = '(<a href="/index.php?title="'+escape(ab_artname)+'&amp;diff=0" title="'+escape(ab_artname)+'" tabindex="1">Unterschied</a>)' +  
+
'(<a href="/index.php?title="'+escape(ab_artname)+'&amp;action=history" title="'+escape(ab_artname)+'">Versionen</a>) . .    ' +  
+
sigtime = ab_genSigtime();
'<a href="/index.php/'+escape(ab_artname)+'" title="'+escape(ab_artname)+'">'+escape(ab_artname)+'</a>; '+time +
+
begin = document.getElementById('TextboxText').innerHTML.replace(/<br *\/?>/g, " ").substr(0,150);
 +
begin = begin.replace(/[~]{4}/, "<a href='"+wgServer+wgScript+"/Kamel:"+wgUserName+"'>Kamel:"+wgUserName+"</a> "+sigtime);
 +
 
 +
changes = '(Unterschied | ' +  
 +
'<a href="/index.php?title="'+ab_entities(ab_artname)+'&amp;action=history" title="'+ab_entities(ab_artname)+'">Versionen</a>) . .    ' +
 +
'<abbr class="newpage" title="Neue Seite">Neu</abbr> ' +
 +
'<a href="/index.php/'+ab_entities(ab_artname)+'" title="'+ab_entities(ab_artname)+'">'+ab_entities(ab_artname)+'</a>; '+chtime +
 
'. . <span class="mw-plusminus-pos">(+'+bytes+' Bytes)</span> . . ' +  
 
'. . <span class="mw-plusminus-pos">(+'+bytes+' Bytes)</span> . . ' +  
'<a href="/index.php/Kamel:'+escape(wgUserName)+'" title="Kamel:'+escape(wgUserName)+'">'+escape(wgUserName) +
+
'<a href="/index.php/Kamel:'+ab_entities(wgUserName)+'" title="Kamel:'+ab_entities(wgUserName)+'">'+ab_entities(wgUserName) +
'</a> (<a href="/index.php/Kamel_Diskussion:'+escape(wgUserName)+'" title="Kamel Diskussion:'+escape(wgUserName)+'">Diskussion</a>' +  
+
'</a> (<a href="/index.php/Kamel_Diskussion:'+ab_entities(wgUserName)+'" title="Kamel Diskussion:'+ab_entities(wgUserName)+'">Diskussion</a> ' +  
'| <a href="/index.php/Spezial:Beitr%C3%A4ge/'+escape(wgUserName)+'" title="Spezial:Beiträge/'+escape(wgUserName)+'">Beiträge</a> ' +
+
'| <a href="/index.php/Spezial:Beitr%C3%A4ge/'+ab_entities(wgUserName)+'" title="Spezial:Beiträge/'+ab_entities(wgUserName)+'">Beiträge</a>) ' +
'<span class="comment">(Artikelbaukasten-Edit)</span>'
+
'<span class="comment">(Artikelbaukasten-Edit: "'+begin+'...")</span>';
html = transport.responseText;
+
body_begin = html.indexOf("<body");
html = html.replace(/.*<body>(.*)<\/body>.*/, "$1");
+
body_begin = html.indexOf(">", body_begin);
 +
body_end  = html.indexOf("</body>");
 +
html = html.substring( body_begin+1, body_end );
 
html = html.replace( /(<ul class="special">)/, "$1<li>"+changes+"</li>");
 
html = html.replace( /(<ul class="special">)/, "$1<li>"+changes+"</li>");
document.body.innerHTML = html;
+
ab_genWindow("Letzte Änderungen", "spezial");
 +
 
 +
                        content = jQuery(html).find("#bodyContent");
 +
jQuery("#bodyContent").replaceWith(content);
 
}
 
}
 
 

Aktuelle Version vom 30. September 2012, 20:33 Uhr

/* Artikelbaukasten */

addOnloadHook(ab_prepare);

/* globale variablen */
var ab_opts = {};
var ab_finish = null;
var ab_redlinks = "";
var ab_artname = "";

function ab_entities(text)
{
        return jQuery('<div/>').text(text).html();
}

function ab_prepare()
{
	document.getElementById("Startlink").onclick = ab_init;
}

function ab_init()
{
	var temp_opts = {};
	/* alle wichtigen Daten zuerst auslesen und verarbeiten */
	var data = document.getElementById("data").innerHTML.replace(/&lt;br( |&nbsp;)*\/?&gt;/g, "<br/>").replace(/(\r|\n|\f)+/g, "\n").split("\n");
	for (line=0; line<data.length; line++)
	{
		var elements;
		var struct = {};
		
		if ( data[line].indexOf("|") == -1 )
			elements = [ data[line] ];
		else
		{
			elements = data[line].split("|");

			for (element=1; element<elements.length; element++)
			{
				if ( elements[element].indexOf("=") == -1 )
					continue;
				var pair;
				pair = elements[element].split("=", 2);
				struct[pair[0]]=pair[1].replace(/[¦]/g, "|");
			}
		}
		
		switch ( elements[0] )
		{
			case "option":
				if ( temp_opts["options"] == null )
					temp_opts["options"] = [];
				temp_opts["options"].push( struct );
				break;
			case "flush":
				ab_opts[temp_opts.label.name] = temp_opts;
				temp_opts = new Object;
				break;
			case "comment":
				break;
			case "redlinks":
				ab_redlinks += ( ab_redlinks == "" ? "" : "|" ) + ( struct.names != null ? struct.names : "" );
				break;
			default:
				temp_opts[elements[0]] = struct;
				break;
		}

		

	}

	/* http-request vortäuschen */
	setTimeout("ab_init2()", 1000);
}

function ab_init2()
{
	/* GaGA/HW/... weg */
	if ( document.getElementById("versteckdas") != null )
		document.getElementById("versteckdas").style.display = "none";

        jQuery("#empfohlene-seite-box").hide(0);

	/* jetzt Spezial:Artikelbaukasten vortäuschen */
	document.getElementById("Artikel").innerHTML="<div id='Vorschau'></div><div id='Assistent'></div>";
	document.getElementById("SuffixButtons").innerHTML = '<form>'+
		'<input type="button" tabindex="5" value="Speichern, oder doch" onclick="ab_display(ab_save)" /> '+
		'<input type="button" name="wpPreview" tabindex="6" value="erstmal Vorschau zeigen?" onclick="ab_display(ab_preview)" />'+
		'</form>';
	ab_generate("default", "0");
	ab_genWindow( "Spezial:Artikelbaukasten", "spezial" );
}

function ab_generate( labelId, optionId )
{
	lastLabelObj = ab_opts[labelId];

	label = lastLabelObj.options[optionId].next;

	switch( lastLabelObj.options[optionId].action )
	{
		case "article" :
			ab_artname = lastLabelObj.options[optionId].text;
			setTimeout("ab_genWindow('Bearbeiten von „"+ab_artname+
				"“', 'edit'); ab_generate2('"+label+"'); document.getElementById('Suffix').style.display = 'block';", 1000);
			break;

		case "nothing":
			ab_generate2( label );
			break;

		default:
			document.getElementById("TextboxText").innerHTML += lastLabelObj.options[optionId].text + " ";
			ab_generate2( label );
			break;
	}
}

function ab_genWindow( artName, type )
{
	if ( artName != null )
	{
		document.getElementsByTagName("H1")[0].innerHTML = artName;
		document.title = artName + " - Kamelopedia";
	}

	$maintab = jQuery("#ca-nstab-main");
	if ( ! $maintab )
		$maintab = jQuery("#ca-nstab-user"); //auch im Kamelbau zum Testen solls klappen
	$viewtab = jQuery("#ca-view");
	$edittab = jQuery("#ca-edit");
	$discusstab = jQuery("#ca-talk");
        $historytab = jQuery("#ca-history");
        $daumentab = jQuery("#ca-hw");

	switch ( type )
	{
		case "edit":
			$maintab.find("a").text('Artikel');
			$edittab.addClass('selected');
                        $viewtab.removeClass('selected');
			$discusstab.addClass('new');
                        $historytab.show(0);
			$viewtab.show(0);
			$edittab.show(0);
                        $daumentab.show(0);
			$discusstab.show(0);
			break;
		
		case "spezial":
			$maintab.find("a").text('Spezial');
			$viewtab.hide(0);
			$edittab.hide(0);
                        $historytab.hide(0);
			$discusstab.hide(0);
                        $daumentab.hide(0);
			break;
		
		default:
			$maintab.find("a").text('Artikel');
			$edittab.removeClass('selected');
                        $viewtab.addClass('selected');
			$discusstab.addClass('new');
			$viewtab.show(0);
			$edittab.show(0);
			$discusstab.show(0);
                        $historytab.show(0);
                        $daumentab.show(0);
			break;

	}
	self.scroll(0,0);
}

function ab_generate2( label )
{
	var out;
	out = ( ab_opts[label].label.text == null ?
		ab_opts["default"].label.text : ab_opts[label].label.text );
	if (ab_opts[label].options != null )
	{
		out += "<ul class='"+(ab_opts[label].label.style == null ?
		ab_opts["default"].label.style :  ab_opts[label].label.style )+"'>";
		for(opt=0; opt<ab_opts[label].options.length; opt++)
		{
			out += "<li onclick=\"ab_generate('"+label+"', '"+opt+"')\">"+ab_opts[label].options[opt].text+"</li>";
		}
	out += "</ul>"
	}

	if( ab_opts[label].setfinish != null )
		ab_finish = ab_opts[label].setfinish;

	if ( ab_finish != null )
	{
		out += "<p>"+(ab_finish.text == null ? ab_opts["default"].setfinish.text : ab_finish.text).replace(/\[([^\]]+)\]/,"<span class='pseudolink' onclick='ab_generateFinish()'>$1</span>")+"</p>";
	}

	if ( label != "start" )
	{
		out +="<p>"+ab_opts["default"].clear.text.replace(/\[([^\]]+)\]/g,"<span class='pseudolink' onclick='ab_clear()'>$1</span>")+"</p>";

	}
	document.getElementById("Assistent").innerHTML = out;
}

function ab_generateFinish() 
{
	document.getElementById("TextboxText").innerHTML = "{{"+ab_finish.template+"}}<br/>"+ (ab_finish.signature == null ? "" : " " + ab_finish.signature + "<br/>" ) + "<br/>" + document.getElementById("TextboxText").innerHTML;
	document.getElementById("Assistent").innerHTML = (ab_finish.text2 == null ? ab_opts["default"].setfinish.text2 : ab_finish.text2);
	ab_finish.inserted = ab_finish.template;
}

function ab_clear()
{
	ab_finish = null;
	document.getElementById('Suffix').style.display = 'none';
	document.getElementById('TextboxText').innerHTML = '';
	ab_init2();

}

function ab_display( fpt_save_or_preview )
{
	ab_finish.fpt = fpt_save_or_preview;

	if ( ab_finish.inserted == null )
	{
		ab_finish.html = "";
		setTimeout("ab_finish.fpt();", 1000);
	}
	else
	{
		jQuery.ajax({
			url: wgServer+wgScript+"/Vorlage:"+ab_finish.inserted,
			data: "action=render",
			success: function(html)
			{
				ab_finish.html = html.match(/<(div|table)(.|[\n])*<\/\1>/)[0];
				ab_finish.fpt();
			}
	
		});
	}
}

function ab_save()
{
	
	ab_render('Artikel', ab_artname);
	document.getElementById('preview').style.display = 'none';
	document.getElementById('Suffix').style.display = 'none';
	document.getElementById('n-Letzte-.C3.84nderungen').childNodes[0].onclick = ab_recentChanges;
}

function ab_preview()
{
	ab_render('previewRender');
	document.getElementById('preview').style.display = 'block';
	ab_genWindow( null, "edit" );
}

function ab_render( into, artname )
{
	out = document.getElementById('TextboxText').innerHTML;
	
	/* Zuerst die Roten */
	out = out.replace( new RegExp("\\[\\[("+ab_redlinks+")\\|([^\[\]|]+)\\]\\](\S*)", "g"), "<a class='new' href='"+wgServer+wgScript+"/$1'>$2$3</a>");
	out = out.replace( new RegExp("\\[\\[("+ab_redlinks+")\\]\\](\S*)", "g"), "<a class='new' href='"+wgServer+wgScript+"/$1'>$1$2</a>");
	
	out = out.replace(/\[\[([^\[\]|]+)\|([^\[\]|]+)\]\](\S*)/g, "<a href='"+wgServer+wgScript+"/$1'>$2$3</a>");
	out = out.replace(/\[\[([^\[\]|]+)\]\](\S*)/g, "<a href='"+wgServer+wgScript+"/$1'>$1$2</a>");


	sigtime = ab_genSigtime();

	out = out.replace(/<br *?\/?>(.*?)[~]{4}<br *?\/?>/, "<div><pre>$1<a href='"+wgServer+wgScript+"/Kamel:"+wgUserName+"'>Kamel:"+wgUserName+"</a> "+sigtime+"</pre></div>");

	out = out.replace(/\{\{.*\}\}/, ab_finish.html);
	document.getElementById(into).innerHTML = out;
	ab_genWindow( artname );
}

function ab_genSigtime()
{
	datum = new Date();
	hrs = datum.getHours();
	min = datum.getMinutes();
	hrs_str = ( (hrs < 10) ? "0" + hrs : hrs );
	min_str = ( (min < 10) ? "0" + min : min );
	mon = datum.getMonth();
	day = datum.getDate();
        mon_str = [ "Jan.", "Feb.", "Mär.", "Apr.", "Mai", "Jun.", "Jul.", "Aug.", "Sep.", "Okt.", "Nov.", "Dez." ][mon];
        yea = datum.getFullYear();
	return ( hrs_str + ":" + min_str + ", " + day + ". " + mon_str + " " + yea + " (CET)" );
}

function ab_recentChanges()
{
	document.getElementById('n-Letzte-.C3.84nderungen').childNodes[0].onclick = function () { return true; };
	jQuery.ajax({
		url:wgServer+wgScript+"/Spezial:Recentchanges",
		data: {limit: 20, useskin: mw.config.get("skin")},
		success: function(html)
		{
			datum = new Date();
			hrs = datum.getHours();
			min = datum.getMinutes();
			hrs_str = ( (hrs < 10) ? "0" + hrs : hrs );
			min_str = ( (min < 10) ? "0" + min : min );
			chtime = ( hrs_str + ":" + min_str );
			bytes = document.getElementById('TextboxText').innerHTML.length;
			
			sigtime = ab_genSigtime();
			begin = document.getElementById('TextboxText').innerHTML.replace(/<br *\/?>/g, " ").substr(0,150);
			begin = begin.replace(/[~]{4}/, "<a href='"+wgServer+wgScript+"/Kamel:"+wgUserName+"'>Kamel:"+wgUserName+"</a> "+sigtime);

			changes = '(Unterschied | ' + 
				'<a href="/index.php?title="'+ab_entities(ab_artname)+'&amp;action=history" title="'+ab_entities(ab_artname)+'">Versionen</a>) . .    ' + 
				'<abbr class="newpage" title="Neue Seite">Neu</abbr> ' +
				'<a href="/index.php/'+ab_entities(ab_artname)+'" title="'+ab_entities(ab_artname)+'">'+ab_entities(ab_artname)+'</a>; '+chtime +
				'. . <span class="mw-plusminus-pos">(+'+bytes+' Bytes)</span> . . ' + 
				'<a href="/index.php/Kamel:'+ab_entities(wgUserName)+'" title="Kamel:'+ab_entities(wgUserName)+'">'+ab_entities(wgUserName) +
				'</a> (<a href="/index.php/Kamel_Diskussion:'+ab_entities(wgUserName)+'" title="Kamel Diskussion:'+ab_entities(wgUserName)+'">Diskussion</a> ' + 
				'| <a href="/index.php/Spezial:Beitr%C3%A4ge/'+ab_entities(wgUserName)+'" title="Spezial:Beiträge/'+ab_entities(wgUserName)+'">Beiträge</a>) ' +
				'<span class="comment">(Artikelbaukasten-Edit: "'+begin+'...")</span>';
			body_begin = html.indexOf("<body");
			body_begin = html.indexOf(">", body_begin);
			body_end   = html.indexOf("</body>");
			html = html.substring( body_begin+1, body_end );
			html = html.replace( /(<ul class="special">)/, "$1<li>"+changes+"</li>");
			ab_genWindow("Letzte Änderungen", "spezial");

                        content = jQuery(html).find("#bodyContent");
			jQuery("#bodyContent").replaceWith(content);
		}
	
	});
	return false;
}