<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>http://thirdworldcup.ru/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-wikilinker.js</id>
	<title>MediaWiki:Gadget-wikilinker.js - История изменений</title>
	<link rel="self" type="application/atom+xml" href="http://thirdworldcup.ru/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-wikilinker.js"/>
	<link rel="alternate" type="text/html" href="http://thirdworldcup.ru/index.php?title=MediaWiki:Gadget-wikilinker.js&amp;action=history"/>
	<updated>2026-06-06T13:30:35Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>http://thirdworldcup.ru/index.php?title=MediaWiki:Gadget-wikilinker.js&amp;diff=4030&amp;oldid=prev</id>
		<title>Шаблонист: Новая страница: «// Russian Wiki Linker // Find link for selected text   if ( [ &#039;edit&#039;, &#039;submit&#039; ].indexOf( mw.config.get( &#039;wgAction&#039; ) ) !== -1 ) { 	importScript( &#039;MediaWiki:Stem...»</title>
		<link rel="alternate" type="text/html" href="http://thirdworldcup.ru/index.php?title=MediaWiki:Gadget-wikilinker.js&amp;diff=4030&amp;oldid=prev"/>
		<updated>2020-04-14T16:08:16Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «// Russian Wiki Linker // Find link for selected text   if ( [ &amp;#039;edit&amp;#039;, &amp;#039;submit&amp;#039; ].indexOf( mw.config.get( &amp;#039;wgAction&amp;#039; ) ) !== -1 ) { 	importScript( &amp;#039;MediaWiki:Stem...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;// Russian Wiki Linker&lt;br /&gt;
