MediaWiki:Gadget-Mokosz.js

Z Nonsensopedii, polskiej encyklopedii humoru

Uwaga: aby zobaczyć zmiany po zapisaniu, może zajść potrzeba wyczyszczenia pamięci podręcznej przeglądarki.

  • Firefox / Safari: Przytrzymaj Shift podczas klikania Odśwież bieżącą stronę, lub naciśnij klawisze Ctrl+F5 lub Ctrl+R (⌘-R na komputerze Mac)
  • Google Chrome: Naciśnij Ctrl-Shift-R (⌘-Shift-R na komputerze Mac)
  • Internet Explorer: Przytrzymaj Ctrl jednocześnie klikając Odśwież lub naciśnij klawisze Ctrl+F5
  • Konqueror: Kliknij polecenie Odśwież lub naciśnij klawisz F5
  • Opera: Wyczyść pamięć podręczną w Narzędzia → Preferencje
//<nowiki>
var SearchWindow = {};

$( function () {
	function SearchProcessDialog( config ) {
		SearchProcessDialog.super.call( this, config );
	}
	
	OO.inheritClass( SearchProcessDialog, OO.ui.ProcessDialog );
	
	SearchProcessDialog.static.name = "SearchProcessDialog";
	SearchProcessDialog.static.size = "medium";
	SearchProcessDialog.static.title = "Szukaj zobaczteżów na podstawie lokalizacji";
	SearchProcessDialog.static.actions = 
	[
		{ action: "continue", label: "Szukaj", flags: ["progressive", "primary"] },
		{ action: "cancel", label: "Anuluj", flags: "safe" },
	];
	
	var checkbox = new OO.ui.CheckboxInputWidget({ value: "enabled" });
	
	SearchProcessDialog.prototype.initialize = function ()
	{
		SearchProcessDialog.super.prototype.initialize.apply( this, arguments );
		
		this.panel = new OO.ui.PanelLayout
		({
			padded: true,
			expanded: false
		});
		this.content = new OO.ui.FieldsetLayout();
		
		this.radioSelect = new OO.ui.RadioSelectWidget( {
			items: [
				new OO.ui.RadioOptionWidget( {
					data: 'all',
					label: '(wszystko)'
				} ),
				new OO.ui.RadioOptionWidget( {
					data: 'cities',
					label: 'Miejscowości'
				} )
			],
			
		} );
		this.radioSelect.selectItemByData( 'all' );
		this.radioSelectField = new OO.ui.FieldLayout(this.radioSelect);
		
		this.minResultsInput = new OO.ui.NumberInputWidget( {
			min: 1,
			max: 30,
			step: 1,
			input: { value: 5 }
		} );
		this.minResultsField = new OO.ui.FieldLayout(this.minResultsInput, 
			{ label: 'Minimalna liczba wyników:', align: 'top' } );
		
		this.content.addItems([ 
			// this.radioSelectField, // tymczasowo, na razie nie ma po co
			this.minResultsField
		]);
		
		this.panel.$element.append(this.content.$element);
		this.$body.append( this.panel.$element );
	};
	
	SearchProcessDialog.prototype.getActionProcess = function(action)
	{
		var dialog = this;
		if (action == "continue")
		{
			return new OO.ui.Process ( function()
			{
				window.location.assign( mw.util.getUrl( 
					mw.config.get('wgPageName'), 
					{
						action: 'edit',
						mokoszMin: dialog.minResultsInput.getValue(),
						mokoszMode: dialog.radioSelect.findSelectedItem().getData()
					}
				) );
			});
		}
		else if (action == "cancel")
		{
			return new OO.ui.Process ( function()
			{
				dialog.close();
			});
		}
	}
	
	SearchProcessDialog.prototype.getSetupProcess = function(data)
	{
		return SearchProcessDialog.super.prototype.getSetupProcess.call(this, data)
			.next(function()
			{
				this.content.setLabel("Szukaj zobaczteżów w pobliżu artykułu " + 
					mw.config.get('wgPageName').replace(/_/g, ' ') + ":"
				);
			}, this);
	};
	
	var dialog = new SearchProcessDialog();
	
	function doSearch() {
		var wikitext = '{{#invoke:Znajdź w pobliżu|findToHtml|' +
			mw.config.get( 'wgPageName' ) + 
			'|min=' + mw.util.getParamValue('mokoszMin') + '|[[:+]]';	// na razie hardkodujemy główną
		
		switch (mw.util.getParamValue('mokoszMode')) {
			case 'cities':
				wikitext += '|[[SIMC::+]]';
				break;
		}
		
		wikitext += '}}';
		var api = new mw.Api();
		api.get( {
			action: 'parse',
			prop: 'text|modules',
			text: wikitext
		} ).done( function( data ) {
			console.debug(data);
			var $content = $( data.parse.text['*'] );
			$( '#mw-content-text' ).before( $content );
			mw.loader.load( data.parse.modules );
			mw.hook( 'wikipage.content' ).fire( $content );
		} );
	}
	
	var SearchWindowManager = new OO.ui.WindowManager();
	$(document.body).append(SearchWindowManager.$element);
	SearchWindowManager.addWindows([dialog]);
	
	var isSearch = (mw.util.getParamValue('mokoszMin') !== null);
	
	if (mw.config.get('wgNamespaceNumber') === 0 && 
		mw.config.get('wgIsProbablyEditable') &&
		( mw.config.get('wgCoordinates') || isSearch )
	) {
		var link = $( '<a title="Uruchom narzędzie do sugerowania zobaczteżów na podstawie geolokalizacji" rel="nofollow">Utwórz zobaczteże na podstawie lokalizacji</a>' );
		link.click( function() { SearchWindowManager.openWindow( dialog ); } );
		var listItem = $( '<li id="t-suggestnearby"></li>' ).append( link );
		if ( mw.config.get('skin') == "vector" )
		{
			$( '#p-tb > .vector-menu-content > ul' ).append( listItem );
		} else if ( mw.config.get('skin') == "timeless" )
		{
			$( '#p-tb > .mw-portlet-body > ul' ).append( listItem );
		}
		
		if ( isSearch ) {
			doSearch();
		}
	}
} );
//</nowiki>