مدیاویکی:Gadget-twinkleimage-2022.js
نکته: برای دیدن تغییرات، ممکن است نیاز باشد که حافظهٔ نهانی مرورگر خود را پس از انتشار پاکسازی کنید. گوگل کروم، فایرفاکس، مایکروسافت اج و سافاری: کلید ⇧ Shift را نگه دارید و روی دکمهٔ Reload در نوار ابزار مرورگر کلیک کنید. برای آگاهی از جزئیات و نحوهٔ پاکسازی حافظهٔ نهانی سایر مرورگرها، صفحهٔ ویکیپدیا:میانگیر مرورگرتان را خالی کنید را ببینید.
// <nowiki>
(function($) {
/*
****************************************
*** twinkleimage.js: Image CSD module
****************************************
* Mode of invocation: Tab ("DI")
* Active on: Local nonredirect file pages (not on Commons)
*/
Twinkle.image = function twinkleimage() {
if (mw.config.get('wgNamespaceNumber') === 6 && mw.config.get('wgArticleId') && !document.getElementById('mw-sharedupload') && !Morebits.isPageRedirect()) {
Twinkle.addPortletLink(Twinkle.image.callback, 'تصاویر', 'tw-di', 'نامزد کردن تصاویر برای حذف سریع با تأخیر');
}
};
Twinkle.image.callback = function twinkleimageCallback() {
var Window = new Morebits.simpleWindow(600, 330);
Window.setTitle('نامزد کردن برای حذف سریع تاریخدار');
Window.setScriptName('توینکل');
Window.addFooterLink('سیاست حذف سریع', 'وپ:محس#پروندهها');
Window.addFooterLink('ترجیحات تصاویر', 'وپ:توینکل/ترجیحات#image');
Window.addFooterLink('راهنمای توینکل', 'وپ:توینکل/توضیحات#image');
Window.addFooterLink('ارائهٔ بازخورد', 'بوپ:توینکل');
var form = new Morebits.quickForm(Twinkle.image.callback.evaluate);
form.append({
type: 'checkbox',
list: [
{
label: 'آگاهسازی بارگذار اصلی',
value: 'notify',
name: 'notify',
tooltip: "اگر میخواهید چندین تصویری که یک کاربر بارگذاری کرده را نامزد کنید، این گزینه را غیرفعال کنید تا صفحهٔ بحثشان بر اثر تعدد پیامها شلوغ نشود.",
checked: Twinkle.getPref('notifyUserOnDeli')
}
]
}
);
var field = form.append({
type: 'field',
label: 'نوع کنش مورد نیاز'
});
field.append({
type: 'radio',
name: 'type',
event: Twinkle.image.callback.choice,
list: [
{
label: 'بدون منبع (محس پ۴)',
value: 'بدون منبع',
checked: true,
tooltip: 'تصویر یا رسانهٔ فاقد اطلاعات منبع'
},
{
label: 'بدون مجوز (محس پ۴)',
value: 'بدون پروانه',
tooltip: 'تصویر یا پرونده فاقد اطلاعات در مورد وضعیت حق تکثیر'
},
{
label: 'بدون منبع و بدون مجوز (محس پ۴)',
value: 'بدون منبع و بدون پروانه',
tooltip: 'تصویر یا پروندهای که نه اطلاعاتی راجع به منبع دارد و نه راجع به وضعیت حق تکثیر'
},
{
label: 'استفادهٔ منصفانهٔ یتیم (محس پ۵)',
value: 'استفاده منصفانه یتیم',
tooltip: 'تصویر یا رسانهای که فاقد مجوز مورد نیاز برای استفاده در ویکیپدیا است و استفاده از آن تنها بهواسطهٔ ادعای استفادهٔ منصفانه بر پایهٔ ویکیپدیا:محتوای غیرآزاد مجاز است، اما در هیچ مقالهای استفاده نشده است'
},
{
label: 'فاقد توضیح در مورد استفادهٔ منصفانه (محس پ۶)',
value: 'بدون استفاده منطقی منصفانه',
tooltip: 'تصویر یا پرونده برای استفادهٔ منصفانه در ویکیپدیا بارگذاری شدهاست اما توضیحی داده نشده که چرا شرایط استفادهٔ منصفانه را داراست'
},
{
label: 'ادعای نادرست در مورد استفادهٔ منصفانه (محس پ۷)',
value: 'استفاده منطقی منصفانه مورد اختلاف',
tooltip: 'تصویر یا پروندهای که استدلال ارائه شده برای استفادهٔ منصفانه از آن به چالش کشیده شدهاست'
},
{
label: 'استفادهٔ منصفانه قابل جایگزینی (محس پ۷)',
value: 'استفاده منصفانه قابل جایگزین',
tooltip: 'تصویر یا پروندهای که شرط اول استفادهٔ منصفانه برایش صادق نیست ([[وپ:منصفانه#۱]]) یعنی موضوعی را نمایش میدهد که برایش پروندهٔ آزاد قابل تهیه است'
},
{
label: 'بدون مدرک در مورد مجوز (محس پ۱۱)',
value: 'بدون اجازهنامه',
tooltip: 'تصویر یا پروندهای که مستندات کافی برای آنکه نشان دهد خالق اثر اجازهٔ استفاده از آن را دادهاست، موجود نیست'
}
]
});
form.append({
type: 'div',
label: 'محدودهٔ کار',
name: 'work_area'
});
form.append({ type: 'submit' });
var result = form.render();
Window.setContent(result);
Window.display();
// We must init the parameters
var evt = document.createEvent('Event');
evt.initEvent('change', true, true);
result.type[0].dispatchEvent(evt);
};
Twinkle.image.callback.choice = function twinkleimageCallbackChoose(event) {
var value = event.target.values;
var root = event.target.form;
var work_area = new Morebits.quickForm.element({
type: 'div',
name: 'work_area'
});
switch (value) {
case 'بدون منبع و بدون پروانه':
case 'بدون منبع':
work_area.append({
type: 'checkbox',
list: [
{
label: 'غیر آزاد',
name: 'non_free',
tooltip: 'پرونده با ادعای استفادهٔ منصفانه بارگذاری شدهاست'
}
]
});
/* falls through */
case 'بدون پروانه':
work_area.append({
type: 'checkbox',
list: [
{
name: 'derivative',
label: 'تصویر اشتقاقی که منبع اثر اصلی آن ذکر نشدهاست',
tooltip: 'پرونده از اشتقاق یک یا چند اثر دیگر حاصل شدهاست و منبع آن آثار مشخص نشدهاست'
}
]
});
break;
case 'بدون اجازهنامه':
work_area.append({
type: 'input',
name: 'source',
label: 'منبع:'
});
break;
case 'استفاده منطقی منصفانه مورد اختلاف':
work_area.append({
type: 'textarea',
name: 'reason',
label: 'اشکال:'
});
break;
case 'استفاده منصفانه یتیم':
work_area.append({
type: 'input',
name: 'replacement',
label: 'جایگزین:',
tooltip: 'پروندهٔ اختیاری برای جایگزینی با این پرونده. درج پیشوند «پرونده:» اختیاری است.'
});
break;
case 'استفاده منصفانه قابل جایگزین':
work_area.append({
type: 'textarea',
name: 'reason',
label: 'دلیل:'
});
break;
default:
break;
}
root.replaceChild(work_area.render(), $(root).find('div[name="work_area"]')[0]);
};
Twinkle.image.callback.evaluate = function twinkleimageCallbackEvaluate(event) {
var input = Morebits.quickForm.getInputData(event.target);
if (input.replacement) {
input.replacement = (new RegExp('^' + Morebits.namespaceRegex(6) + ':', 'i').test(input.replacement) ? '' : 'پرونده:') + input.replacement;
}
var csdcrit;
switch (input.type) {
case 'بدون منبع و بدون پروانه':
case 'بدون منبع':
case 'بدون پروانه':
csdcrit = 'پ۴';
break;
case 'استفاده منصفانه یتیم':
csdcrit = 'پ۵';
break;
case 'بدون استفاده منطقی منصفانه':
csdcrit = 'پ۶';
break;
case 'استفاده منطقی منصفانه مورد اختلاف':
case 'استفاده منصفانه قابل جایگزین':
csdcrit = 'پ۷';
break;
case 'بدون اجازهنامه':
csdcrit = 'پ۱۱';
break;
default:
throw new Error('خطا در تابع Twinkle.image.callback.evaluate: معیار ناشناخته');
}
var lognomination = Twinkle.getPref('logSpeedyNominations') && Twinkle.getPref('noLogOnSpeedyNomination').indexOf(csdcrit.toLowerCase()) === -1;
var templatename = input.derivative ? 'اا ' + input.type : input.type;
var params = $.extend({
templatename: templatename,
normalized: csdcrit,
lognomination: lognomination
}, input);
Morebits.simpleWindow.setButtonsEnabled(false);
Morebits.status.init(event.target);
Morebits.wiki.actionCompleted.redirect = mw.config.get('wgPageName');
Morebits.wiki.actionCompleted.notice = 'برچسب زدن کامل شد';
// Tagging image
var wikipedia_page = new Morebits.wiki.page(mw.config.get('wgPageName'), 'در حال افزودن برچسب حذف به پرونده');
wikipedia_page.setCallbackParameters(params);
wikipedia_page.load(Twinkle.image.callbacks.taggingImage);
// Notifying uploader
if (input.notify) {
wikipedia_page.lookupCreation(Twinkle.image.callbacks.userNotification);
} else {
// add to CSD log if desired
if (lognomination) {
Twinkle.image.callbacks.addToLog(params, null);
}
// No auto-notification, display what was going to be added.
var noteData = document.createElement('pre');
noteData.appendChild(document.createTextNode('{{جا:حپ-' + templatename + '-آگاهسازی|1=' + mw.config.get('wgTitle') + '}} ~~~~'));
Morebits.status.info('آگاهسازی', [ 'این اطلاعات یا مشابه آن باید به بارگذار اصلی پرونده فرستاده شود:', document.createElement('br'), noteData ]);
}
};
Twinkle.image.callbacks = {
taggingImage: function(pageobj) {
var text = pageobj.getPageText();
var params = pageobj.getCallbackParameters();
// remove "move to Commons" tag - deletion-tagged files cannot be moved to Commons
text = text.replace(/\{\{(mtc|(انتقال |copy |move )?(to |به )?(commons|انبار|ویکیانبار)|move to wikimedia commons|copy to wikimedia commons)[^}]*\}\}/gi, '');
var tag = '{{حپ-' + params.templatename + '|تاریخ={{جا:#زمان:j F Y}}';
switch (params.type) {
case 'بدون منبع و بدون پروانه':
case 'بدون منبع':
tag += params.non_free ? '|non-free=yes' : '';
break;
case 'بدون اجازهنامه':
tag += params.source ? '|منبع=' + params.source : '';
break;
case 'استفاده منطقی منصفانه مورد اختلاف':
tag += params.reason ? '|اهمیت=' + params.reason : '';
break;
case 'استفاده منصفانه یتیم':
tag += params.replacement ? '|replacement=' + params.replacement : '';
break;
case 'استفاده منصفانه قابل جایگزین':
tag += params.reason ? '|1=' + params.reason : '';
break;
default:
break; // doesn't matter
}
tag += '|help=off}}\n';
/* additions for fawiki */
var type_summary = {
'بدون منبع': 'بدون منبع',
'بدون پروانه': 'بدون پروانه',
'بدون منبع و بدون پروانه': 'بدون منبع و بدون مجوز',
'استفاده منصفانه یتیم': 'استفادهٔ منصفانهٔ یتیم',
'بدون استفاده منطقی منصفانه': 'فاقد توضیح در مورد استفادهٔ منصفانه',
'استفاده منطقی منصفانه مورد اختلاف': 'ادعای نادرست در مورد استفادهٔ منصفانه',
'استفاده منصفانه قابل جایگزین': 'استفادهٔ منصفانهٔ قابل جایگزینی',
'بدون اجازهنامه': 'بدون مدرک برای مجوز'
};
/* end additions for fawiki */
pageobj.setPageText(tag + text);
pageobj.setEditSummary('این پرونده طبق [[وپ:محس#' + params.normalized + '|محس ' + params.normalized + ']] نامزد حذف شدهاست (' + type_summary[params.type] + ').');
pageobj.setChangeTags(Twinkle.changeTags);
pageobj.setWatchlist(Twinkle.getPref('deliWatchPage'));
pageobj.setCreateOption('nocreate');
pageobj.save();
},
userNotification: function(pageobj) {
var params = pageobj.getCallbackParameters();
var initialContrib = pageobj.getCreator();
// disallow warning yourself
if (initialContrib === mw.config.get('wgUserName')) {
pageobj.getStatusElement().warn('خودتان (' + initialContrib + ') این صفحه را ایجاد کردهاید؛ در حال چشمپوشی از آگاهسازی کاربر');
} else {
var usertalkpage = new Morebits.wiki.page('بحث کاربر:' + initialContrib, 'در حال آگاهسازی مشارکتکنندهٔ اولیه (' + initialContrib + ')');
var notifytext = '\n{{جا:حپ-' + params.templatename + '-آگاهسازی|1=' + mw.config.get('wgTitle');
if (params.type === 'بدون اجازهنامه') {
notifytext += params.source ? '|منبع=' + params.source : '';
}
notifytext += '}} ~~~~';
usertalkpage.setAppendText(notifytext);
usertalkpage.setEditSummary('آگاهسازی: برچسب زدن برای حذف [[:' + Morebits.pageNameNorm + ']].');
usertalkpage.setChangeTags(Twinkle.changeTags);
usertalkpage.setCreateOption('recreate');
usertalkpage.setWatchlist(Twinkle.getPref('deliWatchUser'));
usertalkpage.setFollowRedirect(true, false);
usertalkpage.append();
}
// add this nomination to the user's userspace log, if the user has enabled it
if (params.lognomination) {
Twinkle.image.callbacks.addToLog(params, initialContrib);
}
},
addToLog: function(params, initialContrib) {
var usl = new Morebits.userspaceLogger(Twinkle.getPref('speedyLogPageName'));
var csdparamTrans = {
'reason': 'دلیل',
'replacement': 'جایگزین',
'source': 'منبع'
};
usl.initialText =
"این صفحه شامل سیاههای از تمام نامزدیهای [[وپ:محس|حذف سریع]] انجامشده توسط این کاربر با استفاده از پودمان حذف سریع [[وپ:توینکل|توینکل]] است.\n\n" +
'اگر دیگر مایل به نگهداری این سیاهه نیستید، میتوانید از طریق [[ویکیپدیا:توینکل/ترجیحات|پنل ترجیحات]] آن را غیرفعال کنید و ' +
'این صفحه را تحت معیار [[وپ:محس#ک۱|محس ک۱]] نامزد حذف کنید.' +
((Morebits.userIsSysop || Morebits.userIsEliminator) ? '\n\nاین سیاهه، حذفهای سریع کاملی که با توینکل انجام شدهاند را رهگیری نمیکند.' : '');
var formatParamLog = function(normalize, csdparam, input) {
if (normalize === 'پ۵' && csdparam === 'replacement') {
input = '[[:' + input + ']]';
}
return ' {' + csdparamTrans[csdparam] + normalize + ': ' + input + '}';
};
var extraInfo = '';
// If a logged file is deleted but exists on commons, the wikilink will be blue, so provide a link to the log
var fileLogLink = ' ([{{نشانیکامل:ویژه:سیاههها|page=' + mw.util.wikiUrlencode(mw.config.get('wgPageName')) + '}} سیاهه])';
var appendText = '# [[:' + Morebits.pageNameNorm + ']]' + fileLogLink + ': حذف سریع با [[وپ:محس#' + params.normalized + '|محس ' + params.normalized + ']] ({{الگو|di-' + params.templatename + '}})';
['reason', 'replacement', 'source'].forEach(function(item) {
if (params[item]) {
extraInfo += formatParamLog(params.normalized, item, params[item]);
return false;
}
});
if (extraInfo) {
appendText += '؛ اطلاعات اضافی:' + extraInfo;
}
if (initialContrib) {
appendText += '؛ {{userv|1=' + initialContrib + '}} آگاه شد';
}
appendText += ' ~~~~~\n';
var editsummary = 'ثبت سیاههٔ نامزد کردن [[:' + Morebits.pageNameNorm + ']] برای حذف سریع.';
usl.changeTags = Twinkle.changeTags;
usl.log(appendText, editsummary);
}
};
Twinkle.addInitCallback(Twinkle.image, 'image');
})(jQuery);
// </nowiki>