Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
//Dokumentation unter [[Benutzer:Schnark/js/wochentag]] <nowiki>
/*global mediaWiki*/
(function ($, mw) {
"use strict";
var config = {
	beo: true, //auf Beobachtungsliste ausführen?
	rc: false, //auf Letzen Änderungen etc. ausführen?
	seiten: mw.config.get('wgDBname') === 'dewiki' ? //auf diesen Seiten ausführen
		['Wikipedia:Fragen_zur_Wikipedia', 'Wikipedia:Auskunft'] :
		[]
}, parserDefaults, parserExtends = {};

parserDefaults = {
	re: /^\s*(\d+)\.?\s*(.*?)\s*((?:\d{4})?)\s*$/,
	order: [1, 2, 3],
	parseDay: Number,
	parseMonth: function (month) {
		return Number(month.replace(/\D/g, '')) - 1;
	},
	parseYear: function parseYear (year, month) {
		if (year) {
			return Number(year);
		}
		var now = new Date();
		if (month > now.getMonth()) {
			return now.getFullYear() - 1;
		} else {
			return now.getFullYear();
		}
	},
	format: '$1, $2'
};

parserExtends.de = {
	parseMonth: function (monat) {
		monat = monat.toLowerCase();
		if (monat.indexOf('jan') === 0) {
			return 0;
		}
		if (monat.indexOf('feb') === 0) {
			return 1;
		}
		if (monat.indexOf('mär') === 0) {
			return 2;
		}
		if (monat.indexOf('apr') === 0) {
			return 3;
		}
		if (monat.indexOf('mai') === 0) {
			return 4;
		}
		if (monat.indexOf('jun') === 0) {
			return 5;
		}
		if (monat.indexOf('jul') === 0) {
			return 6;
		}
		if (monat.indexOf('aug') === 0) {
			return 7;
		}
		if (monat.indexOf('sep') === 0) {
			return 8;
		}
		if (monat.indexOf('okt') === 0) {
			return 9;
		}
		if (monat.indexOf('nov') === 0) {
			return 10;
		}
		if (monat.indexOf('dez') === 0) {
			return 11;
		}
		return Number(monat.replace(/\D/g, '')) - 1;
	},
	days: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa']
};

parserExtends.en = {
	parseMonth: function (month) {
		month = month.toLowerCase();
		if (month.indexOf('jan') === 0) {
			return 0;
		}
		if (month.indexOf('feb') === 0) {
			return 1;
		}
		if (month.indexOf('mar') === 0) {
			return 2;
		}
		if (month.indexOf('apr') === 0) {
			return 3;
		}
		if (month.indexOf('may') === 0) {
			return 4;
		}
		if (month.indexOf('jun') === 0) {
			return 5;
		}
		if (month.indexOf('jul') === 0) {
			return 6;
		}
		if (month.indexOf('aug') === 0) {
			return 7;
		}
		if (month.indexOf('sep') === 0) {
			return 8;
		}
		if (month.indexOf('oct') === 0) {
			return 9;
		}
		if (month.indexOf('nov') === 0) {
			return 10;
		}
		if (month.indexOf('dec') === 0) {
			return 11;
		}
		return Number(month.replace(/\D/g, '')) - 1;
	},
	days: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']
};

function parseDate (date, parserData) {
	var match = parserData.re.exec(date),
		day, month, year;
	if (!match) {
		return false;
	}
	day = parserData.parseDay(match[parserData.order[0]]);
	month = parserData.parseMonth(match[parserData.order[1]]);
	if (month < 0 || month > 11) {
		return false;
	}
	year = parserData.parseYear(match[parserData.order[2]], month);
	return new Date(year, month, day);
}

function formatDate (dateString, parserData) {
	var date = parseDate(dateString, parserData);
	if (date) {
		return parserData.format
			.replace(/\$1/, parserData.days[date.getDay()])
			.replace(/\$2/, dateString);
	}
}

function datumMitTag (datum) {
	var parserData = $.extend({}, parserDefaults, parserExtends[mw.config.get('wgPageContentLanguage')]);
	if (!parserData.days) {
		return;
	}
	return formatDate(datum, parserData);
}

//fügt einen Wochentag vor ein Datum ein
function einfuegen () {
	/*jshint validthis: true*///Funktion für $().each mit explizitem Kontext
	var datum = datumMitTag(this.innerHTML);
	if (datum) {
		this.innerHTML = datum;
	}
}

//Bearbeitet die Beobachtungsliste/...
function beobachtungsliste ($content) {
	$content.find('h4').each(einfuegen);
}
//Bearbeitet die aktuelle Seite
function seite ($content) {
	$content.find('#toc .toclevel-1 > a .toctext').each(einfuegen);
	$content.find('h1 .mw-headline').each(einfuegen);
}

function run ($content) {
	var special = mw.config.get('wgCanonicalSpecialPageName');
	if (
		(special === 'Watchlist' && config.beo) ||
		(special === 'Recentchanges' && config.rc) ||
		(special === 'Recentchangeslinked' && config.rc)
	) {
		beobachtungsliste($content);
	} else if (config.seiten.indexOf(mw.config.get('wgPageName')) !== -1) {
		seite($content);
	}
}

mw.hook('userjs.load-script.wochentag').fire(config);
mw.hook('wikipage.content').add(run);

})(jQuery, mediaWiki);
//</nowiki>