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

aus Kamelopedia, der wüsten Enzyklopädie
Zur Navigation springen Zur Suche springen
(Vector fix, Teil umgstellt auf jQuery)
(an aktuelle LÄ angepasst)
 
(12 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 74: Zeile 79:
 
if ( document.getElementById("versteckdas") != null )
 
if ( document.getElementById("versteckdas") != null )
 
document.getElementById("versteckdas").style.display = "none";
 
document.getElementById("versteckdas").style.display = "none";
 +
 +
        jQuery("#empfohlene-seite-box").hide(0);
  
 
/* jetzt Spezial:Artikelbaukasten vortäuschen */
 
/* jetzt Spezial:Artikelbaukasten vortäuschen */
Zeile 124: Zeile 131:
 
$edittab = jQuery("#ca-edit");
 
$edittab = jQuery("#ca-edit");
 
$discusstab = jQuery("#ca-talk");
 
$discusstab = jQuery("#ca-talk");
 +
        $historytab = jQuery("#ca-history");
 +
        $daumentab = jQuery("#ca-hw");
  
 
switch ( type )
 
switch ( type )
Zeile 131: Zeile 140:
 
$edittab.addClass('selected');
 
$edittab.addClass('selected');
 
                         $viewtab.removeClass('selected');
 
                         $viewtab.removeClass('selected');
 +
$discusstab.addClass('new');
 +
                        $historytab.show(0);
 +
$viewtab.show(0);
 
$edittab.show(0);
 
$edittab.show(0);
 +
                        $daumentab.show(0);
 
$discusstab.show(0);
 
$discusstab.show(0);
 
break;
 
break;
Zeile 137: Zeile 150:
 
case "spezial":
 
case "spezial":
 
$maintab.find("a").text('Spezial');
 
$maintab.find("a").text('Spezial');
 +
$viewtab.hide(0);
 
$edittab.hide(0);
 
$edittab.hide(0);
 +
                        $historytab.hide(0);
 
$discusstab.hide(0);
 
$discusstab.hide(0);
 +
                        $daumentab.hide(0);
 
break;
 
break;
 
 
Zeile 145: Zeile 161:
 
$edittab.removeClass('selected');
 
$edittab.removeClass('selected');
 
                         $viewtab.addClass('selected');
 
                         $viewtab.addClass('selected');
 +
$discusstab.addClass('new');
 +
$viewtab.show(0);
 
$edittab.show(0);
 
$edittab.show(0);
 
$discusstab.show(0);
 
$discusstab.show(0);
 +
                        $historytab.show(0);
 +
                        $daumentab.show(0);
 
break;
 
break;
  
Zeile 281: Zeile 301:
 
jQuery.ajax({
 
jQuery.ajax({
 
url:wgServer+wgScript+"/Spezial:Recentchanges",
 
url:wgServer+wgScript+"/Spezial:Recentchanges",
data: {limit: 20, useskin: skin},
+
data: {limit: 20, useskin: mw.config.get("skin")},
 
success: function(html)
 
success: function(html)
 
{
 
{
Zeile 296: 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>';
 
body_begin = html.indexOf("<body");
 
body_begin = html.indexOf("<body");
Zeile 310: 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;
}