مدیاویکی: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)
);
}
});
}
});