🔄 Losowy artykuł
Szlaki górskie Pociągiem dookoła Polski Podróże kulinarne Hotele-unikaty świata Parkingi przy lotniskach Łowiska Europy Campingi dla kamperów Imprezy — atrakcje w Polsce Poradnik pilota drona Wydarzenia i bilety Promocje bankowe Kamery na żywo Oferty Centrum Podróży Koliber Triper.pl Trip.FazaFM.com — plany podróży

Wikipedysta:Tufor/WatchCatElems.js

//autor: [[User:Tufor|tufor]]
var WatchCatElems2 = {
	processDialog: null,
	api: new mw.Api(),
	$depthSelect: null,
	
	createDialog: function() {
		function ProcessDialog( config ) {
			ProcessDialog.super.call( this, config );
		}
		OO.inheritClass( ProcessDialog, OO.ui.ProcessDialog );
		
		ProcessDialog.static.name = 'watchcatelemsDialog';
		ProcessDialog.static.title = 'Obserwowanie elementów kategorii';
		ProcessDialog.static.actions = [
			{action: 'watch', label: 'Obserwuj', flags: 'progressive'},
			{action: 'unwatch', label: 'Przestań obserwować', flags: 'destructive'},
			{label: 'Zamknij', flags: 'close'}
		];
		
		ProcessDialog.prototype.initialize = function () {
			ProcessDialog.super.prototype.initialize.apply( this, arguments );
		
			this.content = new OO.ui.PanelLayout( {
				padded: true,
				expanded: false
			} );
			
			var $textParagraph = $('<p></p>').html('Obserwuj/przestań obserwować strony znajdujące się w tej kategorii (+podkategorie do głębokości 2)');
			var $depthSelect = $('<select id="depthSelect"></select>').css('vertical-align', 'middle');
			$depthSelect.append('<option value="NONE">głębokość 0 (tylko ta kategoria)')
						.append('<option value="1">głębokość 1')
						.append('<option value="2">głębokość 2');
			var $depthSelectParagraph = $('<p></p>').html("Głębokość: ").append($depthSelect);
		
			var $statusParagraph=$('<p id="watchcatelems-status"></p>').css('font-size', '90%');

			this.content.$element.append($textParagraph).append($depthSelectParagraph).append($statusParagraph);
			this.$depthSelect = $depthSelect;
		
			this.$body.append( this.content.$element );
		};
		
		var that = this;
		
		ProcessDialog.prototype.getActionProcess = function ( action ) {
			if ( action ) {
				return new OO.ui.Process( () => {
					if (action=='watch' || action=='unwatch') that.process(action, this.$depthSelect.val());
					
					this.close( {
						action: action
					} );
				} );
			}
			// Fallback to parent handler.
			return ProcessDialog.super.prototype.getActionProcess.call( this, action );
		};
		
		// Get dialog height.
		ProcessDialog.prototype.getBodyHeight = function () {
			return this.content.$element.outerHeight( true );
		};
		
		var windowManager = new OO.ui.WindowManager();
		$( document.body ).append( windowManager.$element );
		
		var processDialog = new ProcessDialog();
		
		windowManager.addWindows( [ processDialog ] );
		
		windowManager.openWindow( processDialog );
	},
	
	process: function(action, depth) {
		var watch = action == "watch";

		if(depth==="NONE")
		{
			$('#watchcatelems-status').html('Skrypt pracuje, proszę czekać...<br />(1/1) ' +mw.config.get('wgPageName')+'...');
			WatchCatElems2.watch(mw.config.get('wgPageName'), watch);
		}
		else
		{
			var listOfSubCats = [];
			listOfSubCats = WatchCatElems2.getSubCats(listOfSubCats, depth);
			if(listOfSubCats!==null)
			{
				$('#watchcatelems-status').html('('+1+'/'+(listOfSubCats.length+1)+') '+mw.config.get('wgPageName')+'...');
				WatchCatElems2.watch(mw.config.get('wgPageName'), watch);
				for(var i=0;i<listOfSubCats.length; i++)
				{
					$('#watchcatelems-status').html('Skrypt pracuje, proszę czekać...<br />('+(i+1)+'/'+(listOfSubCats.length+1)+') ' + listOfSubCats[i].replace(/_/g, ' ')+'...');
					WatchCatElems2.watch(listOfSubCats[i], watch);
				}
			}
			else
			{
				$('#watchcatelems-status').html('Skrypt pracuje, proszę czekać...<br />(1/1) ' +mw.config.get('wgPageName')+'...');
				WatchCatElems2.watch(mw.config.get('wgPageName'), watch);
			}
		}
		//po skończonym działaniu
		if(watch===true)
		{
			mw.notify("Wszystkie elementy tej kategorii zostały dodane do Twojej listy obserwowanych!", {autoHideSeconds: 3});
		}
		else
		{
			mw.notify("Wszystkie elementy tej kategorii zostały usunięte z Twojej listy obserwowanych!", {autoHideSeconds: 3});
		}
		//this.processDialog.close();
	},
	
	getSubCats: function(listOfSubCats, depth)
	{
		var Options='{"depth":'+depth+'}';
		var regexp = /title="(.*?)">/gi;
		
		this.api.defaults.ajax.async = false;
		this.api.get({action: 'categorytree', category: mw.config.get('wgPageName'), options: Options}).done(function(data)
		{
			data=decodeURIComponent(data.categorytree['*']);
			listOfSubCats=data.match(regexp);
		});
		if(listOfSubCats===null)
			return null;
		for(var i=0; i<listOfSubCats.length;i++)
			listOfSubCats[i]=listOfSubCats[i].replace(/(title="|">)/g, '');
			
		return listOfSubCats;
	},
	
	watch: function(catTitle, watch)
	{
		var kont="";
		var params;
		do {
			params = {action: 'watch', format: 'json', generator: 'categorymembers', 
					gcmtitle: catTitle, gcmcontinue:kont, gcmlimit: 500};
			
			if(watch === false) params.unwatch = true;
						
			this.api.postWithToken('watch', params).done(function(data)
			{
				if(data["continue"]===undefined) //ten sposób na sprawdzanie istnienia działa
					kont="";
				else
					kont=data.continue.gcmcontinue;
			});
		}while(kont!=="");
	},
};