// Find link for selected text&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if ( [ &amp;#039;edit&amp;#039;, &amp;#039;submit&amp;#039; ].indexOf( mw.config.get( &amp;#039;wgAction&amp;#039; ) ) !== -1 ) {&lt;br /&gt;
	importScript( &amp;#039;MediaWiki:Stemmer.js&amp;#039; );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function stemPhrase ( phrase ) {&lt;br /&gt;
	phrase = phrase&lt;br /&gt;
		.substr( 0, 100 )&lt;br /&gt;
		.replace( /[«»%&amp;#039;&amp;quot;]/g, &amp;#039;&amp;#039; )&lt;br /&gt;
		.replace( /[\s\-–—_!?\.,:;]+/g, &amp;#039; &amp;#039; )&lt;br /&gt;
		.trim();&lt;br /&gt;
&lt;br /&gt;
	var rustemmer = new RussianStemmer();&lt;br /&gt;
 &lt;br /&gt;
	var arr = phrase.split(&amp;#039; &amp;#039;);&lt;br /&gt;
	var res = &amp;#039;&amp;#039;;&lt;br /&gt;
	var nextRes = &amp;#039;&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
	var n = 0;&lt;br /&gt;
 &lt;br /&gt;
	for ( var i in arr ) {&lt;br /&gt;
		rustemmer.setCurrent(arr[i]);&lt;br /&gt;
		rustemmer.stem();&lt;br /&gt;
		nextRes = rustemmer.getCurrent();&lt;br /&gt;
		if ( nextRes.length &amp;gt; 0 ) {&lt;br /&gt;
			if ( nextRes !== arr[i] &amp;amp;&amp;amp; n &amp;lt; 3 ) {&lt;br /&gt;
				res += &amp;#039;intitle:&amp;#039; + nextRes + &amp;#039;* &amp;#039;;&lt;br /&gt;
				n++; // в строке запроса может быть не более 3 звёздочек&lt;br /&gt;
			}&lt;br /&gt;
			else {&lt;br /&gt;
				res += nextRes + &amp;#039; &amp;#039;;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
 &lt;br /&gt;
	// trim string&lt;br /&gt;
	res = res.replace( /(^\s+)|(\s+$)/g, &amp;#039;&amp;#039; );&lt;br /&gt;
 &lt;br /&gt;
	return res;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
window.WikiLinker = function () {&lt;br /&gt;
 &lt;br /&gt;
	var xmlhttp;&lt;br /&gt;
	var CantWork = &amp;#039;Сначала нужно выделить слово или словосочетание&amp;#039;;&lt;br /&gt;
 	var requestTokens = 0;&lt;br /&gt;
 	var $wpTextbox1 = $( &amp;#039;#wpTextbox1&amp;#039; );&lt;br /&gt;
 &lt;br /&gt;
	var txt = $wpTextbox1.textSelection( &amp;#039;getSelection&amp;#039; );&lt;br /&gt;
	var startEndPos = $( &amp;#039;#wpTextbox1&amp;#039; ).textSelection( &amp;#039;getCaretPosition&amp;#039;, {&lt;br /&gt;
			startAndEnd: true&lt;br /&gt;
		} ),&lt;br /&gt;
		startPos = startEndPos[0],&lt;br /&gt;
		endPos = startEndPos[1];&lt;br /&gt;
&lt;br /&gt;
	// Trim selected text&lt;br /&gt;
	while ( txt.slice( 0, 1 ) === &amp;#039; &amp;#039; ) {&lt;br /&gt;
		txt = txt.slice( 1 );&lt;br /&gt;
		startPos = startPos + 1;&lt;br /&gt;
	}&lt;br /&gt;
	while ( txt.slice( -1 ) === &amp;#039; &amp;#039; ) {&lt;br /&gt;
		txt = txt.slice( 0, -1 );&lt;br /&gt;
		endPos = endPos - 1;&lt;br /&gt;
	}&lt;br /&gt;
	if ( txt === &amp;#039;&amp;#039; ) {&lt;br /&gt;
		mw.notify( CantWork );&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	if ( startEndPos[0] !== startPos || startEndPos[1] !== endPos ) {&lt;br /&gt;
		$wpTextbox1.textSelection( &amp;#039;setSelection&amp;#039;, {&lt;br /&gt;
			start: startPos,&lt;br /&gt;
			end: endPos &lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	processText( txt );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	function processText ( txt ) {&lt;br /&gt;
		var preparedText = stemPhrase( txt );&lt;br /&gt;
		// Использовать режим совместимости (поведение старого движка Lucene)&lt;br /&gt;
		preparedText = preparedText;&lt;br /&gt;
 		requestTokens = preparedText.split( &amp;#039; &amp;#039; ).length;&lt;br /&gt;
 		var url = mw.config.get( &amp;#039;wgServer&amp;#039; ) + mw.config.get( &amp;#039;wgScriptPath&amp;#039; ) + &lt;br /&gt;
 			&amp;#039;/api.php?action=query&amp;amp;list=search&amp;amp;continue=&amp;#039; + &lt;br /&gt;
 			&amp;#039;&amp;amp;srlimit=5&amp;amp;srprop=&amp;amp;format=json&amp;amp;srsearch=&amp;#039; + preparedText;&lt;br /&gt;
&lt;br /&gt;
		loadXMLDoc( url );&lt;br /&gt;
	}&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
	function loadXMLDoc ( url ) {&lt;br /&gt;
		xmlhttp = GetXmlHttpObject();&lt;br /&gt;
		if ( xmlhttp === null ) {&lt;br /&gt;
			mw.notify( &amp;#039;Your browser does not support XMLHTTP!&amp;#039; );&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		xmlhttp.onreadystatechange = stateChanged;&lt;br /&gt;
		xmlhttp.open( &amp;#039;GET&amp;#039;, url, true );&lt;br /&gt;
		xmlhttp.send( null );&lt;br /&gt;
	}&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
	function GetXmlHttpObject() {&lt;br /&gt;
		if ( window.XMLHttpRequest ) {&lt;br /&gt;
			// code for IE7+, Firefox, Chrome, Opera, Safari&lt;br /&gt;
			return new XMLHttpRequest();&lt;br /&gt;
		}&lt;br /&gt;
		if ( window.ActiveXObject ) {&lt;br /&gt;
			// code for IE6, IE5&lt;br /&gt;
			return new ActiveXObject( &amp;#039;Microsoft.XMLHTTP&amp;#039; );&lt;br /&gt;
		}&lt;br /&gt;
		return null;&lt;br /&gt;
	}&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
	// сравнение по длине строки, без учёта уточнения в скобках&lt;br /&gt;
	// чтобы для &amp;quot;Категори*&amp;quot; выдавалось &amp;quot;Категория (значения)&amp;quot;, а не &amp;quot;Классификация&amp;quot;&lt;br /&gt;
	function compareStringLengths ( a, b ) {&lt;br /&gt;
		a = a.replace( / \(.*\)/g, &amp;#039;&amp;#039; );&lt;br /&gt;
		b = b.replace( / \(.*\)/g, &amp;#039;&amp;#039; );&lt;br /&gt;
 &lt;br /&gt;
		if ( a.length &amp;lt; b.length ) {&lt;br /&gt;
			return -1;&lt;br /&gt;
		}&lt;br /&gt;
		if ( a.length &amp;gt; b.length ) {&lt;br /&gt;
			return 1;&lt;br /&gt;
		}&lt;br /&gt;
		return 0;&lt;br /&gt;
	}&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
	function initialLower ( str ) {&lt;br /&gt;
		return str.substr( 0, 1 ).toLowerCase() + str.substr( 1 );&lt;br /&gt;
	}&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
	function stateChanged() {&lt;br /&gt;
		if ( xmlhttp.readyState === 4 ) {&lt;br /&gt;
			if ( xmlhttp.status === 200 ) {&lt;br /&gt;
				var resp = eval( &amp;#039;(&amp;#039; + xmlhttp.responseText + &amp;#039;)&amp;#039; );&lt;br /&gt;
 &lt;br /&gt;
				if ( typeof resp.query.search[0] !== &amp;#039;undefined&amp;#039; ) {&lt;br /&gt;
 &lt;br /&gt;
					var pageName = resp.query.search[0].title;&lt;br /&gt;
 &lt;br /&gt;
					// если в запросе было только одно слово, то выбираем самое короткое название из первых трёх результатов&lt;br /&gt;
					// чтобы для &amp;quot;Аглией&amp;quot; выдавалось &amp;quot;Англия&amp;quot;, а не &amp;quot;Англиканство&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
					if ( requestTokens === 1 ) {&lt;br /&gt;
						var resar = [];&lt;br /&gt;
 &lt;br /&gt;
						for ( var j = 0; j &amp;lt;= 4; j++ ) {&lt;br /&gt;
							if ( typeof resp.query.search[j] !== &amp;#039;undefined&amp;#039; &amp;amp;&amp;amp;&lt;br /&gt;
								txt.substr( 0, 3 ).toLowerCase() === resp.query.search[j].title.substr( 0, 3 ).toLowerCase()&lt;br /&gt;
							) {&lt;br /&gt;
								resar.push( resp.query.search[j].title );&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
 &lt;br /&gt;
						resar.sort( compareStringLengths );&lt;br /&gt;
 &lt;br /&gt;
						if ( typeof resar[0] !== &amp;#039;undefined&amp;#039; ) {&lt;br /&gt;
							pageName = resar[0];&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
 &lt;br /&gt;
					// для &amp;quot;форумы&amp;quot; будет &amp;quot;[[форум]]ы&amp;quot;, а не &amp;quot;[[форум|форумы]]&amp;quot;&lt;br /&gt;
					if ( initialLower( txt.substr( 0, pageName.length ) ) === initialLower( pageName ) &amp;amp;&amp;amp;&lt;br /&gt;
						pageName.length &amp;lt;= txt.length&lt;br /&gt;
					) {&lt;br /&gt;
						txt = &amp;#039;[[&amp;#039; + txt.substr( 0, pageName.length ) + &amp;#039;]]&amp;#039; +&lt;br /&gt;
							txt.substr( pageName.length, txt.length - pageName.length );&lt;br /&gt;
					}&lt;br /&gt;
					else {&lt;br /&gt;
						txt = &amp;#039;[[&amp;#039; + pageName + &amp;#039;|&amp;#039; + txt + &amp;#039;]]&amp;#039;; &lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				else {&lt;br /&gt;
					txt = &amp;#039;[[&amp;#039; + &amp;#039;|&amp;#039; + txt + &amp;#039;]]&amp;#039;;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				$( &amp;#039;#wpTextbox1&amp;#039; )&lt;br /&gt;
					.textSelection( &amp;#039;encapsulateSelection&amp;#039;, {&lt;br /&gt;
						peri: txt,&lt;br /&gt;
						replace: true&lt;br /&gt;
					} )&lt;br /&gt;
					.textSelection( &amp;#039;scrollToCaretPosition&amp;#039; )&lt;br /&gt;
			 		.focus();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
registerTool( {&lt;br /&gt;
	name: &amp;#039;wikilinker&amp;#039;,&lt;br /&gt;
	position: 300,&lt;br /&gt;
	title: &amp;#039;Викиссыльщик&amp;#039;,&lt;br /&gt;
	label: &amp;#039;Викиссыльщик — подбирает вики-ссылку для выделенного слова или словосочетания&amp;#039;,&lt;br /&gt;
	callback: WikiLinker,&lt;br /&gt;
	classic: {&lt;br /&gt;
		icon: &amp;#039;//upload.wikimedia.org/wikipedia/commons/b/bd/Wikilinker.png&amp;#039;,&lt;br /&gt;
	},&lt;br /&gt;
	visual: {&lt;br /&gt;
		icon: &amp;#039;//upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Wikilinker_VE_icon.svg/20px-Wikilinker_VE_icon.svg.png&amp;#039;,&lt;br /&gt;
		modes: [ &amp;#039;source&amp;#039; ],&lt;br /&gt;
		addCallback: function () {&lt;br /&gt;
			importScript( &amp;#039;MediaWiki:Stemmer.js&amp;#039; );&lt;br /&gt;
		},&lt;br /&gt;
	},&lt;br /&gt;
} );&lt;/div&gt;</summary>
		<author><name>Шаблонист</name></author>
	</entry>
</feed>