Benutzer:Codeispoetry/tarja.js

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

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
  • Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Strg+F5
/*global wgPageName, wgTitle, wgUserName, wgUserGroups */
/*global copySlotsRecursively, UrlParameters */

 // Krimskrams
 function isEven(myNumber) {
    return (myNumber % 2 === 0);
 }

 function isOdd(myNumber) {
    return (myNumber % 2 === 1);
 }

 function LeadingZero(x) {
    return (x >= 10 || x < 0 ? "" : "0") + x;
 }

 function hasRight(right) {
   var specialrights = false;
   if (typeof wgUserGroups !== 'object') return(specialrights);
   if (typeof wgUserGroups[0] !== 'string') return(specialrights);
   for (var i = 0 ; i < wgUserGroups.length ; i++) {
       if (wgUserGroups[i] === right) specialrights = true;
   }
   return(specialrights);
 }

 function quickEscape(text, esctype)
 {
   // esctype = 1 -> normal umlaut escapes
   // esctype = 2 -> wikisort umlaut escapes

   text = text.replace(/ß/g, "ss");

   text = text.replace(/Á/g,"A").replace(/á/g,"a")
              .replace(/À/g,"A").replace(/à/g,"a")
              .replace(/Ă/g,"A").replace(/ă/g,"a")
              .replace(/Â/g,"A").replace(/â/g,"a")
              .replace(/Å/g,"A").replace(/å/g,"a")
              .replace(/Ā/g,"A").replace(/ā/g,"a")
              .replace(/Ć/g,"C").replace(/ć/g,"c")
              .replace(/Č/g,"C").replace(/č/g,"c")
              .replace(/Ç/g,"C").replace(/ç/g,"c")
              .replace(/Đ/g,"Dj").replace(/đ/g,"dj")
              .replace(/É/g,"E").replace(/é/g,"e")
              .replace(/È/g,"e").replace(/è/g,"e")
              .replace(/Ë/g,"e").replace(/ë/g,"e")
              .replace(/Ě/g,"e").replace(/ě/g,"e")
              .replace(/Ğ/g,"G").replace(/ğ/g,"g")
              .replace(/Í/g,"I").replace(/í/g,"i")
              .replace(/Ì/g,"I").replace(/ì/g,"i")
              .replace(/İ/g,"I").replace(/ı/g,"i")
              .replace(/Î/g,"I").replace(/î/g,"i")
              .replace(/Ł/g,"L").replace(/ł/g,"l")
              .replace(/Ļ/g,"L").replace(/ļ/g,"l")
              .replace(/Ń/g,"N").replace(/ń/g,"n")
              .replace(/Ñ/g,"N").replace(/ñ/g,"n")
              .replace(/Ň/g,"N").replace(/ň/g,"n")
              .replace(/Ņ/g,"N").replace(/ņ/g,"n")
              .replace(/Ó/g,"O").replace(/ó/g,"o")
              .replace(/Ò/g,"O").replace(/ò/g,"o")
              .replace(/Ø/g,"O").replace(/ø/g,"o")
              .replace(/Õ/g,"O").replace(/õ/g,"o")
              .replace(/Ő/g,"O").replace(/ő/g,"o")
              .replace(/Ř/g,"R").replace(/ř/g,"r")
              .replace(/Ś/g,"S").replace(/ś/g,"s")
              .replace(/Š/g,"S").replace(/š/g,"s")
              .replace(/Ş/g,"S").replace(/ş/g,"s")
              .replace(/Ţ/g,"T").replace(/ţ/g,"t")
              .replace(/Ú/g,"U").replace(/ú/g,"u")
              .replace(/Ù/g,"U").replace(/ù/g,"u")
              .replace(/Ű/g,"U").replace(/ű/g,"u")
              .replace(/Ů/g,"U").replace(/ů/g,"u")
              .replace(/Ý/g,"Y").replace(/ý/g,"y")
              .replace(/Ź/g,"Z").replace(/ź/g,"z")
              .replace(/Ž/g,"Z").replace(/ž/g,"z")
              .replace(/Ż/g,"Z").replace(/ż/g,"z");

   if (esctype == 1) {
      text = text.replace(/Ä/g,"Ae").replace(/ä/g,"ae")
                 .replace(/Ö/g,"Oe").replace(/ö/g,"oe")
                 .replace(/Ü/g,"Ue").replace(/ü/g,"ue")
                 .replace(/Ə/g,"Ae").replace(/ə/g,"ae");
   } else {
      text = text.replace(/Ä/g,"A").replace(/ä/g,"a")
                 .replace(/Ö/g,"O").replace(/ö/g,"o")
                 .replace(/Ü/g,"U").replace(/ü/g,"u")
                 .replace(/Ə/g,"A").replace(/ə/g,"a");
   }
   return(text);
 }

 function tagEscape(text) {
	return(text.replace(/'/g, "%27").replace(/"/g, "%22"));
 }

 function untagEscape(text) {
	return(text.replace(/%27/g, "'").replace(/%22/g, '"'));
 }

 function spaceEscape(text) {
	return(text.replace(/ /g, "+").replace(/_/g, "+"));
 }

var user  = wgUserName;         // username wird automatisch übernommen

 var version = 'P098u';

 // aktuelle Zeit ermitteln
 var jetzt = new Date();
 // recalculate 4 furriners
 var jetztfixed = jetzt.getTime();
 var timezoneshift = timezoneshift || 0;
 jetztfixed += (timezoneshift * 3600 * 1000);
 jetzt.setTime(jetztfixed);
 // fill date variables
 var Monate = ["", "Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"];
 var Monatekurz = ["", "Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"];
 var Jahr = jetzt.getYear();
 if (Jahr < 999)  Jahr += 1900;
 var Monat = jetzt.getMonth() + 1;
 var Tag = jetzt.getDate();
 // fill WP date variables
 var WPDatum = Tag + '._' + Monate[Monat] + '_' + Jahr;
 var WPDatum2 = Jahr + '/' + Monate[Monat] + '/' + Tag;
 var WPDatum3 = Monate[Monat] + ' ' + Jahr;
 var WPDatum4 = Jahr + '-' + LeadingZero(Monat);
 var WPDatum5 = Jahr + LeadingZero(Monat) + '/';
 var refDatum = Tag + '. ' + Monatekurz[Monat] + '. ' + Jahr;
 var refDatumlang = Tag + '. ' + Monate[Monat] + ' ' + Jahr;

 // Lemma-Varianten (work in progress) + redundant zu addLogsLink etc.
 // get page title
 var pagetitle = wgPageName;
 var spagetitle = wgTitle;
 // do real spaces; fix for lemmas with '&'
 var ptitle = pagetitle.replace(/_/g, " ").split('&').join('%26');
 var sptitle = spagetitle.replace(/_/g, " ").split('&').join('%26');
 // do + escaped (" " to "+")
 var pesctitle = spaceEscape(ptitle);
 var spesctitle = spaceEscape(sptitle);
 // lemmatitle for external lookup
 var spesctitlelookup = spesctitle.split('+(')[0];
 // Komma-Lemma für Personen (Klammerzusätze weg etc.)
 var personlemma = spagetitle.split(' (')[0];
 var titlesplit = personlemma.split(' ');
 if (titlesplit.length > 1) {
    personlemma = titlesplit[titlesplit.length-1] + ',';
    for (i=0; i<(titlesplit.length-1); i++)
        personlemma=personlemma + " "+titlesplit[i];
 }

 // get URL parameters (used for page type variables)
 var UrlParameters = new Array ();
 readparams();

 function readparams() {
  var asReadInUrlParameters;
  var asReadInUrlParameter;

  // Get URL parameters
  asReadInUrlParameters = location.search.substring(1, location.search.length).split("&");
  for (i = 0; i < asReadInUrlParameters.length; i++) {
    asReadInUrlParameter = asReadInUrlParameters[i].split("=");
    UrlParameters[decodeURIComponent(asReadInUrlParameter[0])] = decodeURIComponent(asReadInUrlParameter[1]);
  }
 }

 // page type variables: namespaces
 var isArticle       = (mw.config.get('wgNamespaceNumber') == 0);
 var isArticleTalk   = (mw.config.get('wgNamespaceNumber') == 1);
 var isBild          = (wgCanonicalNamespace == "File");
 var isCategory      = (wgCanonicalNamespace == "Category");
 var isTemplate      = (wgCanonicalNamespace == "Template");
 var isGeneric       = false;
 if ((!isBild) && (!isCategory) && (!isTemplate))
     isGeneric  = true;
 var isProject       = (wgCanonicalNamespace == "Project"); /* NR Wikipedia: */
 var isHelp          = (wgCanonicalNamespace == "Help");    /* NR Hilfe */

 // page type variables: namespace == -1
 var isSpecial  = (wgCanonicalNamespace == "Special");
 var isRestore = (isSpecial && (wgCanonicalSpecialPageName == "Undelete"));
 var isContrib = (isSpecial && (wgCanonicalSpecialPageName == "Contributions"));
 var isDelContrib = (isSpecial && (wgCanonicalSpecialPageName == "DeletedContributions"));
 var isWatchlist = (isSpecial && (wgCanonicalSpecialPageName == "Watchlist"));

 // page type variables: namespace == -1
 var isTalk = (!isSpecial && isOdd(mw.config.get('wgNamespaceNumber')));

 // page type variables: other stuff
 var isPHP     = (document.URL.indexOf('index.php') > 0);
 var isDiff    = UrlParameters["diff"];
 var isEdit    = ((UrlParameters['action']=='edit') || (UrlParameters['action']=='submit'));
 var isHistory = (UrlParameters['action']=='history');

 // userpage/name stuff, vor allem für IPs
 var userPageOwner = "";
 if (isContrib || isDelContrib)  {
   if (UrlParameters['target']) userPageOwner = UrlParameters['target'].split('+').join('_');
   else {
        userPageOwner = decodeURIComponent(location.href.substring(location.href.indexOf("/wiki/") + 6)).split('#')[0];
        userPageOwner = userPageOwner.substring(userPageOwner.indexOf("Beiträge/") + 9);
   }
 }

 // page type variables: user & user discussion lumped together
 var isUserpage = ( (wgCanonicalNamespace == "User") || (wgCanonicalNamespace == "User_talk") );
 var isUserMainpage = false;
 if (isUserpage)
    if (wgTitle == wgTitle.split("/")[0]) {
        isUserMainpage = true;
        userPageOwner = wgTitle;
    }

 // handelt es sich um eine IP?
 var isIPUser = false;
 if (userPageOwner != "")
    if (userPageOwner.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/) != null)
       if ((userPageOwner.split(".")[0] > 1) && (userPageOwner.split(".")[0] < 255))
          isIPUser = true;

 // Admin & editor functions
 var adminflag = false;
 if (hasRight("sysop")) adminflag = true;

 var editorflag = false;
 if (hasRight("editor")) editorflag = true;

 // Browserkram
 var userbrowser = "Standard";
 if (navigator.userAgent.indexOf("Opera") > -1)
     userbrowser = "Opera";
 if (navigator.userAgent.indexOf("Safari") > -1)
     userbrowser = "Standard";
 if (navigator.userAgent.indexOf("MSIE") > -1) {
     userbrowser = "IE";
     if (navigator.userAgent.indexOf("MSIE 7") > -1)
         userbrowser = "IE7";
 }

 // force Browserswitches
 if ((userbrowser == "IE") || (userbrowser == "IE7")) {
     godmodelight = false;
     showredundantlinks = false;
 }
 if (userbrowser == "Opera") {
     godmodelight = false;
 }

 //
 // ab hier functions
 //

 // Funktion: importPage()
 // zum Einbinden der Module
 function importPage(seite, lang) { // all languages support
    name='User:'; // international name, works in all wikipedias
    if(!lang) lang = wgContentLanguage;

    // new version
    mw.loader.load('http://' + lang + '.wikipedia.org' + wgScriptPath + '/index.php?title=' + name + seite + '&action=raw&ctype=text/javascript&smaxage=10000');

    return false;
 }

 // Funktion: importPage()
 // zum Einbinden der Module
 function importScriptI18n(seite, lang) { // all languages support
    if(!lang) lang = wgContentLanguage;

    // new version
    mw.loader.load('http://' + lang + '.wikipedia.org' + wgScriptPath + '/index.php?title=' + seite + '&action=raw&ctype=text/javascript&smaxage=10000');

    return false;
 }

var Page = {
	edit: location.href.search(/action=(edit|submit)/) > -1,
	history: UrlParameters.action === 'history',
	special: wgCanonicalNamespace === 'Special',
	article: wgNamespaceNumber === 0,
	file: wgCanonicalNamespace === 'File'
};

var User = {
	admin: wgUserGroups.indexOf('sysop') > -1,
	rollback: wgUserGroups.indexOf('sysop') > -1 || wgUserGroups.indexOf('editor') > -1
};

var Tarja = {

	Defaults: {slotCopy: true, lang: 'de' },

	Modules: {
		slotCopy: true,

		// [[Benutzer:Codeispoetry/rollback.js]]
		Rollback: {page: 'User:Codeispoetry/rollback.js', defaultLoad: true, pageconstraints: {edit: false}, userconstraints: {rollback: true}},

		// [[Benutzer:Codeispoetry/quickbar.js]]
		Quickbar: {page: 'User:Codeispoetry/quickbar.js', defaultLoad: false},

		// [[Benutzer:PDD/helperFunctions.js]]
		helperFunctions: {page: 'User:PDD/helperFunctions.js', defaultLoad: true},

		// [[Benutzer:PDD/eintragen.js]]
		eintragen: {page: 'User:PDD/eintragen.js', defaultLoad: true},

		// [[Benutzer:PDD/alertOnChanges.js]]
		alertOnChanges: {page: 'User:PDD/alertOnChanges.js', defaultLoad: true},

		// [[Benutzer:PDD/wpTextReplace.js]]
		wpTextReplace: {page: 'User:PDD/wpTextReplace.js', defaultLoad: true, pageconstraints: {edit:true}},

		// [[User:BLueFiSH.as/JS/replaceQuoteSigns.js]]
		replaceQuoteSigns: {page: 'User:BLueFiSH.as/JS/replaceQuoteSigns.js', defaultLoad: true, pageconstraints: {edit:true}},

		// [[User:BLueFiSH.as/JS/markup.js]]
		markup: {page: 'User:BLueFiSH.as/JS/markup.js', defaultLoad: true, pageconstraints: {edit:true}},

		// [[User:PDD/convertEntities.js]]
		convertEntities: {page: 'User:PDD/convertEntities.js', defaultLoad: true, pageconstraints: {edit:true}},

		// [[User:Euku/persDaten.js]]
		persDaten: {page: 'User:Euku/persDaten.js', defaultLoad: true, pageconstraints: {edit:true}},

		// [[User:PDD/addEditAndRevertLinks.js]]
		addEditAndRevertLinks: {page: 'User:PDD/addEditAndRevertLinks.js', defaultLoad: false, pageconstraints: {edit:false}},

		// [[User:PDD/addEditAndRevertLinks.js]]
		addEditAndRevertLinksHistory: {page: 'User:PDD/addEditAndRevertLinks.js', defaultLoad: false, pageconstraints: {history:true}},

		// [[User:PDD/addLogsLink.js]]
		addLogsLink: {page: 'User:PDD/addLogsLink.js', defaultLoad: false, pageconstraints: {special:false}},

		// [[User:PDD/modifyCA.js]]
		modifyCA: {page: 'User:PDD/modifyCA.js', defaultLoad: false, pageconstraints: {special:false}},

		// [[User:PDD/changeBeschriftungen.js]] changeBeschriftungen *nach* modifyCA.js (!)
		changeBeschriftungen: {page: 'User:PDD/changeBeschriftungen.js', defaultLoad: false},

		// [[User:Stefan/Sperrstatus.js]]
		Sperrstatus: {page: 'User:Stefan/Sperrstatus.js', defaultLoad: false},

		// [[User:PDD/showRedundantLinks.js]]
		showRedundantLinks: {page: 'User:PDD/showRedundantLinks.js', defaultLoad: false, pageconstraints: {special:false}},

		// [[User:Olliminatore/unsigned.js]]
		unsigned: {page: 'User:Olliminatore/unsigned.js', defaultLoad: false, pageconstraints: {article: false, edit: true}},

		// [[:en:User:Zocky/SearchBox.js]]
		searchBox: {page: 'User:Zocky/SearchBox.js', lang:'en', defaultLoad: false, pageconstraints: {edit: true}},

		// [[User:Codeispoetry/admin.js]]
		admin: {page: 'User:Codeispoetry/admin.js', defaultLoad: true, userconstraints: {admin: true}},

		// [[:en:User:Olliminatore/shCore.js]]
		jsHighlight: {page: 'User:Olliminatore/shCore.js', lang:'en', defaultLoad: false},

		// [[User:Codeispoetry/dellink-nc.js]]
		nowCommons: {page: 'User:Codeispoetry/dellink-nc.js', defaultLoad: true, pageconstraints: {file:true}},

		// [[User:Codeispoetry/checkDupes.js]]
		checkDupes: {page: 'User:Codeispoetry/checkDupes.js', defaultLoad: false, pageconstraints: {file:true}},

		// [[User:Euku/markErledigt.js]]
		markErledigt: {page: 'User:Euku/markErledigt.js', defaultLoad: false},

		// [[Benutzer:Codeispoetry/lk.js]]
		LK: { page: 'User:Codeispoetry/lk.js', defaultLoad: false},

		// [[Benutzer:Codeispoetry/supportteam.js]]
		supportTeam: { page: 'User:Codeispoetry/supportteam.js', defaultLoad: false},

		// Contribsrange direkt aus dem en-Gadget.
		rangeContribs: { page: 'MediaWiki:Gadget-contribsrange.js', lang: 'en', defaultLoad: false, pageconstraints: {special: true} },

		// [[Benutzer:Codeispoetry/replaceCommonsLinks.js]]
		replaceCommonsLinks: { page: 'Benutzer:Codeispoetry/replaceCommonsLinks.js', defaultLoad: false, pageconstraints: {edit: true} },

		// [[Benutzer:Codeispoetry/flagtab.js]]
		flagTab: { page: 'Benutzer:Codeispoetry/flagtab.js', defaultLoad: true, pageconstraints: {edit: false, special: false, history: false} },

		// [[Benutzer:Codeispoetry/regengine.js]]
		regEngine: { page: 'Benutzer:Codeispoetry/regengine.js', defaultLoad: false, pageconstraints: {edit: true} }
	},

	init: function () {
		Tarja = copySlotsRecursively(Tarja, UserCfg.Tarja);

		for (var module in this.Modules) {
			if (!this.Modules.hasOwnProperty(module) || typeof this.Modules[module] !== 'object')
				continue; // prototype spam

			var cur_mod = this.Modules[module];
			if (UserCfg[module] === false)
				continue; // User doesn't want this module

			if (typeof UserCfg[module] !== 'object' && UserCfg[module] !== true && cur_mod.defaultLoad !== true )
				continue; // no defaultLoad module

			var fullfilled = true;

			for (var constraint in cur_mod.pageconstraints) {
				if (Page[constraint] !== cur_mod.pageconstraints[constraint])
					fullfilled = false; // Nicht die Seite, die das Modul braucht
			}

			cur_mod.userconstraints = cur_mod.userconstraints || {};
			for (constraint in cur_mod.userconstraints) {
				if (User[constraint] !== cur_mod.userconstraints[constraint])
					fullfilled = false; // Nicht der User, den das Modul braucht
			}

			if (fullfilled === true) {
				importScriptI18n(cur_mod.page, cur_mod.lang || this.Defaults.lang);
			}

		}
	}
};

Tarja.init();