MediaWiki:Wp/khw/TourwikiInstaller.js

From Wikimedia Incubator

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
(function () {
	'use strict';

	function enToken() {
		return $.ajax({
			url: '//en.wikipedia.org/w/api.php',
			data: {
				action: 'query',
				meta: 'tokens',
				format: 'json',
				origin: location.protocol + '//' + location.hostname
			},
			xhrFields: {
				withCredentials: true
			}
		}).then(function (data) { return data.query.tokens.csrftoken; });
	}
	
	function loadEnPage(title) {
		return new mw.Api({ ajax: { url: location.protocol + '//en.wikipedia.org/w/api.php' } }).get({
			action: 'query',
			prop: 'revisions',
			titles: title,
			rvprop: 'content',
			format: 'json',
			origin: location.protocol + '//' + location.hostname
		}).then(function (data) {
			try {
				return $.map(data.query.pages, function (value) { return value; })[0].revisions[0]['*'];
			} catch (ignore) { return ''; }
		});
	}
	
	function saveEnPage(title, token, text, summary) {
		return $.ajax({
			url: '//en.wikipedia.org/w/api.php',
			type: 'POST',
			data: {
				action: 'edit',
				title: title,
				text: text,
				summary: summary,
				minor: '',
				token: token,
				format: 'json',
				origin: location.protocol + '//' + location.hostname
			},
			xhrFields: {
				withCredentials: true
			}
		}).then(function (data) {
			if (data.error && data.error.info) {
				mw.notify(data.error.info);
				throw data.error.info;
			}
			if (data.edit && data.edit.nochange !== undefined) {
				throw 'no change!';
			}
		}, function (data) {
			mw.notify(data);
		});
	}
	
	$.when(
		$.ready, 
		mw.loader.using('mediawiki.util')
	).then(function () {
		if (mw.config.get('wgCanonicalSpecialPageName') !== "Blankpage" || mw.config.get('wgPageName').split('/')[1] !== "tourwiki") {
			return;
		}
		if (mw.config.get('wgUserName') === null) {
			alert('آلہ استعمال کرنے کے لیے، آپ کو سب سے پہلے لاگ ان کرنا ضروری ہے.');
			history.back();
			return;
		}
		$('#content').html($('<div>', {
			id: 'installermessage',
			text: 'زیر التوا ہے. . .',
			style: 'font-size: 200%; text-align: center; margin: 3em 0;'
		}));
		var userCommon = 'User:' + mw.config.get('wgUserName') + '/common.js';
		loadEnPage(userCommon).then(function (content) {
			if (content.indexOf('MediaWiki:Tourwiki.js') !== -1) {
				$('#installermessage').html('به نظر می‌رسد ابزار «به ویکی‌فا» در حال حاضر برایتان نصب شده است.<br><br><small>اگر برگهٔ ابزار «tourwiki» را هنگام بازدید مقاله‌های ایجادنشدهٔ فارسی در ویکی‌پدیای انگلیسی مشاهده نمی‌کنید، برای نصب آن به صورت دستی بر اساس <a href="//ur.wikipedia.org/wiki/%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7:%D8%A7%D8%A8%D8%B2%D8%A7%D8%B1/%D8%A8%D9%87_%D9%88%DB%8C%DA%A9%DB%8C%E2%80%8C%D9%81%D8%A7/%D9%86%D8%B5%D8%A8_%D8%AF%D8%B3%D8%AA%DB%8C">دستورالعمل</a> اقدام کنید؛ یا در <a href="//ur.wikipedia.org/wiki/%D9%88%DB%8C%DA%A9%DB%8C%E2%80%8C%D9%BE%D8%AF%DB%8C%D8%A7:%D9%82%D9%87%D9%88%D9%87%E2%80%8C%D8%AE%D8%A7%D9%86%D9%87/%D9%81%D9%86%DB%8C">قهوه‌خانهٔ فنی</a> درخواست کمک کنید.</small>');
				return;
			}
			$('#installermessage').empty().append(
				$('<span>', { class: 'mw-ui-button mw-ui-primary', text: 'نصب tourwiki!', style: 'width: auto; top: 50%;' }).click(function () {
					return enToken().then(function (token) {
						return saveEnPage(
							userCommon,
							token,
							'mw.loader.load("//ur.wikipedia.org/w/index.php?title=MediaWiki:Tourwiki.js&action=raw&ctype=text/javascript");\n' +
								content
									.replace('importScript("User:Ebraminio/tourwiki.js");\n', '')
									.replace('importScriptURI("//ur.wikipedia.org/w/index.php?title=MediaWiki:Tourwiki.js&action=raw&ctype=text/javascript");\n', ''),
							'+[[:ur:معاونت:آلہ/انگریزی سے اردو ویکی|tourwiki]]'
						);
					}).then(function () {
						location.href = "//en.wikipedia.org/wiki/" + userCommon;
					}, function (e) {
						mw.notify('نصب موفق آمیز نبود ' + e);
					});
				}),
				$('<div>', {
					text: 'طریقهٔ استفاده: پس از نصب به کمک دکمهٔ بالا، مقاله‌ای ناموجود در فارسی در ویکی‌پدیای انگلیسی را باز کنید و بر روی دکمهٔ «tourwiki» کلیک کنید.',
					style: 'padding: 2em; font-size: 50%'
				})
			);
		});
	});

}());