Участник:IKhitron/purge.js

mw.loader.using(['mediawiki.util', 'mediawiki.api', 'jquery.makeCollapsible'])
	.then(function() {
		var count, wait;
		var step = 1;
		var depth = 5;
		var api = new mw.Api();

		function collectSubCategories(cat) {
			console.log('cat: ' + cat);
			return $.getJSON('https://petscan.wmflabs.org', {
					language: 'ru',
					project: 'wikipedia',
					depth: depth - 1,
					categories: cat.substring(cat.indexOf(':') + 1),
					'ns[14]': 1,
					interface_language: 'en',
					active_tab: 'tab_output',
					doit: '',
					format: 'json'
				})
				.done(function(d) {
					purge([cat].concat(d['*'][0].a['*'].map(function(q) {
						return "Категория:" + q.title;
					}))
						.reverse());
				})
				.fail(function() {
					alert("Сбор подкатегорий не удался");
					purge([cat]);
				});
		}

		function purge(cats) {
			if (cats.length <= 0) {
				alert("Нуль-правки успешно завершены!");
				document.location.reload();
			} else
				postPurge(cats[0], cats);
		}

		function postPurge(cat, cats, addParams) {
			console.log('catnext: ' + cat);
			var apiParams = $.extend({
				action: 'purge',
				generator: 'categorymembers',
				'gcmtitle': cat,
				'gcmlimit': step,
				forcelinkupdate: 1
			}, addParams);
			api.post(apiParams)
				.done(function(d) {
					console.log(d);
					count += step;
					if (d.warnings === undefined && d["continue"] !== undefined &&
						d["continue"].gcmcontinue) {
						mw.notify(count + " страниц перепостроены");
						setTimeout(function() {
							postPurge(cat, cats, d["continue"]);
						}, wait);
					} else {
						alert("Нуль-правки успешно завершены! (" + cat.replace(/_/g, " ") + ")");
						cats.shift();
						purge(cats);
					}
				})
				.fail(function() {
					alert("Неудача");
				});
		}
		if (mw.config.get('wgNamespaceNumber') == 14) {
			wait = 1000;
			api.get({
					meta: 'userinfo',
					uiprop: 'ratelimits'
				})
				.done(function(d) {
					if (d && d.query && d.query.userinfo && d.query.userinfo.ratelimits &&
						d.query.userinfo.ratelimits.purge)
						wait = 2000;
					$( "#p-tb div ul" ).append( $('<li>').addClass('plainlinks')
						.append( $('<a>').text('Нуль-правки').css({cursor: 'pointer'})
						.click( function() {
							count = 0;
							collectSubCategories(mw.config.get('wgPageName')
								.replace(/_/g, " "));
						} ) ) );
				});
		}
	});

 

Prefix: a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9

Portal di Ensiklopedia Dunia