User:Perhelion/global.js

From Meta, a Wikimedia project coordination wiki

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
/* global jQuery, mediaWiki */
/* eslint one-var:0, vars-on-top:0, camelcase:0, no-alert:0, no-console:0, no-bitwise:0, indent:0, curly:0, */
/* eslint space-in-parens:0, computed-property-spacing:0, array-bracket-spacing:0, quotes:0 */ // extends:wikimedia
/* jshint bitwise:false, curly:false, eqeqeq:true, laxbreak:true */
// <nowiki>
(function ($, mw) {
'use strict';
var project = mw.config.get("wgDBname"),
	ns = mw.config.get("wgNamespaceNumber"),
	pn = mw.config.get("wgPageName"),
	ti = mw.config.get("wgTitle"),
	ac = mw.config.get("wgAction"),
	cpn = mw.config.get("wgCanonicalSpecialPageName"),
	cns = mw.config.get("wgCanonicalNamespace");
cns = cns ? ":" + cns + ":" : ":";
ti = (ns === -1 && cpn) ? cpn + "/" + ti.replace(/^[^/]+?\//, "") : ti; // small version of [[:de:User:Schnark/js/specialinterwiki.js]]

$.when(mw.loader.using("mediawiki.util"), $.ready).then(function () {
	// $( '#pt-watchlist a' ).text( 'BEO' ); // shorten Watchlist field
	// $('#pt-betafeatures a').text('ß'); // shorten Beta field
	// $('#pt-logout a').text('X'); // shorten logout
	// $( '#pt-mytalk a' ).text( 'Diss' ); // shorten mytalk
	if (ns !== -1) { // does specialinterwiki
		var target = $("#p-wikibase-otherprojects")[0] || $("#p-lang")[0] || $("#p-tb")[0] || $("#p-cactions")[0];
		if (!target) return;
		if (project !== "commonswiki" || ns === 6) {
			/** subPagesLink: Adds a link to subpages of current page from Commons **/
			if ($.inArray(ns, [-1, 14]) === -1 && !$("#t-subpages").length)
				// mw.util.addPortletLink( 'p-cactions', mw.util.getUrl( 'Special:Prefixindex/' + pn + '/' ), 'Unterseiten', 'ca-subpages','','' ); // #t-info
				mw.util.addPortletLink("p-tb", mw.util.getUrl("Special:Prefixindex/" + pn + "/"), "Unterseiten↓", "t-subpages", "subpages", "", "#t-info"); //
			if (ns !== 6) {
				mw.util.addPortletLink(target.id, mw.util.getUrl("c" + cns + ti), "➔Com", "my-Commons-page", "Commons",
					"", $("#" + target.id + " li").first());
			}
		} else {
			setTimeout(function () { // Hack: make more visible
				$("#t-subpages a").text(function (i, t) {
					t += "⇓";
					return t;
				});
			}, 200);
		}

		if (project !== "dewiki") {
			mw.util.addPortletLink(target.id, mw.util.getUrl(":de" + cns + ti), "➔w:De", "my-de-page", "Deutsche Wikipedia",
				"", $("#" + target.id + " li").first());
		}
		if (project !== "enwiki") {
			mw.util.addPortletLink(target.id, mw.util.getUrl(":en" + cns + ti), "➔w:En", "my-en-page", "English Wikipedia",
				"", $("#" + target.id + " li").first());
		}
	} else if (cpn === "Watchlist") { // Watchlist expand
		var cont = $("#mw-content-text"),
			jQsel = "table.mw-collapsible span.mw-collapsible-toggle.mw-collapsible-arrow", // .mw-enhancedchanges-arrow.mw-enhancedchanges-arrow-space
			wlToggleArrow = cont.find(jQsel).first().addClass("mw-collapsible-toggle-collapsed");
		cont.find(".mw-changeslist h4").append(wlToggleArrow.clone().css("float", "left").off("click").on("click", function () {
			$(this).parent().next().find(jQsel).click();
		}));
	}

	/* Add a toggle for debug mode to the sidebar */ // [[File:User:Perhelion/DebugModeToggle.js]] ( workaround for [[phab:T35355]] )
	mw.loader.load("//meta.wikimedia.org/w/index.php?title=User:Perhelion/DebugModeToggle.js&action=raw&ctype=text/javascript");

	/* Mark problematic images on Wikipedia */ // [[File:User:Perhelion/problemImages.js]] ( workaround for [[phab:T35355]] )
	mw.loader.load("//meta.wikimedia.org/w/index.php?title=User:Perhelion/problemImages.js&action=raw&ctype=text/javascript");

});

// mw.loader.load('//www.mediawiki.org/w/index.php?title=User:PerfektesChaos/js/paneMarker/r.js&action=raw&ctype=text/javascript');
if (!(mw.libs.paneMarker instanceof Object) || !(mw.libs.paneMarker.opt instanceof Object)) {
	mw.libs.paneMarker = {
		opt: {
			// favicon: '',
			leave: false,
			shortcut: false
		}
	};
}
if (project === "enwiki")
	mw.libs.paneMarker.opt.favicon = "//upload.wikimedia.org/wikipedia/commons/f/fb/Favicon_wikipedia_en.gif";
else if (project === "dewiki")
	mw.libs.paneMarker.opt.favicon = "//upload.wikimedia.org/wikipedia/commons/6/6f/Favicon_wikipedia_de.gif";

/* * Check if in edit mode and that the required modules are available. Then, customize... */
if (mw.config.get("wgPageContentModel") === "wikitext" && /^(edit|submit)$/.test(ac) && !mw.config.get("wgIsArticle")) {
	
// Move Edittools direct below the edit field.
	if (project !== "commonswiki")
		mw.loader.load("//meta.wikimedia.org/w/index.php?title=User:Perhelion/EdittoolsJustBelow.js&action=raw&ctype=text/javascript");

	if (ns % 2 === 1 || ns === 4) {
		mw.loader.load(// sMirC emoticons set for the WikiEditor ( also for LQT )
			"//meta.wikimedia.org/w/index.php?title=User:Perhelion/WikiEditorEmoticons.js&action=raw&ctype=text/javascript");

		mw.loader.load(// Automatische Unterschrift, Beschreibung [[w:de:Benutzer:Perhelion/signing]]
			"//meta.wikimedia.org/w/index.php?title=User:Perhelion/signing.js&action=raw&ctype=text/javascript");
		$(document).on("loadWikiScript", function (e, name, threadSign) {
			if (name === "Perhelion/signing.js") {
				threadSign.config = {
					sigText: "<span style=\"white-space:nowrap;color:#456;\">~~~ <small>~~~~~</small></span>",
					autoSalut: 1,
					dSum: "aw"
				};
			}
		});
	}

	mw.loader.load(// Automatisch den richtigen Abschnitt im Zusammenfassungs-Kommentar, Beschreibung [[:de:Benutzer:Perhelion/sectionSummary]]
		"//de.wikipedia.org/w/index.php?title=User:Perhelion/sectionSummary.js&action=raw&ctype=text/javascript");

	mw.loader.load(
		"//meta.wikimedia.org/w/index.php?title=User:Bawolff/EditConflictAutoMerge.js&action=raw&ctype=text/javascript");

	mw.loader.load(// MARK SEMI-AUTOMATICALLY UNSIGNED COMMENTS ON TALK PAGES
		"//de.wikipedia.org/w/index.php?title=User:Lustiger seth/unsigned.js&action=raw&ctype=text/javascript");

	mw.loader.load(// Teaches "Search and Replace" box in "Advanced" edit toolbar to remember its content.
		"//en.wikipedia.org/w/index.php?title=User:%D7%A7%D7%99%D7%A4%D7%95%D7%93%D7%A0%D7%97%D7%A9/searchPersistence.js&action=raw&ctype=text/javascript");

	/*	// TEST FAIL on Commons and Wikt ( 2016-04-21 )
	if ( project !== "commonswiki" )
	mw.loader.load( // [[w:de:Benutzer:PerfektesChaos/js/editToolStrIns]]
	"//www.mediawiki.org/w/index.php?title=User:PerfektesChaos/js/editToolStrIns.js&action=raw&ctype=text/javascript" ); */

	// [[w:de:Benutzer:PerfektesChaos/js/WikiSyntaxTextMod]]
	if (!mw.libs.WikiSyntaxTextMod) mw.libs.WikiSyntaxTextMod = {};
	mw.libs.WikiSyntaxTextMod.config = {
		diffPage: 0,
		format: {
			galleryIndent: 1
		},
		page: {
			oldid: true,
			include: [":" + project + ":.*"],
			// exclude : [":" + project + ":.*\.(js|css)"],
			support: [":" + project + ":.*"]
		},
		mod: {
			tested: true,
			plain: [
				["(\\n|\\| )\\| -([|\\s]*)", "$1| –$2"], // TEST: empty table-cell
				["(\\n[^\\!]+\\S)\\!\\!(\\s)", "$1\u203C$2"],
				["\\?\\?", "\u2047"],
				["\\?\\!", "\u2048"],
				["\\!\\?", "\u2049"],
				// IEC-prefixes, no consensus
				// [ '(&nbsp;| )kB(?=[) ])', '$1KiB' ],
				["(&nbsp;| )[Gg]B(?=[) ])", "$1GiB"],
				["\\( ", " ("], // Klammer ohne Leerzeichen folgend
				["\\bprettytable\\b", "wikitable"], // Old table CSS-class
				["([^.])\\.\\.\\.([^.])", "$1\u2026$2"]// Ellipsis (aware on bibcode, need template expression)
			],
			hook: function (ad) {
				if (!ad)
					return false;
				/* if ( ns % 2 === 1 || $.inArray( ns, [2, 4] ) !== -1 )
				ad = ad.replace( /'' <small>&( #160|nbsp );( \d|~ )/g, "'' <small>\u00A0$2" );*/
				// Convert {cite journal... author parameters for de {Literatur (works only on sorted parameters)
				if (project === "dewiki") {
					ad = ad.replace(
						/(\{\{Literatur\s?\|[^\n}]*Autor=) ?([-\w., ]+)\s?(?:([^\n}]*)\| ?first1= ?([-\w. ]*)|([^\n}]*)\| ?last(\d+)=([-\w. ]*)([^\n}]*)\| ?first\6=([-\w. ]*))/g,
						function (m, b, a, e, a1, p5, c, p6, p7, p8) {
							if (a1)
								a = $.trim(a1) + " " + $.trim(a);
							p6 = $.trim(p6);
							p8 = $.trim(p8);
							e = e || "";
							if (p6 || p8)
								a += ", " + p8 + " " + p6;
							if (p5)
								e += p5;
							if (p7)
								e += p7;
							return b + a + " " + e;
						});
				}
				return ad
					.replace(/([^\n=])(\n==+) */g, "$1\n$2 ") // Blank line before heading
					.replace(/<div style=["']clear:both;?["']><\/div>/g, "{{" + ((project === "dewiki") ? "Absatz" : "-") + "}}") // Avoid HTML ( according to standard format )
				;
			}
		},
		load: {
			inhibit: true,
			after: function () { // only for mw.user.options.get( 'usebetatoolbar' )
				$.when(mw.loader.using([ "ext.wikiEditor"]), $.ready).then(function () {
					var mn = "user:PerfektesChaos/WikiSyntaxTextMod",
						v = mw.loader.getVersion(mn);
					if (!v || !mw.libs.WikiSyntaxTextMod.api.loaded)
						v += (" – " + mw.loader.getState(mn));
					mw.notify(mn + " " + v);
					$("#wpTextbox1").wikiEditor("addToToolbar", {
						section: "main",
						group: "format",
						tools: {
							syntax: {
								label: "WSTM",
								type: "button",
								icon: "//upload.wikimedia.org/wikipedia/commons/thumb/2/2d/Nuvola_web_broom.svg/22px-Nuvola_web_broom.svg.png",
								action: {
									type: "callback",
									execute: mw.libs.WikiSyntaxTextMod.api.run
								}
							}
						}
					});
				});
			}
		},
		warn: {
			url: [],
			attribute: [["class", "\\bprettytable\\b"]],
			entity: ["shy", "thinsp", "#8209"],
			property: ["align", "bgcolor", "border", "clear", "compact", "height", "valign"],
			tag: ["big", "blockquote", "center", "font", "h1", "samp", "var"],
			templateParamDup: true
		}
	};

	$(document).trigger("loadWSTMConfig", ["WSTM", mw.libs.WikiSyntaxTextMod]);

	if (project === "dewiki") // config
		mw.loader.load("//de.wikipedia.org/w/index.php?title=Benutzer:Perhelion/Wikisyntax-config.js&action=raw&ctype=text/javascript");
	else if (project === "commonswiki") // config
		mw.loader.load("//commons.wikimedia.org/w/index.php?title=User:Perhelion/WSTM-cfg.js&action=raw&ctype=text/javascript");
	mw.loader.load("//en.wikipedia.org/w/index.php?title=User:PerfektesChaos/js/WikiSyntaxTextMod/d.js&action=raw&ctype=text/javascript", "text/javascript", false);
	// END WSTM load
// END edit modus or not view modus
} else {
	// Number of observers
	mw.loader.load("//meta.wikimedia.org/w/index.php?title=User:Perhelion/viewerInfo.js&action=raw&ctype=text/javascript");
	// MediaViewer off
	// mw.hook( 'BeforePageDisplay' ).remove( 'ext.visualEditor.viewPageTarget.init' ); // not working
	mw.config.set("wgMediaViewerOnClick", false);

	/* Mark any text for article exists check */ // [[File:Perhelion_checkTitleExists.js]]
	mw.loader.load("//meta.wikimedia.org/w/index.php?title=User:Perhelion/checkTitleExists.js&action=raw&ctype=text/javascript");
}
// </nowiki>

// This tool can tag pages with a few clicks (which is much faster than editing the whole page per Hand).
// by [[m:user:Hoo man]] <//meta.wikimedia.org/wiki/User:Hoo_man/Scripts/Tagger>
// still only files
// if (ns === 6) mw.loader.load("//meta.wikimedia.org/w/index.php?title=User:Hoo_man/tagger.js&action=raw&ctype=text/javascript");
if (ns === 2 || ns === 3) {
	// User-info [[File:Perhelion/userstatus.js]]
	if (!mw.config.get("wgArticleId") || ac === "view")
		mw.loader.load("//meta.wikimedia.org/w/index.php?title=User:Perhelion/userstatus.js&action=raw&ctype=text/javascript");
}

// [[File:User:He7d3r/Tools/SidebarSlider.js]]
// mw.loader.load('//meta.wikimedia.org/w/index.php?title=User:He7d3r/Tools/SidebarSlider.js&action=raw&ctype=text/javascript'); needs mouseover effect and default behavior option

// Skriptsammlung Fliegelflagel, [[:de:Benutzer:Schnark/js/fliegelflagel]]
mw.hook("userjs.schnark-fliegelflagel.userdefine").fire({
	version: 1.1,
	//profile: undefined,
	additional: {
		pageLinkHelper: {
			scripts: "[[w:en:User:PerfektesChaos/js/pageLinkHelper/r.js]]",
			title: "pageLinkHelper@PerfektesChaos",
			description: "Drei Hilfsfunktionen für Seitenlinks: Difflink im Wikilink-Format, Leeren des Server-Caches, Weiterleitungsseiten in Browser-History",
			defaultEnabled: 4,
			category: "read"
		},
		fragmentAnchors: {
			scripts: "[[w:en:User:PerfektesChaos/js/fragmentAnchors/r.js]]",
			title: "fragmentAnchors@PerfektesChaos",
			description: "Shows HTML-ancors on documents",
			defaultEnabled: 4,
			category: "read"
		},
		paneMarker: {
			scripts: "[[mw:User:PerfektesChaos/js/paneMarker/r.js]]",
			title: "paneMarker@PerfektesChaos",
			description: "Beim Editieren einer Seite farbigen Tabulator-Icon anzeigen",
			docpage: "//de.wikipedia.org/wiki/User:PerfektesChaos/js/paneMarker",
			category: "edit",
			status: "stable",
			defaultEnabled: 4
		},
		autoFormatter: {
			scripts: "[[w:de:Benutzer:TMg/autoFormatter.js]]",
			title: "autoFormatter@TMg",
			description: "Halbautomatische Behebung von Wikifizierungs-Fehlern",
			category: "edit",
			status: "beta",
			defaultEnabled: 3,
			only: function (ns, action) {
				return action === "edit";
			}
		}
	},
	config: {
		autoFormatter: function () {
			mw.user.options.set('userjs-tmg-autoFormatter', '1');
			window.autoFormatShortYearRanges = false;
			window.autoFormatReplacements = mw.libs.WikiSyntaxTextMod.config.mod.plain
				.map(function (v/* , i*/) {
					return [new RegExp(v[0], "g"), v[1]];
				});
			window.autoFormatReplacements.push(
				[/#[0-9A-F]{6}/ig, function (s) { // round hex color to shorthand
					var r = "#", i;
					for (i = 0; i < 6; i += 2) {
						var c = s[1 + i];
						if (Math.abs(("0x" + c << 0) - ("0x" + s[2 + i] << 0)) < 3)
							r += c;
						else
							break;
					}
					return (r.length === 4) ? r : s;
				}],
				// [/^(==+) *\{\{(.+)\}\} *\1 *$/gm, "$1{{$2}}$1"], // trim headlines with template
				[/(bibcode=[^=|]+)\u2026([^.])/g, "$1...$2"]// remove ellipsis
				//	[ /#[0-9A-F]{3}[\s;]/ig, function ( m ) { m = ( m ) ? m.toUpperCase() : ''; return m; } ]
			);
		}
	}
});
// [[Benutzer:Schnark/js/fliegelflagel.js/define.js]]
mw.loader.load("//de.wikipedia.org/w/index.php?title=Benutzer:Schnark/js/fliegelflagel.js/define.js&action=raw&ctype=text/javascript");
mw.loader.load("//de.wikipedia.org/w/index.php?title=Benutzer:Schnark/js/fliegelflagel.js/load.js&action=raw&ctype=text/javascript");
// Fliegelflagel Ende

/* Browser title truncation script, feel free to use */
var ri = mw.config.get("wgCurRevisionId"),
	nsPref = mw.config.get("wgFormattedNamespaces")[ns],
	talk = ":";
if (ns) {
	if (ns !== 1 && ns % 2 === 1) {
		talk = "-D" + talk;
		ns--;
	} // Diss
	if (ns === 14) nsPref = nsPref.slice(0, 3); // Category
	else nsPref = nsPref.charAt(0);
} else { talk = ""; }
if (ac === "edit" && ri)
	nsPref = "e-" + nsPref;
document.title = nsPref + talk + ti;
// End title truncation
}( jQuery, mediaWiki ) );
// EOF