MediaWiki:Gadget-Suggestions.js

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Увага: Після публікування слід очистити кеш браузера, щоб побачити зміни.

  • Firefox / Safari: тримайте Shift, коли натискаєте Оновити, або натисніть Ctrl-F5 чи Ctrl-Shift-R (⌘-R на Apple Mac)
  • Google Chrome: натисніть Ctrl-Shift-R (⌘-Shift-R на Apple Mac)
  • Internet Explorer / Edge: тримайте Ctrl, коли натискаєте Оновити, або натисніть Ctrl-F5
  • Opera: натисніть Ctrl-F5
/*
* Технічний додаток, використовується у інших скриптах.

Приклади використання:

Підказки категорій Вікісховища без простору назв для усіх полей класу "searchboxInput":
mw.loader.using('ext.gadget.Suggestions', function() {
	$('.searchboxInput').suggest('//commons.wikimedia.org/w/api.php', 14, 'jsonp', 'Category:');
});

Підказки статей Української Вікіпедії (як у полі пошуку)
mw.loader.using('ext.gadget.Suggestions', function() {
	$('.searchboxInput').suggest('//uk.wikipedia.org/w/api.php', 0, 'json');
});

* Параметри:
* au - api url					e.g. '//commons.wikimedia.org/w/api.php'
* ns - namespace number			e.g. 0 or 14
* dt - data type				e.g. 'json' or 'jsonp'
* rt - текст, який буде вилучений у підказці 			e.g. 'Category:', 'Wikipedia:' or false

*/
$.fn.extend({
	suggest: function(au, ns, dt, rt) {
				this.suggestions( {
					fetch: function( query ) {
						var $this = $(this);
						var request = $.ajax( {
							url: au,
							data: {
								'action': 'opensearch',
								'search': query,
								'namespace': ns,
								'suggest': ''
							},
							dataType: dt,
							success: function( data ) {
								if ( data && 1 in data ) {
									console.log(data);
									if(rt) {
										for (i in data[1]) {
											data[1][i] = data[1][i].replace(rt,"");
										}
									}
									$this.suggestions( 'suggestions', data[1] );
								}
							}
						});
						$(this).data( 'request', request );
					},
					cancel: function () {
						var request = $(this).data( 'request' );
						// If the delay setting has caused the fetch to have not even happend yet, the request object will
						// have never been set
						if ( request && typeof request.abort == 'function' ) {
							request.abort();
							$(this).removeData( 'request' );
						}
					},
					result: {
						select: function( $input ) {
							$input.closest( 'form' ).submit();
						}
					},
					delay: 120,
					positionFromLeft: $( 'body' ).is( '.rtl' ),
					highlightInput: true
				})
				.on( 'paste cut', function( e ) {
					// make sure paste and cut events from the mouse trigger the keypress handler and cause the suggestions to update
					$( this ).trigger( 'keypress' );
				});
		}
});