Jump to content

User:Yethrosh/tourwiki.js

From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
// for installing, add importScript("User:محمد شعیب/tourwiki.js") to your common.js, like https://en.wikipedia.org/w/index.php?diff=620778090
(function (mw, $) {
	if (mw.config.get('wgAction') !== 'view' ||
			(mw.config.get('wgNamespaceNumber') !== 0 && mw.config.get('wgNamespaceNumber') !== 14)) {
		return;
	}
 
	function faToken() {
		return $.ajax({
			url: '//ur.wikipedia.org/w/api.php',
			data: {
				action: 'tokens',
				format: 'json',
				origin: location.protocol + '//' + location.hostname
			},
			xhrFields: {
				withCredentials: true
			}
		}).then(function (data) { return data.tokens.edittoken; });
	}
 
	function loadFaPage(title) {
		return new mw.Api({ ajax: { url: location.protocol + '//ur.wikipedia.org/w/api.php' } }).get({
			action: 'query',
			prop: 'revisions',
			titles: title,
			rvprop: 'content',
			format: 'json',
			origin: location.protocol + '//' + location.hostname
		}).then(function (data) {
			return $.map(data.query.pages, function (value) { return value; })[0].revisions[0]['*'];
		});
	}
 
	function saveFaPage(title, token, text, summary) {
		return $.ajax({
			url: '//ur.wikipedia.org/w/api.php',
			type: 'POST',
			data: {
				action: 'edit',
				title: title,
				text: text,
				summary: summary,
				nocreate: '',
				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);
		});
	}
 
        var GENERAL_BOT = 'ویکیپیڈیا:درخواست تخلیق مضمون (روبالہ)';
	var CITIES_BOT = 'ویکیپیڈیا:ویکی منصوبہ تخلیق مضامین شہر/درخواست تخلیق';
	var CATEGORIES_BOT = 'ویکیپیڈیا:درخواست تخلیق زمرہ (روبالہ)';
	var PEOPLE_BOT = 'ویکیپیڈیا:درخواست تخلیق مضمون (روبالہ)/افراد';
	var OTHER_REQUESTS = 'ویکیپیڈیا:درخواست شدہ مضامین';

	var requestingPages = {
		'غیر فعال، اسے منتخب نہ کریں': GENERAL_BOT,
		'وپ:شہر، شہر و رہائشی علاقہ جات': CITIES_BOT,
		'غیر فعال، اسے منتخب نہ کریں': CATEGORIES_BOT,
		'غیر فعال، اسے منتخب نہ کریں': PEOPLE_BOT,
		'وپ:درخواست شدہ مضامین، برائے درخواست غیر روبہ جاتی مضامین': OTHER_REQUESTS
	};
 
 
	function addRequest(requestFaPage, faName) {
		return $.when(faToken(), loadFaPage(requestFaPage)).then(function (token, requests) {
			var enName = mw.config.get('wgPageName').replace(/_/g, ' ');
			if (requestFaPage !== OTHER_REQUESTS)
				requests = requests + '\n*' + faName + '@' + mw.config.get('wgTitle');
			else
				requests = requests.replace(
					/(<!-- \*\*\*توجہ\*\*\*: نئی درخواستیں)/,
					'* [[' + faName + ']] ([[:en:' + enName + ']])' + '\n$1'
				);
			return saveFaPage(
				requestFaPage,
				token,
				requests,
				'درخواست تخلیق ' +
					'[[:en:' + enName + '|' + enName + ']]' +
					' بذریعہ آلہ!'
			);
		});
	}
 
	function suggestRequestPlace() {
		if ($('.infobox.geography').length !== 0) {
			return CITIES_BOT;
		} else if ($('.infobox.biota, .infobox.haudio, .description a[href="/wiki/Single_(music)"]').length !== 0 ||
				($('#coordinates').length !== 0 && $('.infobox.vcard .fn').length !== 0)) {
			return GENERAL_BOT;
		} else if (mw.config.get('wgNamespaceNumber') === 14) {
			return CATEGORIES_BOT;
		} else if ($('.infobox.vcard .fn').length !== 0) {
			return PEOPLE_BOT;
		}
		return OTHER_REQUESTS;
	}
 
	function pageExists(page) {
		return $.ajax({
			url: '//ur.wikipedia.org/w/api.php',
			data: {
				action: 'query',
				titles: page,
				format: 'json',
				origin: location.protocol + '//' + location.hostname
			}
		}).then(function (data) { return data.query.pages['-1'] === undefined; });
	}
 
	$.when($.ready, mw.loader.using('jquery.ui')).then(function () {
		// if already has a link to fawiki, give up
		if ($('.interlanguage-link.interwiki-ur').length !== 0) { return; }

		// styles
		mw.util.addCSS(
			"#tourwiki-form * { font-family: Jameel Noori Nastaleeq, 'Alvi Nastaleeq', 'Droid Arabic Kufi', sans-serif !important; } " +
			"#tourwiki-form .ui-dialog-buttonset { float: left; } " +
			"#tourwiki-form .ui-dialog-titlebar-close { right: initial; left: .75em; } " +
			"#tourwiki-form .ui-dialog-title { float: right; }"
		);

 
		$('#ca-tourwiki').remove();
 
		$(mw.util.addPortletLink($('#p-views').length !== 0 ? 'p-views' : 'p-cactions', '#', 'tourwiki!', 'ca-tourwiki', null, null, '#ca-view')).click(function (e) {
			e.preventDefault();
			$('<div>', {
				dir: 'rtl',
				id: 'tourwiki-form',
				style: "position: relative;"
			}).append($('<div>', {
				style: 'margin-top: 0.4em;',
				text: 'تخلیق بذریعہ: '
			}).append($('<select>', {
				id: 'tourwiki-select',
				style: 'padding: 1px; vertical-align: baseline; font-family: inherit'
			}).append(
				$.map(requestingPages, function (item, description) {
					return $('<option>', { value: item, text: description }).prop('disabled', 
						mw.config.get('wgNamespaceNumber') === 14 && item !== CATEGORIES_BOT ||
						mw.config.get('wgNamespaceNumber') === 0 && item === CATEGORIES_BOT);
				})
			)), $('<div>', {
				style: 'padding-top: 1em',
				text: 'اردو عنوان: '
			}).append($('<input>', {
				dir: 'rtl',
				id: 'tourwiki-name',
				style: 'font-family: inherit; width: 50%'
			}).on('input', function () {
				var that = $(this), page = that.val();
				if (page === '') { $('#tourwiki-status').html(''); return; }
				if (mw.config.get('wgNamespaceNumber') == 14) { page = 'زمرہ:' + page; }
				pageExists(page).then(function (exists) {
					if (page !== that.val()) { // that request is no longer relevant
						return;
					}
					if (!exists) {
						$('#tourwiki-status').html('<span style="color: green; font-size: 140%">✓</span> «' + page + '» مناسب نام ہے۔');
					} else {
						$('#tourwiki-status').html('<span style="color: red; font-size: 140%">✗</span> «<a target="_blank" href="//ur.wikipedia.org/wiki/' + encodeURI(page) + '">' + page + '</a>» اس وقت موجود ہے!');
					}
				});
			}), $('<div>', {
				id: 'tourwiki-status'
			}))).dialog({
				width: 500,
				title: 'اردو ویکیپیڈیا میں درخواست تخلیق',
				buttons: [{
					text: 'درخواست',
					title: 'اس پر کلک کرنے کے بعد آپ کی درخواست محفوظ ہوجائے گی، تاہم کچھ وقفہ کے بعد روبہ آپ کی درخواست مکمل کرے گا!',
					class: 'ui-button-blue',
					click: function () {
						var faName = $('#tourwiki-name').val();
						var requestingPage = $('#tourwiki-select').val();
						if (!faName || !requestingPage) { return; }
						$(this).dialog('close');
						addRequest(requestingPage, faName).then(function () {
							mw.notify('درخواست کامیابی سے درج کرلی گئی');
						}, function () {
							mw.notify('درخواست تخلیق نامکمل');
						});
					}
				}],
				close: function () {
					$(this).remove();
				}
			}).parent().prop('id', 'tourwiki-form');
			$('#tourwiki-select').val(suggestRequestPlace());
		});
	});
}(mediaWiki, jQuery));