MediaWiki:Gadget-search-extraTooltips.js

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
JS-код ниже относится к гаджету: Показывать дополнительные подсказки в «малом» поле поиска при использовании неверной раскладки (править описание). Его использует около 600 учётных записей.

После сохранения или недавних изменений очистите кэш браузера.

/* Скрипт для выведения дополнительных подсказок в «малом» поле поиска
 * при использовании неверной раскладки.
 * Оригинал: //he.wikipedia.org/wiki/MediaWiki:Gadget-Dwim.js
 * Локализирован by Kaganer (26.09.2017)
 * Дополнен by TJones (WMF)
 */

mw.loader.using( [ 'mediawiki.searchSuggest', 'mediawiki.util' ] ).done( function() {
	'use strict';

	$( function() {
		var hes = "qwertyuiop[]asdfghjkl;'zxcvbnm,./`QWERTYUIOP{}ASDFGHJKL:\"ZXCVBNM<>?~#^йцукенгшщзхъфывапролджэячсмитьбю.ёЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,Ё№:",
			hebeng = function ( str ) {
				return ( str || '' ).replace( /./g, function( c ) {
					var ic = hes.indexOf( c );

					return ic + 1 ? hes.charAt( ( ic + 70 ) % 140 ) : c;
				} );
			};
			
		var $searchBoxes = $(
			'#searchInput, #searchInput2, #powerSearchText, #searchText'
		);

		$searchBoxes.suggestions( {
			fetch: function( query ) {
				var $this = $( this ),
					apiUrl = mw.util.wikiScript( 'api' );

				if ( query.length !== 0 ) {
					var params = {
						action: 'opensearch',
						search: query,
						redirects: 'return',
						suggest: true
					};

					$.ajax( {
						data: params,
						url: apiUrl,
						dataType: 'json',
						success: function( data ) {
							if ( $.isArray( data ) && 1 in data ) {
								var orig = data[1];

								$this.suggestions( 'suggestions', orig );

								if ( data[1].length < 10 ) {
									params.search = hebeng( query );
										
									if ( params.search === query ) {
										return;
									}

									params.limit = 10 - data[1].length;

									$.ajax( {
										data: params,
										url: apiUrl,
										dataType: 'json',
										success: function( data ) {
											if ( $.isArray( data ) && 1 in data ) {
												$this.suggestions(
													'suggestions',
													orig.concat( data[1] )
												);
											}
										}
									} );
								}
							}
						}
					} );
				}
			}
		} );
	} ); // document.ready
} ); // mw.loader.using