Aan de totstandkoming van deze digitale encyclopedie wordt nog gewerkt.

MediaWiki:Common.js

Uit De historische en eigentijdse encyclopedie van Eindhoven
Versie door Jack (overleg | bijdragen) op 6 aug 2013 om 10:43 (Nieuwe pagina aangemaakt met 'JavaScript die hier wordt geplaatst heeft invloed op alle pagina's voor alle gebruikers, JL 6 aug. 2013: /*jslint browser: true, continue: true, sloppy: true, ...')
(wijz) ← Oudere versie | Huidige versie (wijz) | Nieuwere versie → (wijz)
Ga naar: navigatie, zoeken
/* JavaScript die hier wordt geplaatst heeft invloed op alle pagina's voor alle gebruikers, JL 6 aug. 2013 */
/*jslint browser: true, continue: true, sloppy: true, vars: true, plusplus: true*/
/*global mediaWiki, jQuery, importScript, jsMsg*/
(function (mw, $) {

	/**
	 * Laad volglijst script
	 */
	if (mw.config.get('wgCanonicalSpecialPageName') === 'Watchlist') {
		importScript("MediaWiki:Common.js/watchlist.js");
	}

	/**
	 * Extra knopje in de monobook toolbar
	 *
	 * Gebaseerd op [[:en:Wikipedia:Tools/Editing tools]].
	 * Maintainers: [[:en:User:MarkS|User:MarkS]]?, [[:en:User:Voice of All|User:Voice of All]], [[:en:User:R. Koot|User:R. Koot]]
	 */
	if (mw.toolbar) {
		mw.toolbar.addButton({
			'imageFile': '//upload.wikimedia.org/wikipedia/commons/0/04/Button_array.png',
			'speedTip': 'Voeg tabel in',
			'tagOpen': '{| class="wikitable"\n|-\n',
			'tagClose': "\n|}",
			'sampleText': "! kop 1\n! kop 2\n! kop 3\n|-\n| rij 1, cel 1\n| rij 1, cel 2\n| rij 1, cel 3\n|-\n| rij 2, cel 1\n| rij 2, cel 2\n| rij 2, cel 3"
		});
	}

	/**
	 * Uitgelicht in andere talen
	 *
	 * Sterren voor interwikilinks van de [[Wikipedia:Etalage]]-artikelen van andere Wikipedia's.
	 * Zie {{tl|Link FA}}. Overgenomen van [[:de:MediaWiki:Common.js]]
	 * Om zetten: <code>window.enable_linkFA = false;</code> in [[Special:Mypage/common.js]].
	 *
	 * @revision 2013-01-26
	 * @maintainer Krinkle
	 */
	function linkFA() {
		var i;
		if (window.enable_linkFA === false) {
			return;
		}

		// links are to replaced in p-lang only
		var pLang = document.getElementById('p-lang');
		if (!pLang) {
			return;
		}
		var lis = pLang.getElementsByTagName('li');
		for (i = 0; i < lis.length; i++) {
			var li = lis[i];
			// alleen links met een Link FA-sjabloon
			if (!document.getElementById(li.className + '-fa')) {
				continue;
			}

			// Extra css-klasse zodat het effect verborgen kan worden met CSS
			li.className += ' FA';

			// Verander titel
			li.title = 'Dit is een etalage-artikel in een andere taal.';
		}
	}
	$(linkFA);

	/**
	 * Goede artikelen in andere talen
	 *
	 * Sterren voor interwikilinks van de 'goede artikelen' van andere Wikipedia's.
	 * Zie {{tl|Link GA}}.
	 * Om zetten: <code>window.enable_linkGA = false;</code> in [[Special:Mypage/common.js]].
	 *
	 * @revision 2013-01-26
	 * @maintainer Krinkle
	 */
	function linkGA() {
		var i;
		if (window.enable_linkGA === false) {
			return;
		}

		// links are to replaced in p-lang only
		var pLang = document.getElementById('p-lang');
		if (!pLang) {
			return;
		}
		var lis = pLang.getElementsByTagName('li');
		for (i = 0; i < lis.length; i++) {
			var li = lis[i];
			// alleen links met een Link GA-sjabloon
			if (!document.getElementById(li.className + '-ga')) {
				continue;
			}

			// Extra css-klasse zodat het effect verborgen kan worden met CSS
			li.className += ' GA';

			// Verander titel
			li.title = 'Dit is een goed artikel in een andere taal.';
		}
	}
	$(linkGA);

	/**
	 * Autotekst in uploadpagina voor bestanden
	 *
	 * Script voor Speciaal:Uploaden
	 * Maintainers: [[:commons:User:Yonidebest]], [[:commons:User:Dschwen]]
	 */
	if (mw.config.get('wgCanonicalSpecialPageName') === 'Upload') {
		importScript('MediaWiki:Upload.js');
	}

	/**
	 * Meerdere sets speciale tekens
	 *
	 * Geeft menu in [[MediaWiki:Edittools]] waarmee meerdere sets speciale
	 * tekens kunnen worden geraadpleegd. Zie ook [[MediaWiki:Onlyifediting.js]]
	 */
	if (mw.config.get('wgAction')  === 'edit' || mw.config.get('wgAction') === 'submit') {
		importScript('MediaWiki:Onlyifediting.js');
	}

	/**
	 * NavFrame
	 *
	 * Van [[:en:MediaWiki:Common.js]]
	 * Test if an element has a certain class
	 * Description: Uses regular expressions and caching for better performance.
	 * Maintainers: [[:en:User:Mike Dillon]], [[:en:User:R. Koot]], [[:en:User:SG]]
	 */
	var hasClass = (function () {
		var reCache = {};
		return function (element, className) {
			return (reCache[className] || (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
		};
	}());

	/**
	 * Collapsible tables
	 * Allows tables to be collapsed, showing only the header. See [[:en:Wikipedia:NavFrame]].
	 * Maintainers: [[:en:User:R. Koot]]
	 */
	var autoCollapse = 2;
	var collapseCaption = 'verberg';
	var expandCaption = 'toon';

	function collapseTable(tableIndex) {
		var Button = document.getElementById('collapseButton' + tableIndex);
		var Table = document.getElementById('collapsibleTable' + tableIndex);
		var i;

		if (!Table || !Button) {
			return false;
		}

		var Rows = Table.getElementsByTagName('tr');

		if (Button.firstChild.data === collapseCaption) {
			for (i = 1; i < Rows.length; i++) {
				Rows[i].style.display = 'none';
			}
			Button.firstChild.data = expandCaption;
		} else {
			for (i = 1; i < Rows.length; i++) {
				Rows[i].style.display = Rows[0].style.display;
			}
			Button.firstChild.data = collapseCaption;
		}
	}

	function createCollapseButtons() {
		var tableIndex = 0;
		var NavigationBoxes = {};
		var Tables = document.getElementsByTagName('table');
		var i;

		for (i = 0; i < Tables.length; i++) {
			if (hasClass(Tables[i], 'collapsible')) {
				NavigationBoxes[tableIndex] = Tables[i];
				Tables[i].setAttribute('id', 'collapsibleTable' + tableIndex);

				var Button = document.createElement('span');
				var ButtonLink = document.createElement('a');
				var ButtonText = document.createTextNode(collapseCaption);

				Button.style.styleFloat = 'right';
				Button.style.cssFloat = 'right';
				Button.style.fontWeight = 'normal';
				Button.style.textAlign = 'right';
				Button.style.width = "6em";

				ButtonLink.setAttribute('id', 'collapseButton' + tableIndex);
				$(ButtonLink).data('mwCollapsibleTableIndex', tableIndex).click(function (e) {
					collapseTable($(this).data('mwCollapsibleTableIndex'));
					e.preventDefault();
				});
				ButtonLink.appendChild(ButtonText);

				Button.appendChild(document.createTextNode('['));
				Button.appendChild(ButtonLink);
				Button.appendChild(document.createTextNode(']'));

				var Header = Tables[i].getElementsByTagName('tr')[0].getElementsByTagName('th')[0];
				/* only add button and increment count if there is a header row to work with */
				if (Header) {
					Header.insertBefore(Button, Header.childNodes[0]);
					tableIndex++;
				}
			}
		}

		for (i = 0;  i < tableIndex; i++) {
			if (hasClass(NavigationBoxes[i], 'collapsed') || (tableIndex >= autoCollapse && hasClass(NavigationBoxes[i], 'autocollapse'))) {
				collapseTable(i);
			}
		}
	}

	$(createCollapseButtons);

	/**
	 * Overige
	 *
	 * pickUpText(aParentElement)
	 * similar to innerHTML, but only returns the text portions of the insides, excludes HTML
	 * Overblijfsel van de RealTitle functie
	 * Maintainers op enwiki: [[:en:User:Interiot|User:Interiot]], [[:en:User:Mets501|User:Mets501]]
	 */
	function pickUpText(aParentElement) {
		var str = '';
		function pickUpTextInternal(aElement) {
			var child = aElement.firstChild;
			while (child) {
				// ELEMENT_NODE
				if (child.nodeType === 1) {
					pickUpTextInternal(child);

				// TEXT_NODE
				} else if (child.nodeType === 3) {
					str += child.nodeValue;
				}

				child = child.nextSibling;
			}
		}

		pickUpTextInternal(aParentElement);

		return str;
	}

	/**
	 * SpecialSearchEnhanced
	 *
	 * Dit voegt twee externe zoekmachines toe aan Speciaal:Search
	 * Het is een bewerking van fr:MediaWiki:Monobook.js
	 * en en:MediaWiki:Common.js
	 * wat gemaakt is door fr:User:Dake en de auteurs van
	 * en:MediaWiki:Common.js onder de licentie GFDL
	 * Deze functie is aangepast aan MWSearch.
	 */
	function SpecialSearchEnhanced() {
		var searchForm, searchBox;
		if (document.forms.powersearch) {
			searchForm = document.forms.powersearch;
		}
		if (document.forms.search) {
			searchForm = document.forms.search;
		}
		if (searchForm.lsearchbox) {
			searchBox = searchForm.lsearchbox;
		} else {
			searchBox = searchForm.search;
		}

		var searchValue = searchBox.value;
		var safeSearchValue = mw.html.escape(searchValue);

		var node = document.createElement('div');

		var SearchEnhancedText = '<p/><br/>U kunt ook met onderstaande externe zoekmachines zoeken in Wikipedia. Deze kunnen resultaten opleveren die met de interne zoekmachine niet gevonden worden. Bij Google kunt u ook andere taalversies van Wikipedia selecteren.';

		var googleSearch =  '<p/><table width=100%><tr valign=top><td align=left>';
		googleSearch += '<form method=get action="http://www.google.nl/search">';
		googleSearch += '<input type=text name=q value="' + safeSearchValue + '">';
		googleSearch += '<input type=hidden name=hl value=nl>';
		googleSearch += '&#32;<select name=sitesearch>';
		googleSearch += '<option value="nl.wikipedia.org"> Nederlands </option>';
		googleSearch += '<option value="en.wikipedia.org"> Engels </option>';
		googleSearch += '<option value="de.wikipedia.org"> Duits </option>';
		googleSearch += '<option value="fr.wikipedia.org"> Frans </option>';
		googleSearch += '<option value="es.wikipedia.org"> Spaans </option>';
		googleSearch += '<option value="pt.wikipedia.org"> Portugees </option>';
		googleSearch += '<option value="it.wikipedia.org"> Italiaans </option>';
		googleSearch += '<option value="sv.wikipedia.org"> Zweeds </option>';
		googleSearch += '<option value="no.wikipedia.org"> Noors </option>';
		googleSearch += '<option value="da.wikipedia.org"> Deens </option>';
		googleSearch += '<option value="pl.wikipedia.org"> Pools </option>';
		googleSearch += '<option value="fy.wikipedia.org"> Fries </option>';
		googleSearch += '<option value="li.wikipedia.org"> Limburgs </option>';
		googleSearch += '<option value="nds-nl.wikipedia.org"> Nedersaksisch </option>';
		googleSearch += '<option value="vls.wikipedia.org"> West-Vlaams </option>';
		googleSearch += '<option value="wikipedia.org"> Alle talen </option>';
		googleSearch += '</select>&#32;<input type=submit value="Zoek met Google">';
		googleSearch += '</form></td>';

		var wikiwixSearch =  '<td>&nbsp;</td><td align=right>';
		wikiwixSearch += '<form method=get action="http://nl.wikiwix.com/">';
		wikiwixSearch += '<input type=text name=action value="' + safeSearchValue + '">';
		wikiwixSearch += '&#32;<input type=submit value="Zoek met Wikiwix">';
		wikiwixSearch += '</form></td>';

		var yahooSearch =  '<td>&nbsp;</td><td align=right>';
		yahooSearch += '<form method=get action="http://nl.search.yahoo.com/search">';
		yahooSearch += '<input type=text name=p value="' + safeSearchValue + '">';
		yahooSearch += '<input type=hidden name=vs value=nl.wikipedia.org>';
		yahooSearch += '&#32;<input type=submit value="Zoek met Yahoo">';
		yahooSearch += '</form></td></tr></table><br/>';

		node.innerHTML = node.innerHTML + SearchEnhancedText + googleSearch + wikiwixSearch + yahooSearch;

		var nonefound = document.getElementById('nonefound');
		if (nonefound) {
			nonefound.innerHTML = nonefound.innerHTML + '<div>' + node.innerHTML + '</div>';

		} else {
			searchForm.parentNode.insertBefore(node, searchForm.nextSibling);
		}
	}

	if (mw.config.get('wgCanonicalSpecialPageName') === 'Search') {
		$(SpecialSearchEnhanced);
	}


	// ============================================================
	// BEGIN Dynamisch inklapbare div

	// set up the words in your language
	var UitklapDivHide = 'Inklappen';
	var UitklapDivShow = 'Uitklappen';

	// shows and hides content of Uitklap divs
	// Parameters:
	// indexUitklapDiv: the index of Uitklap div to be toggled
	window.toggleUitklapDiv = function(indexUitklapDiv) {
		var UitklapToggle = document.getElementById('UitklapToggle' + indexUitklapDiv);
		var UitklapFrame = document.getElementById('UitklapFrame' + indexUitklapDiv);
		var UitklapChild;

		if (!UitklapFrame || !UitklapToggle) {
			return false;
		}

		// if shown now
		if (UitklapToggle.firstChild.data === UitklapDivHide) {
			for (
				UitklapChild = UitklapFrame.firstChild;
				UitklapChild != null;
				UitklapChild = UitklapChild.nextSibling
			) {
				if (UitklapChild.className === 'UitklapContent') {
					UitklapChild.style.display = 'none';
				}
				if (UitklapChild.className === 'UitklapToggle') {
					UitklapChild.firstChild.data = UitklapDivShow;
				}
			}

		// if hidden now
		} else if (UitklapToggle.firstChild.data === UitklapDivShow) {
			for (
				UitklapChild = UitklapFrame.firstChild;
				UitklapChild != null;
				UitklapChild = UitklapChild.nextSibling
			) {
				if (UitklapChild.className === 'UitklapContent') {
					UitklapChild.style.display = 'block';
				}
				if (UitklapChild.className === 'UitklapToggle') {
					UitklapChild.firstChild.data = UitklapDivHide;
				}
			}
		}
	}

	// adds show/hide-button to navigation bars
	function createUitklapDivToggleButton() {
		var indexUitklapDiv = 0;
		var i, u, UitklapFrame;
		// iterate over all < div >-elements
		for (i = 0; UitklapFrame = document.getElementsByTagName('div')[i]; i++) {
			// if found a navigation bar
			if (UitklapFrame.className === 'UitklapFrame' || UitklapFrame.className === 'UitklapFrameNoClear') {

				indexUitklapDiv++;
				var UitklapToggle = document.createElement('a');
				UitklapToggle.className = 'UitklapToggle';
				UitklapToggle.setAttribute('id', 'UitklapToggle' + indexUitklapDiv);
				$(UitklapToggle).data('mwUitklapFrameIndex', indexUitklapDiv).click(function (e) {
					toggleUitklapDiv($(this).data('mwUitklapFrameIndex'));
					e.preventDefault();
				});

				var UitklapToggleText = document.createTextNode(UitklapDivHide);
				UitklapToggle.appendChild(UitklapToggleText);

				// add NavToggle-Button as first div-element
				// in < div class="UitklapFrame" >
				UitklapFrame.insertBefore(UitklapToggle, UitklapFrame.firstChild);
				UitklapFrame.setAttribute('id', 'UitklapFrame' + indexUitklapDiv);
			}
		}
		for (u = 1; u <= indexUitklapDiv; u++) {
			toggleUitklapDiv(u);
		}
	}

	$(createUitklapDivToggleButton);

	// EIND Dynamisch inklapbare div
	// ============================================================


	/**
	 * Extraheer waarde uit de huidige of een gegeven adres
	 * @deprecated since MediaWiki 1.17: Gebruik mw.util.getParamValue
	 */
	function getParamValue(paramName, url) {
		return mw.util.getParamValue(paramName, url);
	}

	/**
	 * Load withJS & withCSS
	 *
	 * @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL
	 * @rev 3
	 */
	mw.loader.using( ['mediawiki.util', 'mediawiki.notify'], function () {
		var extraJS = mw.util.getParamValue( 'withJS' );
		if ( extraJS ) {
			// Disallow some characters in file name
			if ( extraJS.match( /^MediaWiki:[^&<>=%#]*\.js$/ ) ) {
				importScript( extraJS );
			// Dont use alert but the jsMsg system. Run jsMsg only once the DOM is ready.
			} else {
				$(document).ready( function() {
					mw.notify( 'Invalid javascript URL; only javascript pages from MediaWiki: space are allowed.', { title: 'Error' } );
				} );
			}
		}
		var extraCSS = mw.util.getParamValue( 'withCSS' );
		if ( extraCSS ) {
			// Disallow some characters in file name
			if ( extraCSS.match( /^MediaWiki:[^&<>=%#]*\.css$/ ) ) {
				importStylesheet( extraCSS );
			// Dont use alert but the jsMsg system. Run jsMsg only once the DOM is ready.
			} else {
				$(document).ready( function() {
					mw.notify( 'Invalid stylesheet URL; only stylesheet pages from MediaWiki: space are allowed.', { title: 'Error' } );
				} );
			}
		}
	} );

	function loggedOutTalkPage() {
		var loggedOut = mw.util.addPortletLink('p-personal', '#', 'Niet aangemeld', 'pt-userpage', null, null, '#pt-login');
		loggedOut.innerHTML = '<span style="color: gray;">Niet aangemeld</span>';

		mw.util.addPortletLink('p-personal', '//nl.wikipedia.org/wiki/Special:MyTalk', 'Overlegpagina IP-adres', 'pt-mytalk', 'Overlegpagina IP-adres', 'n', '#pt-login');
		mw.util.addPortletLink('p-personal', '//nl.wikipedia.org/wiki/Special:MyContributions', 'Bijdragen IP-adres', 'pt-mycontris', 'Bijdragen IP-adres', 'y', '#pt-login');
	}

	mw.loader.using('mediawiki.user', function () {
		if (mw.user.anonymous()) {
			$(document).ready(loggedOutTalkPage);
		}
	});

	// Bewerken en overleg bij een afbeelding op Commons linken naar Commons (kopie van de Duitse Wikipedia)

	if (mw.config.get('wgNamespaceNumber') === 6) {
		$(function () {
			if (window.keepLocalFileTabs) {
				return;
			}
			if (document.getElementById('ca-history')) {
				// Lokale beschrijving aanwezig?
				return;
			}
			if (!$('.sharedUploadNotice').length) {
				// Alleen doen bij afbeeldingen op Commons
				return;
			}

			var path = '//commons.wikimedia.org/wiki/';
			var link, talk, edit;

			// Andere link voor overlegpagina
			// vector uses ca-image_talk
			talk = document.getElementById('ca-talk') || document.getElementById('ca-image_talk');
			if (talk && $(talk).hasClass('new')) {
				link = talk.getElementsByTagName('a')[0];
				link.href = path + 'File_talk:' + mw.util.wikiUrlencode(mw.config.get('wgTitle')) + '?uselang=' + mw.config.get('wgUserLanguage');
				link.className  += ' commonstab';
			}

			// Bewerken link
			edit	= document.getElementById('ca-edit') || document.getElementById('ca-viewsource');
			if (edit) {
				link = edit.getElementsByTagName('a')[0];
				link.href = path + 'File:' + mw.util.wikiUrlencode(mw.config.get('wgTitle')) + '?uselang=' + mw.config.get('wgUserLanguage') + '&action=edit';
				link.className  += ' commonstab';
				link.firstChild.nodeValue = 'Bewerken';
			}
		});
	}



	/**
	 * Icons on the top right of the article.
	 * See also CSS
	 *
	 * @source: www.mediawiki.org/wiki/Snippets/Top_icons
	 * @rev: 3
	 */
	$(document).ready(function () {
		$('.Top_icon_raw')
			.removeClass('Top_icon_raw')
			.addClass('Top_icon_dynamic')
			.prependTo('#firstHeading');
	});

        /**
         * Gebruik 4 tildes zonder '--' voor ondertekening in de (oude) toolbar
         */
        $(document).ready(function () {
	     $( '#mw-editbutton-signature' ).unbind('click');
	     $( '#mw-editbutton-signature' ).click( function () { window.insertTags( '~~' + '~~' ); } );
        });

        /**
         * Gebruik 4 tildes zonder '--' voor ondertekening in de uitgebreide werkbalk
         */
        $(document).ready(function () {
	     $( '#wpTextbox1' ).bind( 'wikiEditor-toolbar-buildSection-main', function( event, section ) {
		   section.groups.insert.tools.signature.action.options.pre = '~~'+'~~';
	     });
        });

        /**
         * Tijdelijke oplossing voor het probleem dat een paar items in het linkermenu niet in het Nederlands worden
         * weergegeven.
         * http://nl.wikipedia.org/w/index.php?title=Wikipedia:De_kroeg&oldid=37918851#Heuh.3F.21_Engelstalige_linkwoorden
         */
        $(document).ready(function () {
            if (mw.config.get( 'wgUserLanguage' ) === "nl" || mw.config.get( 'wgUserId' ) == null ) {
                $("#n-Etalage>a").html("Etalage");
                $("#n-Vind-een-artikel>a").html("Zoek een artikel");
                $("#n-Snelcursus>a").html("Snelcursus");
            }
        });


}(mediaWiki, jQuery));