پرش به محتوا

مدیاویکی:TofawikiUpload.js

از ویکی‌پدیا، دانشنامهٔ آزاد

نکته: برای دیدن تغییرات، ممکن است نیاز باشد که حافظهٔ نهانی مرورگر خود را پس از انتشار پاک‌سازی کنید. گوگل کروم، فایرفاکس، مایکروسافت اج و سافاری: کلید Shift را نگه دارید و روی دکمهٔ Reload در نوار ابزار مرورگر کلیک کنید. برای آگاهی از جزئیات و نحوهٔ پاک‌سازی حافظهٔ نهانی سایر مرورگرها، صفحهٔ ویکی‌پدیا:میانگیر مرورگرتان را خالی کنید را ببینید.

$(function () {
	'use strict';

	var enName = new mw.Uri().query.enName;
	$('#mw-htmlform-source').replaceWith($('<div>', {
		text: ' از ویکی‌پدیای انگلیسی، به صورت خودکار',
		id: 'tofawiki-image',
		style: 'font-size: large'
	}).prepend($('<img>', {
		src: 'https://en.wikipedia.org/w/thumb.php?f=' + enName.replace('File:', '') + '&w=140'
	})));
	$('[name=wpUpload]').click(function (e) {
		$(window).unbind(); // https://stackoverflow.com/a/15189610
		e.preventDefault();
		$(this).prop('disabled', 'disabled');
		mw.notify('کمی صبر کنید...', { autoHide: false });
		imageNameToUrl(enName).then(getBlob).then(function (blob) {
			var formData = new FormData();
			formData.append('action', 'upload');
			formData.append('filename', $('#wpDestFile').val());
			formData.append('token', mw.user.tokens.get('csrfToken'));
			formData.append('format', 'json');
			formData.append('text', $('#wpUploadDescription').val());
			formData.append('comment', 'بارگذاری ' + enName.replace('File:', '') + ' از ویکی‌پدیای انگلیسی به کمک ابزار به ویکی‌فا');
			formData.append('watchlist', $('#wpWatchthis').prop('checked') ? 'watch' : 'nochange');
			formData.append('ignorewarnings', $('#wpIgnoreWarning').prop('checked') ? '1' : '0');
			formData.append('file', blob);
			return $.ajax({
				url: mw.util.wikiScript('api'),
				contentType: false,
				processData: false,
				type: 'POST',
				data: formData
			});
		}).then(function () {
			location.href = mw.util.getUrl('پرونده:' + $('#wpDestFile').val());
		}, function (data) {
			mw.notify(data.error);
		});
	});
	
	function imageNameToUrl(name) {
		return new mw.Api({ ajax: { url: '//en.wikipedia.org/w/api.php' } }).get({
			action: 'query',
			titles: name,
			prop: 'imageinfo',
			iiprop: 'url',
			format: 'json',
			origin: location.protocol + '//' + location.hostname
		}).then(function (x) {
			return x.query.pages[Object.keys(x.query.pages)[0]].imageinfo[0].url;
		});
	}
	
	function getBlob(url) {
		var defer = $.Deferred();
		// http://stackoverflow.com/a/17682424
		var xhr = new XMLHttpRequest();
		xhr.onreadystatechange = function () {
			if (this.readyState == 4 && this.status == 200) {
				defer.resolve(this.response);
			}
		};
		xhr.open('GET', url);
		xhr.responseType = 'blob';
		xhr.send();
		return defer;
	}
	
	function loadPageTextAndCategoriesEn(title) {
		return new mw.Api({ ajax: { url: '//en.wikipedia.org/w/api.php' } }).get({
			action: 'query',
			prop: 'revisions|categories',
			titles: title,
			clprop: 'hidden',
			rvprop: 'content',
			format: 'json',
			origin: location.protocol + '//' + location.hostname
		}).then(function (data) {
			var page = data.query.pages[Object.keys(data.query.pages)[0]];
			return {
				text: page.revisions[0]['*'],
				categories: page.categories.map(function (x) { return x.title.replace(/^Category:/, ''); })
			};
		});
	}
	
	var PAGENAME_PLACEHOLDER = 'نام مقاله';
	loadPageTextAndCategoriesEn(enName).then(function (page) {
		var text = page.text, categories = page.categories.join('\n');
		$('#mw-htmlform-description').parent().after($('<textarea>', {
			disabled: 'disabled',
			dir: 'LTR',
			style: 'width: 600px; height: 400px;'
		}).val(text));
		
		var license, template, description;
 		if (/Album covers/i.test(categories)) {
			license = 'جلد آلبوم';
			template = 'دلیل استفاده جلد آلبوم غیر آزاد';
			description = 'جلد';
		} else if (/Coat of arms/i.test(categories)) {
			license = 'نشان غیر آزاد';
			template = 'دلیل استفاده جلد فیلم غیر آزاد';
			description = 'نشان غیر آزاد';
		} else if (/stamp/i.test(categories)) {
			license = 'نگاره تمبر';
			template = 'دلیل استفاده جلد فیلم غیر آزاد';
			description = 'نگاره تمبر';
		} else if (/Currency‎/i.test(categories)) {
			license = 'نگاره پول';
			template = 'دلیل استفاده جلد فیلم غیر آزاد';
			description = 'نگاره پول';
		} else if (/Film poster|video covers|movie posters/i.test(categories)) {
			license = 'جلد فیلم';
			template = 'دلیل استفاده جلد فیلم غیر آزاد';
			description = 'جلد';
		} else if (/Software covers/i.test(categories)) {
			license = 'جلد نرم‌افزار غیر آزاد';
			template = 'دلیل استفاده اثر غیر آزاد';
			description = 'جلد';
		} else if (/game covers/i.test(categories)) {
			license = 'جلد بازی';
			template = 'دلیل استفاده اثر غیر آزاد';
			description = 'جلد';
		} else if (/Book covers/i.test(categories)) {
			license = 'جلد کتاب';
			template = 'دلیل استفاده اثر غیر آزاد';
			description = 'جلد';
		} else if (/Magazine covers|newspaper covers|journal covers‎/i.test(categories)) {
			license = 'جلد مجله';
			template = 'دلیل استفاده اثر غیر آزاد';
			description = 'جلد';
		} else if (/audio samples|audio clips/i.test(categories)) {
			license = 'پرونده صوتی غیرآزاد';
			template = 'دلیل استفاده اثر غیر آزاد';
			description = 'پروندهٔ صوتی برای';
		} else if (/video samples|Fair use media/i.test(categories)) {
			license = 'پرونده ویدئویی غیرآزاد';
			template = 'دلیل استفاده اثر غیر آزاد';
			description = 'پروندهٔ ویدئویی برای';
		} else if (/logos|symbols|seals|icon/i.test(categories)) {
			license = 'نگاره نماد';
			template = 'دلیل استفاده لوگو غیر آزاد';
			description = 'نماد';
		} else if (/Fair use character artwork/i.test(categories)) {
			license = 'شخصیت غیرآزاد';
			template = 'دلیل استفاده اثر غیر آزاد';
			description = 'تصویر';
		} else if (/Non-free posters/i.test(categories)) {
			license = 'پوستر';
			template = 'دلیل استفاده اثر غیر آزاد';
			description = 'پوستر';
		} else if (/game covers/i.test(categories)) {
			license = 'جلد بازی';
			template = 'دلیل استفاده جلد بازی غیر آزاد';
			description = 'جلد بازی';
		} else if (/{{Non-free biog-pic/i.test(text)) {
			license = 'تصویر غیر آزاد فرد';
			template = 'دلیل استفاده اثر غیر آزاد';
			description = 'تصویر';
		} else if (/public domain/i.test(categories)) {
			license = 'PD-USonly';
			template = 'اطلاعات';
			description = 'تصویر';
		} else if (/abroad/i.test(categories)) {
			license = 'PD-US-1923-abroad';
			template = 'اطلاعات';
			description = 'تصویر';
		} else {
			license = 'منصفانه|عکس|عکاس یا ناشر آن';
			template = 'دلیل استفاده اثر غیر آزاد';
			description = 'تصویر';
		}
		if (template === 'اطلاعات') {
			$('#wpUploadDescription').val([
				'{{اطلاعات' ,
				'| توضیحات      = ' + description + ' [[' + PAGENAME_PLACEHOLDER + ']]',
				'| منبع         = [[:en:' + enName + '|ویکی‌پدیای انگلیسی]]',
				'| پدیدآور      = کاربران ویکی‌پدیای انگلیسی',
				'| اجازه‌نامه    = {' + '{' + license + '}}',
				'}}'
			].join('\n'));
		} else {
			$('#wpUploadDescription').val([
				'{{' + template,
				'| توضیحات       = ' + description + ' [[' + PAGENAME_PLACEHOLDER + ']]',
				'| منبع          = [[:en:' + enName + '|ویکی‌پدیای انگلیسی]]',
				'| مقاله         = ' + PAGENAME_PLACEHOLDER,
				'| بخش یا قسمت   = در جعبه',
				'| کیفیت پایین‌تر = بله',
				'| دلیل          = استفاده در مقالهٔ [[' + PAGENAME_PLACEHOLDER + ']]',
				'| جایگزین       = ندارد',
				'| اطلاعات بیشتر  = ',
				'}}',
				'',
				'== اجازه‌نامه ==',
				'{' + '{' + license + '}}'
			].join('\n'));
		}
		return (text.match(/\|Article\s*=\s*(.+)/i) || text.match(/''\[\[(.+?)\]\]''/) || [])[1];
	}).then(replaceFairUsedOnPlaceholder);

	function replaceFairUsedOnPlaceholder(enFairused) {
		if (!enFairused) { return false; }
		return new mw.Api({ ajax: { url: '//en.wikipedia.org/w/api.php' } }).get({
			action: 'query',
			format: 'json',
			redirects: '',
			titles: enFairused,
			origin: location.protocol + '//' + location.hostname
		}).then(function (result) {
			return new mw.Api({ ajax: { url: '//www.wikidata.org/w/api.php' } }).get({
				action: 'wbgetentities',
				format: 'json',
				sites: 'enwiki',
				titles: (result.query.pages[Object.keys(result.query.pages)[0]] || {}).title,
				origin: location.protocol + '//' + location.hostname
			});
		}).then(function (data) {
			return (data.entities[Object.keys(data.entities)[0]].sitelinks.fawiki || {}).title;
		}).then(function (fairUsedOn) {
			if (!fairUsedOn) {
				mw.notify('به نظر مقالهٔ مرتبط با عکس هنوز ایجاد نشده است');
			} else {
				$('#wpUploadDescription').val(
					$('#wpUploadDescription').val().replace(new RegExp(PAGENAME_PLACEHOLDER, 'g'), fairUsedOn)
				);
			}
		});
	}
});