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

aus Kamelopedia, der wüsten Enzyklopädie
Zur Navigation springen Zur Suche springen
(vielleicht geht's so?)
(an aktuelle LÄ angepasst)
 
(35 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 8: Zeile 8:
 
var ab_redlinks = "";
 
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 18: 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.replace(/&lt;br( |&nbsp;)*\/?&gt;/g, "<br/>").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 71: 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 84: Zeile 95:
 
{
 
{
 
lastLabelObj = ab_opts[labelId];
 
lastLabelObj = ab_opts[labelId];
 +
 
label = lastLabelObj.options[optionId].next;
 
label = lastLabelObj.options[optionId].next;
  
Zeile 113: 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 205: 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.match(/<(div|table)(.|[\n])*<\/\1>/)[0];
+
ab_finish.html = html.match(/<(div|table)(.|[\n])*<\/\1>/)[0];
 
ab_finish.fpt();
 
ab_finish.fpt();
 
}
 
}
Zeile 238: Zeile 266:
 
 
 
/* Zuerst die Roten */
 
/* Zuerst die Roten */
out = out.replace( new RegExp("\\[\\[("+ab_redlinks+")\\|([^\[\]|]+)\\]\\]", "g"), "<a class='new' href='"+wgServer+wgScript+"/$1'>$2</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+")\\]\\]", "g"), "<a class='new' href='"+wgServer+wgScript+"/$1'>$1</a>");
+
out = out.replace( new RegExp("\\[\\[("+ab_redlinks+")\\]\\](\S*)", "g"), "<a class='new' href='"+wgServer+wgScript+"/$1'>$1$2</a>");
 
 
out = out.replace(/\[\[([^\[\]|]+)\|([^\[\]|]+)\]\]/g, "<a href='"+wgServer+wgScript+"/$1'>$2</a>");
+
out = out.replace(/\[\[([^\[\]|]+)\|([^\[\]|]+)\]\](\S*)/g, "<a href='"+wgServer+wgScript+"/$1'>$2$3</a>");
alert(out);
+
out = out.replace(/\[\[([^\[\]|]+)\]\](\S*)/g, "<a href='"+wgServer+wgScript+"/$1'>$1$2</a>");
out = out.replace(/\[\[([^\[\]|]+)\]\]/g, "<a href='"+wgServer+wgScript+"/$1'>$1</a>");
+
 
alert(out);
 
  
 
sigtime = ab_genSigtime();
 
sigtime = ab_genSigtime();
Zeile 272: 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?limit=20", {
+
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();
Zeile 288: Zeile 316:
 
begin = begin.replace(/[~]{4}/, "<a href='"+wgServer+wgScript+"/Kamel:"+wgUserName+"'>Kamel:"+wgUserName+"</a> "+sigtime);
 
begin = begin.replace(/[~]{4}/, "<a href='"+wgServer+wgScript+"/Kamel:"+wgUserName+"'>Kamel:"+wgUserName+"</a> "+sigtime);
  
changes = '(<a href="/index.php?title="'+escape(ab_artname)+'&amp;diff=0" title="'+escape(ab_artname)+'" tabindex="1">Unterschied</a>)' +  
+
changes = '(Unterschied | ' +
' (<a href="/index.php?title="'+escape(ab_artname)+'&amp;action=history" title="'+escape(ab_artname)+'">Versionen</a>) . .    ' +  
+
'<a href="/index.php?title="'+ab_entities(ab_artname)+'&amp;action=history" title="'+ab_entities(ab_artname)+'">Versionen</a>) . .    ' +  
'<a href="/index.php/'+escape(ab_artname)+'" title="'+escape(ab_artname)+'">'+escape(ab_artname)+'</a>; '+chtime +
+
'<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: "'+begin+'...")</span>';
 
'<span class="comment">(Artikelbaukasten-Edit: "'+begin+'...")</span>';
html = transport.responseText;
 
 
body_begin = html.indexOf("<body");
 
body_begin = html.indexOf("<body");
 
body_begin = html.indexOf(">", body_begin);
 
body_begin = html.indexOf(">", body_begin);
Zeile 303: Zeile 331:
 
html = html.replace( /(<ul class="special">)/, "$1<li>"+changes+"</li>");
 
html = html.replace( /(<ul class="special">)/, "$1<li>"+changes+"</li>");
 
ab_genWindow("Letzte Änderungen", "spezial");
 
ab_genWindow("Letzte Änderungen", "spezial");
document.body.innerHTML = html;
+
 
 +
                        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;
}