$(document).ready(function () { mw.loader.using(['mediawiki.api', 'oojs-ui'], function()
{
	if(mw.config.get('wgNamespaceNumber') == 14 && mw.config.get('wgArticleId') > 0)
	{
		// Create portlet link
		
		switch(mw.user.options.get( 'skin' ))
		{
			case 'vector':
			case 'vector-2022':
				WatchCatElems2.portlet = 'p-views';
			break;
			
			case 'monobook':
			case 'modern':
				WatchCatElems2.portlet = 'p-cactions';
			break;
			
			case 'cologneblue':
				WatchCatElems2.portlet = 'footer-navigation';
			break;
			
			case 'minerva':
				WatchCatElems2.portlet = 'page-actions';
			break;
		}
		
		var portletLink = mw.util.addPortletLink(WatchCatElems2.portlet, '#', '👁', 'pt-watchcat-elems', "Dodaj/usuń wszystkie elementy tej kategorii do obserwowanych", null, "#ca-watch");
		
		$( portletLink ).click( function ( e ) {
			e.preventDefault();
			WatchCatElems2.createDialog();
		});
		
	}
});});
ℹ Źródło: artykuł „Wikipedysta:Tufor/WatchCatElems.js” w polskiej Wikipedii. Treść dostępna na licencji CC BY-SA 4.0; lista autorów w historii edycji. Wersja może się różnić od aktualnej na Wikipedii (kopia odświeżana okresowo).
💳 Revolut
Karta wielowalutowa do podróży — płacisz za granicą bez przewalutowań.
Odbierz kartę →
💰 ZEN.COM
Konta multiwalutowe i karty — płatności bez granic z poziomu aplikacji.
Sprawdź ZEN →
🌍 Wise
Przelewy za granicę po realnym kursie — bez ukrytych marż.
Wypróbuj Wise →
Linki polecające — obowiązują regulaminy usług.
FazaFM.com — radio i newsy Hrubek.pl — Hrubieszów blisko Ciebie Gorzkie Groszki — blog