מדיה ויקי:סקריפטים/101.js

מתוך אקו-ויקי, מקום מפגש בנושאי אקולוגיה, חברה וכלכלה.
קפיצה לניווט קפיצה לחיפוש

הערה: לאחר השמירה, ייתכן שיהיה צורך לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.

  • פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload), או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
  • גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
  • אינטרנט אקספלורר: להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh), או ללחוץ על צירוף המקשים Ctrl-F5.
  • אופרה: לפתוח תפריט ← הגדרות (במחשב מק: Opera ← העדפות) ואז ללחוץ על פרטיות ואבטחה ← מחק היסטוריית גלישה ← Cached images and files.
mw.loader.using(['mediawiki.util', 'mediawiki.api'])
	.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: 'he',
					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;
					$(mw.util.addPortletLink('p-cactions', '#', 'רענון', 'pt-refresh'))
						.click(function() {
							count = 0;
							collectSubCategories(mw.config.get('wgPageName')
								.replace(/_/g, " "));
						});
				});
		}
	});