МедияУики:Common.js – Уикипедия

Забележка: За да се видят промените, необходимо е след съхраняване на страницата, кешът на браузъра да бъде изтрит.

  • Firefox / Safari: Задържа се клавиш Shift и се щраква върху Презареждане (Reload) или чрез клавишната комбинация Ctrl-Shift-R (⌘-Shift-R за Mac);
  • Google Chrome: клавишна комбинация Ctrl-Shift-R (⌘-Shift-R за Mac)
  • Internet Explorer: Задържа се клавиш Ctrl и се щраква върху Refresh или чрез клавишната комбинация CTRL-F5;
  • Opera: кешът се изчиства през менюто Tools → Preferences.

Документация   Редактиране на страницата с документацията · Редактиране на интерфейсното съобщение, чрез което се вмъква тази документация

Джаджи, които се зареждат за всички потребители:


/** Namespace constants */ mw.ns = mw.ns || { 	MEDIA          : -2, 	SPECIAL        : -1, 	MAIN           : 0, 	TALK           : 1, 	USER           : 2, 	USER_TALK      : 3, 	PROJECT        : 4, 	PROJECT_TALK   : 5, 	IMAGE          : 6, 	IMAGE_TALK     : 7, 	MEDIAWIKI      : 8, 	MEDIAWIKI_TALK : 9, 	TEMPLATE       : 10, 	TEMPLATE_TALK  : 11, 	HELP           : 12, 	HELP_TALK      : 13, 	CATEGORY       : 14, 	CATEGORY_TALK  : 15 };  mw.ext = mw.ext || {};  /**  * Checks whether the current page action is one of the given ones  * @param string|array actions  * @return boolean  */ mw.ext.isAction = function(actions) { 	if (!$.isArray(actions)) { 		actions = [actions]; 	} 	return $.inArray(mw.config.get('wgAction'), actions) !== -1; };  // Calls to setCustomMiscButton() from a personal common.js causes an error in Google Chrome window.setCustomMiscButton = window.setCustomMiscButton || function () { 	console.log('A call to an undefined function setCustomMiscButton(). This message comes from МедияУики:Common.js'); };  /**  * Checks whether the current page namespace is one of the given ones  * @param string|array namespaces  * @return boolean  */ mw.ext.isNs = function(namespaces) { 	if (!$.isArray(namespaces)) { 		namespaces = [namespaces]; 	} 	return $.inArray(mw.config.get('wgNamespaceNumber'), namespaces) !== -1; };  mw.vars = {  	use: function(baseName) { 		this.end(); 		this._currentBag = this._getBagFor(baseName + '.*'); 		return this; 	}, 	end: function() { 		this._currentBag = null; 	},  	set: function(name, value) { 		this._getBagFor(name)[this._extractLastNamePart(name)] = value; 		return this; 	}, 	get: function(name, defaultValue) { 		return this._getBagFor(name)[this._extractLastNamePart(name)] || defaultValue; 	},  	_getBagFor: function(name) { 		var nameParts = name.split(this._nsDelim); 		var bag = this._currentBag; 		if (!bag) { 			var firstPart = nameParts.shift(); 			if (!this._store.hasOwnProperty(firstPart)) { 				this._store[firstPart] = {}; 			} 			bag = this._store[firstPart]; 		} 		if (nameParts.length === 0) { 			return bag; 		} 		nameParts.pop(); 		$.each(nameParts, function(i, namePart) { 			if (!bag[namePart]) { 				bag[namePart] = {}; 			} 			// point the bag one level deeper 			bag = bag[namePart]; 		}); 		return bag; 	},  	_extractLastNamePart: function(name) { 		return name.split(this._nsDelim).pop(); 	},  	_store: {}, 	_currentBag: null, 	_nsDelim: '.' };  mw.messages.set({ 	// Featured article marker 	"fa-linktitle" : "Тази статия на друг език е избрана.",  	// Transclusion tool 	"ta-emptyfield" : "Не сте въвели име за подстраницата.", 	"ta-summary" : "Автоматично вграждане на [[$1]]", 	"ta-bpsummary" : "Нова тема: [[$1]]",  	// Toolbox add-ons 	"tb-subpages": "Подстраници", });  // for backwards compatibility var gLang = { msg: mw.msg, addMessages: function(){} };   /* * * * * * * * * *   Toolbox add-ons   * * * * * * * * * */  /***** subPagesLink ********  * Adds a link to subpages of current page  * (copied from [[commons:MediaWiki:Common.js]] and slightly modified)  */ var subPagesLink = { 	wo_ns : [mw.ns.MEDIA, mw.ns.SPECIAL, mw.ns.IMAGE, mw.ns.CATEGORY],  	install: function() { 		if ( document.getElementById("p-tb") && !mw.ext.isNs(subPagesLink.wo_ns) ) { 			mw.util.addPortletLink( 'p-tb', 				mw.util.getUrl('Special:Prefixindex/' + mw.config.get('wgPageName') +'/'), 				mw.msg("tb-subpages"), 't-subpages' ); 		} 	} }; mw.loader.using( 'mediawiki.util' ).then( function() { 	subPagesLink.install();  	if ( $.inArray("sysop", mw.config.get('wgUserGroups')) !== -1 && mw.config.get('wgCanonicalNamespace').indexOf("User") === 0 ) { 		mw.util.addPortletLink( 'p-tb', 			mw.util.getUrl('Специални:Потребителски права/' + mw.config.get('wgTitle')), 			"Управление на правата", 't-userrights' ); 	} });   // поздравително съобщение за нерегистрираните потребители mw.loader.using(['mediawiki.util']).then(function () { 	$(function() { 		var shouldSeeWelcomeMsg = mw.ext.isAction("view") // преглед на страница 			&& mw.config.get("wgUserName") === null // нерегистриран потребител 			&& mw.config.get("wgCanonicalNamespace") === "" // основно именно пространство = статия 			&& mw.config.get("wgRestrictionEdit", []).length === 0 // няма защита 			&& mw.config.get("wgIsProbablyEditable") === true // може да се редактира 			&& (document.referrer !== "") // има препращач 			&& (/bg\.wikipedia\.org/.test(document.referrer) === false) // идва извън Уикипедия 			; 		if (shouldSeeWelcomeMsg && mw.util.$content) { 			mw.util.$content.prepend('<div class="custom-usermessage"><b>Добре дошли</b> в Уикипедия! Можете не само да четете тази статия, но също така и да я <b><a href="/wiki/%D0%A3%D0%B8%D0%BA%D0%B8%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F:%D0%92%D1%8A%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5" title="Повече информация за редактирането на статии в Уикипедия">редактирате и подобрите</a></b>.</div>'); 		} 	}); });  // Използвайте този код, за да пренасочите връзката от логото на Уикипедия // към определена страница в енциклопедията. За целта разкоментирайте кода // по-долу (премахнете двойните наклонени черти в началото на всеки ред) и // поставете името на съответната страница в посоченото място. //mw.hook('wikipage.content').add(function(){ //    var logoLink = document.getElementById('p-logo').childNodes[0]; //    logoLink.title = 'Текст в popup'; // <-- поставете между апострофите текста, който искате да излиза в popup при посочване //    logoLink.href = '/wiki/Име на страницата'; // <-- поставете името на страницата между апострофите, но запазете /wiki/ отпред //});   /**  * Script pour alterner entre plusieurs cartes de géolocalisation  * Функции за замяна на картите в Шаблон:ПК група  */ function GeoBox_Init() { 	$('.img_toggle').each(function() { 		var $container = $(this); 		var $ToggleLinksDiv = $('<ul>'); 		var cssItemShown = { bottom: "1px", color: "black", background: "#fff", borderTop: "none" }; 		var cssItemHidden = { bottom: "0", color: "#444", background: "#f5f5f5", borderTop: "1px solid #aaa" }; 		$container.find('.location-map').each(function(idx) { 			var ThisBox = this; 			var toggle = $('<a href="#">'+ThisBox.getElementsByTagName('img')[0].alt+'</a>').on('click', function(e) { 				if ($container.hasClass('slideshow') && e.bubbles) { 					clearInterval(slideshow); 				} 				$container.find('.location-map').hide(); 				$(ThisBox).fadeIn(); 				$ToggleLinksDiv.find('li').css(cssItemHidden); 				$(this).parent().css(cssItemShown); 				return false; 			}); 			var $li = $('<li>').append(toggle).appendTo($ToggleLinksDiv); 			if (idx === 0) { 				$li.css(cssItemShown); 			} else { 				ThisBox.style.borderTop = '0'; 				$(ThisBox).hide(); 				$li.css(cssItemHidden); 			} 		}); 		$container.append($ToggleLinksDiv); 		if ($container.hasClass('slideshow')) { 			var index = 0; 			$anchors = $ToggleLinksDiv.find('A'); 			slideshow = setInterval(function () { 				index = index < $anchors.length - 1 ? index + 1 : 0; 				$($anchors[index]).click(); 			}, 5000); 		} 	}); }  if (mw.ext.isAction(["view", "purge", "submit"])) { 	mw.hook( 'wikipage.content' ).add( GeoBox_Init ); }    /**  * Слагайте колкото се може по-малко команди в МедияУики:Common.js, понеже те се  * изпълняват безусловно от всички потребители за всяка страница.  По възможност  * създавайте джаджи, които са включени по подразбиране вместо да добавяте код  * тук, защото джаджите са оптимизирани ResourceLoader модули, има възможност да  * им бъдат добавяни зависимости и т.н.  *  * Понеже Common.js не е джаджа, няма къде да бъдат описани нужните зависимости.  * Затова се използва mw.loader.using callback, в който се описва и изпълнява  * всичко.  В повечето случаи зависимостите вече ще са заредени (или в момента  * ще се зареждат) от браузъра и callback-ът няма да бъде забавен.  Дори в  * случай, че някоя зависимост още не е свалена и изпълнена, callback-ът ще се  * погрижи това да се случи преди да започне изпълнението си.  */ /*global mw, $, importStylesheet, importScript */ /*jshint curly:false eqnull:true, strict:false, browser:true, */  mw.loader.using( ['mediawiki.util', 'jquery.client'], function () { /* Начало на mw.loader.using callback */  /**  * Промени по Начална страница  *  * Описание: Добавяне на допълнителна препратка в края на списъка с езици, водеща до пълния списък с езикови версии на Уикипедия.  * Поддържа се от: [[:en:User:AzaToth]], [[:en:User:R. Koot]], [[:en:User:Alex Smotrov]]  */  if ( mw.config.get( 'wgPageName' ) === 'Начална_страница' || mw.config.get( 'wgPageName' ) === 'Беседа:Начална_страница' ) {     $( document ).ready( function () {         mw.util.addPortletLink( 'p-lang', '//meta.wikimedia.org/wiki/List_of_Wikipedias',             'Пълен списък', 'interwiki-completelist', 'Пълен списък с Уикипедия на всички езици (страницата е на английски)' );     } ); }  /**  * Взимане на URL параметър от текущото URL  *  * @deprecated: Използвайте mw.util.getParamValue с правилно escape-ване  */ mw.log.deprecate( window, 'getURLParamValue', function () {     return mw.util.getParamValue.apply( mw.util, arguments ); }, 'Use mw.util.getParamValue() instead' );   /**  * Скриваеми таблици **********************************************************  *  * Описание: Позволява скриването на таблици като само заглавието остава  *           видимо.  Вижте [[:en:Wikipedia:NavFrame]].  * Поддържа се от: [[:en:User:R. Koot]]  */  var autoCollapse = 2; var collapseCaption = 'Скриване'; var expandCaption = 'Показване';  window.collapseTable = function ( tableIndex ) {     var Button = document.getElementById( 'collapseButton' + tableIndex );     var Table = document.getElementById( 'collapsibleTable' + tableIndex );      if ( !Table || !Button ) {         return false;     }      var Rows = Table.rows;     var i;      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;      function handleButtonLink( index, e ) {         window.collapseTable( index );         e.preventDefault();     }      for ( i = 0; i < Tables.length; i++ ) {         if ( $( Tables[i] ).hasClass( 'collapsible' ) ) {              /* само ако има заглавен ред се добавя бутон и се увеличава брояча */             var HeaderRow = Tables[i].getElementsByTagName( 'tr' )[0];             if ( !HeaderRow ) continue;             var Header = HeaderRow.getElementsByTagName( 'th' )[0];             if ( !Header ) continue;              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.className = 'collapseButton';  /* Стиловете са описани в Common.css */              ButtonLink.style.color = Header.style.color;             ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );             ButtonLink.setAttribute( 'href', '#' );             $( ButtonLink ).on( 'click', $.proxy( handleButtonLink, ButtonLink, tableIndex ) );             ButtonLink.appendChild( ButtonText );              Button.appendChild( document.createTextNode( '[' ) );             Button.appendChild( ButtonLink );             Button.appendChild( document.createTextNode( ']' ) );              Header.insertBefore( Button, Header.firstChild );             tableIndex++;         }     }      for ( i = 0;  i < tableIndex; i++ ) {         if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) || ( tableIndex >= autoCollapse && $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) ) ) {             window.collapseTable( i );         }         else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {             var element = NavigationBoxes[i];             while ((element = element.parentNode)) {                 if ( $( element ).hasClass( 'outercollapse' ) ) {                     window.collapseTable ( i );                     break;                 }             }         }     } }  mw.hook( 'wikipage.content' ).add( createCollapseButtons );  /**  * Allow non-complete collapsing of a table while some leading rows remain visible.  * The number of visible rows can be controlled by a 'data-visible-rows' attribute on the table. Default is: 3 visible rows.  */ mw.hook('wikipage.content').add(function($content) { 	$content.find("table.semicollapsible").each(function(i, table) { 		var $table = $(table); 		var randomId = Math.ceil(Math.random() * 1000000000); 		var $newTBody = $('<tbody id="mw-customcollapsible-'+randomId+'" class="mw-collapsible mw-collapsed"></tbody>').appendTo($table); 		var numberOfVisibleRows = $table.data('visible-rows') || 3; 		var $rowsToHide = $table.find('tr').slice(numberOfVisibleRows + 1).appendTo($newTBody); 		// TODO does not account for existing colspans 		var columnCount = $rowsToHide.eq(0).find('td').length; 		var toggleText = '↓ Показване на още данни'; 		$newTBody.before('<tbody><tr><td colspan="'+columnCount+'"><div class="mw-customtoggle-'+randomId+'" style="text-align:center"><b>'+toggleText+'</b></div></td></tr></tbody>');  		mw.loader.using('jquery.makeCollapsible', function() { 			$newTBody.makeCollapsible(); 		}); 	}); });   (function() { 	if ($.inArray(mw.config.get('wgCanonicalSpecialPageName'), ['Recentchanges', 'Watchlist']) === -1) { 		return; 	} 	// add a class to all rows with changes by CategoryMaster 	$('.mw-tag-marker-CategoryMaster').each(function() { 		$(this).closest('tr').addClass('mw-changeslist-CategoryMaster'); 	}); })();  /* Край на mw.loader.using callback */ } ); /* НЕ ДОБАВЯЙТЕ КОМАНДИ ПОД ТОЗИ РЕД */