Benutzer:Prüm/monobook.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
(function (mw, $) {
	"use strict";
	
	//Skriptsammlung Fliegelflagel, [[Benutzer:Schnark/js/fliegelflagel]]
	mw.hook('userjs.schnark-fliegelflagel.userdefine').fire({
		version: 1.0,
		profile: undefined,
		additional: {
		},
		config: {
		}
	});

	//[[Benutzer:Schnark/js/fliegelflagel.js/define.js]]
	mw.loader.load('https://de.wikipedia.org/w/index.php?title=Benutzer:Schnark/js/fliegelflagel.js/define.js&action=raw&ctype=text/javascript');
	mw.loader.load('https://de.wikipedia.org/w/index.php?title=Benutzer:Schnark/js/fliegelflagel.js/load.js&action=raw&ctype=text/javascript');
	//Fliegelflagel Ende

	/**
	 * showRedundantLinks adapted from dbenzhuser (de:Benutzer:Dbenzhuser)
	 *
	 * Alle Wikilinks innerhalb des Artikels werden gesammelt.
	 * Anschließend werden sie in der Liste angezeigt und mehrfache Links im
	 * Artikeltext markiert.
	 */
	mw.loader.using([], function(init) {
		mw.libs.srl = {};

		mw.libs.srl.sort = function(event, mode, ext) {
			var list = $(this).find('ul').first();
			var container = list.parent();
			if (!list) return;
			var listitems = list.children('li');
			listitems.detach();
			
			switch (mode) {
				case 'alnum': 
					listitems.sort(function(a, b) {
						var atext = $(a).text(), btext = $(b).text();
						if (ext) {
							if (atext && atext.startsWith('www.')) atext = atext.substring(4);
							if (btext && btext.startsWith('www.')) btext = btext.substring(4);
						}
						return atext > btext;
					});
					break;
				case 'count':
					listitems.sort(function(a, b) { return $(a).children('a').length < $(b).children('a').length; });
					break;
				case 'status':
					listitems.sort(function(a, b) {
						if ($(a).children().first().hasClass('new')) return -1;
						if ($(b).children().first().hasClass('new')) return +1;
						if ($(a).children().first().hasClass('mw-disambig')) return -1;
						if ($(b).children().first().hasClass('mw-disambig')) return +1;
						if ($(a).children().first().hasClass('mw-redirect')) return -1;
						if ($(b).children().first().hasClass('mw-redirect')) return +1;
						return 0;
					});
					break;
			}
			list.append(listitems);
			list.appendTo(container);
		};
		
		mw.libs.srl.goto = function(text) {
			var container = $('#lcontainer');
			var list = container.find('ul').first();
			list.scrollTop(0);
			text = $.trim(text).substring(0, 1).toUpperCase() + text.substring(1);
			var lis = list.children().find('[title^="' + text + '"]');
			list.scrollTop(lis.first().position().top);
		};
		
		mw.libs.srl.checkHidden = function(element, container) {
			var top = container.offset().top;
			var left = container.offset().left;
			var bottom = container.offset().top + container.height();
			var right = container.offset().left + container.width();
			var centery = $(element).offset().top + $(element).height() / 2;
			var centerx = $(element).offset().left + $(element).width() / 2;
			if (centery > top && centery < bottom && centerx > left && centerx < right) {
				var halfwidth = $('#mw-content-text').width() / 2;
				if (container.queue().length === 0) {
					if (container.css('right') == '0px') {
						container.animate({'right': halfwidth + 'px'}, 500).delay(3000).animate({'right': '0px'}, 500);
					}
					else {
						container.animate({'right': '0px'}, 500);
					}
				}
			}
		};
		
		mw.libs.srl.showRedundantLinks = function() {
			var container = $('#lcontainer');
			container.empty();
			container.show();
			
			// Links sammeln.
			var links = $('#mw-content-text a:visible[title]:not(:has(img))');
			
			// Irrelevante Links ausfiltern.
			links = links.filter(function () {
				return !($(this).parent().hasClass('mw-editsection') || $(this).parent().hasClass('magnify') || $(this).parent().hasClass('mw-cite-backlink'));
			});
			/*var regexp1 = /^\/(?:wiki\/(.+)|(?:w\/index\.php\?title\=([^&]+)\&action\=edit\&redlink\=1))$/;
			var regexp2 = /^(?:Diskussion|Datei|Medium|Kategorie|Benutzer(?:in)?|Portal|Wikipedia|Hilfe|Spezial|Vorlage)(?:_Diskussion)?\:.+$/;
			links = links.filter(function () {
			var pagename = regexp1.exec($(this).attr('href'));
			return (pagename !== null &&
					((pagename[1] && pagename[1].search(regexp2) !== 0) ||
					(pagename[2] && pagename[2].search(regexp2) !== 0)));
			});*/
			
			var ul = $('<ul id="srllist" style="margin:0; position:relative; max-height: 500px; max-width: 50em; padding:0; overflow:auto;"></ul>');
			
			if (links.length) {
				// Navilinks generieren
				links.each(function(index, element) {
					var a = $(this).clone();
				 	var li = null;
					var title = a.attr('title');
					var j = 0;      
					var olda = ul.find('a[title="' + title.replace(/["]/g, '\\"') + '"]');
					if (olda.length) {
						li = olda.first().parent();
						j = li.children('a').length;
					}
					if (j === 0) {
						li = $('<li style="display:block; padding:1px; margin: 0;"></li>');
						a.text(title);
						if (a.hasClass('new')) {
							a.text(title.substring(0, title.lastIndexOf(' (Seite nicht vorhanden)')));
							li.css('backgroundColor', '#CCCCCC');
						}
						else if (a.hasClass('mw-disambig')) li.css('backgroundColor', '#FF9999');
						else if (a.hasClass('mw-redirect')) li.css('backgroundColor', '#FFCCFF');
						li.append(a);
						ul.append(li);
						j = 1;
					}
			 		var scr = $('<a href="javascript:scrollTo(0,' + $(this).offset().top + ')">(' + j + ')</a>');
					scr.hover(function() {
                        if (mw.libs.srl.hoverPending) return;
                        mw.libs.srl.hoverPending = setTimeout(function () {
                            mw.libs.srl.checkHidden($(element), container);
	    					$(element).css({'fontSize':'+=8px', 'backgroundColor': '#ffaa00'});
                            mw.libs.srl.hoverDone = true;
                        }, 500);
					}, function() {
                        if (mw.libs.srl.hoverDone) {
                            $(element).css({'backgroundColor': 'transparent'}).delay().animate({'fontSize':'-=8px'}, 500);
                        }
                        clearTimeout(mw.libs.srl.hoverPending);
                        mw.libs.srl.hoverPending = mw.libs.srl.hoverDone = null;
					});
					li.append(['&nbsp;', scr]);
				});
			}
			// GUI anzeigen
			var articlecount = ul.children().length;
			var status = (articlecount > 0 ?
					'<i>' + (ul.children().find('a').length - articlecount) + ' Links auf ' + articlecount + ' Artikel.&nbsp;&nbsp;&nbsp;&nbsp;</i>' :
			 		'<i>Keine Links im Artikel!&nbsp;&nbsp;&nbsp;&nbsp;</i>'
			);
			var btn = '<img src="//upload.wikimedia.org/wikipedia/foundation/2/20/CloseWindow19x19.png" ' +
					'onclick="javascript:$(\'#lcontainer\').toggle();" style="position:absolute; right:3px; top:3px;" />';
			var options = '<button style="font-size:.8em; border-width:2px;" onclick="javascript:$(\'#lcontainer\').trigger(\'sort\', [\'alnum\']);">alphanumerisch</button>' +
					'<button style="font-size:.8em; border-width:2px;" onclick="javascript:$(\'#lcontainer\').trigger(\'sort\', [\'count\']);">nach Vorkommen</button>' +
					'<button style="font-size:.8em; border-width:2px; margin-right:25px;" onclick="javascript:$(\'#lcontainer\').trigger(\'sort\', [\'status\']);">nach Status</button>' +
					'<form action="javascript:mw.libs.srl.goto($(\'#srlGoto\').val());">Gehe zu: <input id="srlGoto" type="text" /></form>';
			container.html(status + (articlecount > 0 ? options : '') + btn);
			container.append(ul);
			container.on('sort', mw.libs.srl.sort);
		};
		
		mw.libs.srl.showExternalLinks = function() {
			var container = $('#lcontainer');
			container.empty();
			container.show();
			// Links sammeln.
			var elinks = $('#mw-content-text a.external');
			var ul = $('<ul id="elist" style="margin:0; position:relative; max-height: 500px; max-width: 50em; padding:0; overflow:auto;"></ul>');
			var regex = /^(http\:|https\:|)\/\/([^#]+)(?:\#.*)?$/;
			
			if (elinks.length) {
				// Navilinks generieren
			 	var j = 1;
				elinks.each(function(index, element) {
					var a = $(this).clone();
					var li;
					var href = a.attr('href');
					if (index > 0 && href === $(elinks[index-1]).attr('href')) {
						li = ul.children().last();
						j++;
					}
					else {
						var ltext = '';
						var url = regex.exec(href);
						if (!url) return;
						var color = 'orange';
						if (url.length < 3) {
			 				color = 'lightgreen';
							ltext = url[1];
						}
						else {
							if (url[1] === 'https:' || url[1] === '') color = 'lightgreen';
							ltext = url[2];
						}
						a.text(ltext);
						li = $('<li style="display:block; padding:1px; margin: 0; background-color:' + color + ';"></li>');
						li.append(a);
						ul.append(li);
						j = 1;
					}
					var scr = $('<a href="javascript:scrollTo(0,' + $(this).offset().top + ')">(' + j + ')</a>');
					scr.hover(function() {
                        if (mw.libs.srl.hoverPending) return;
                        mw.libs.srl.hoverPending = setTimeout(function () {
                            mw.libs.srl.checkHidden($(element), container);
	    					$(element).css({'fontSize':'+=8px', 'backgroundColor': '#ffaa00'});
                            mw.libs.srl.hoverDone = true;
                        }, 500);
					}, function() {
                        if (mw.libs.srl.hoverDone) {
                            $(element).css({'backgroundColor': 'transparent'}).delay().animate({'fontSize':'-=8px'}, 500);
                        }
                        clearTimeout(mw.libs.srl.hoverPending);
                        mw.libs.srl.hoverPending = mw.libs.srl.hoverDone = null;
					});

					li.append(scr);
				});
			}
			
			// GUI anzeigen
			var articlecount = ul.children().length;
			var status = (articlecount > 0 ?
					'<i>' + (ul.children(0).find('a').length - articlecount) + ' Links auf ' + articlecount + ' Artikel.&nbsp;&nbsp;&nbsp;&nbsp;</i>' :
					'<i>Keine Links im Artikel!&nbsp;&nbsp;&nbsp;&nbsp;</i>'
			);
			var btn = '<img src="//upload.wikimedia.org/wikipedia/foundation/2/20/CloseWindow19x19.png" onclick="javascript:$(\'#lcontainer\').toggle();" style="position:absolute; right:3px; top:3px;" />';
			var options = '<button style="font-size:.8em; border-width:2px;" onclick="javascript:$(\'#lcontainer\').trigger(\'sort\', [\'alnum\', true]);">alphanumerisch</button>' +
					'<button style="font-size:.8em; border-width:2px; margin-right:25px;" onclick="javascript:$(\'#lcontainer\').trigger(\'sort\', [\'count\', true]);">nach Vorkommen</button>' +
					'<form action="javascript:mw.libs.srl.goto($(\'#srlGoto\').val());">Gehe zu: <input id="srlGoto" type="text" /></form>';
			container.html(status + (articlecount ? options : '') + btn);
			container.append(ul);
			container.on('sort', mw.libs.srl.sort);
		};

        mw.util.addPortletLink('p-cactions', 'javascript:mw.libs.srl.showRedundantLinks()', 'Links', 'ca-srl');
        mw.util.addPortletLink('p-cactions', 'javascript:mw.libs.srl.showExternalLinks()', 'ELinks', 'ca-elinks');
		$('<div id="lcontainer" class="toccolours" style="display:none;position:fixed;right:0;font-size:0.8em;margin:-3px 0 0 -1px;padding:2px;z-index:2;"></div>').prependTo('#mw-content-text');
	});
} (window.mediaWiki, window.jQuery));