نکته: پس از انتشار ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را پاک کنید.
- فایرفاکس / سافاری: کلید Shift را نگه دارید و روی دکمهٔ Reload کلیک کنید، یا کلیدهای Ctrl-F5 یا Ctrl-R را با هم فشار دهید (در رایانههای اپل مکینتاش کلیدهای ⌘-R)
- گوگل کروم: کلیدهای Ctrl+Shift+R را با هم فشار دهید (در رایانههای اپل مکینتاش کلیدهای ⌘-Shift-R)
- اینترنت اکسپلورر/ Edge: کلید Ctrl را نگهدارید و روی دکمهٔ Refresh کلیک کنید، یا کلیدهای Ctrl-F5 را با هم فشار دهید
- اپرا: Ctrl-F5 را بفشارید.
// <nowiki>
(function($) {
/*
****************************************
*** twinklespeedy.js: CSD module
****************************************
* Mode of invocation: Tab ("CSD")
* Active on: Non-special, existing pages
*
* NOTE FOR DEVELOPERS:
* If adding a new criterion, add it to the appropriate places at the top of
* twinkleconfig.js. Also check out the default values of the CSD preferences
* in twinkle.js, and add your new criterion to those if you think it would be
* good.
*/
Twinkle.speedy = function twinklespeedy() {
// Disable on:
// * special pages
// * non-existent pages
if (mw.config.get('wgNamespaceNumber') < 0 || !mw.config.get('wgArticleId')) {
return;
}
Twinkle.addPortletLink(Twinkle.speedy.callback, 'حذف سریع', 'tw-csd', Morebits.userIsSysop ? 'حذف صفحه طبق وپ:محس' : 'درخواست حذف صفحه طبق وپ:محس'); // localized
};
// This function is run when the CSD tab/header link is clicked
Twinkle.speedy.callback = function twinklespeedyCallback() {
Twinkle.speedy.initDialog(Morebits.userIsSysop ? Twinkle.speedy.callback.evaluateSysop : Twinkle.speedy.callback.evaluateUser, true);
};
// Used by unlink feature
Twinkle.speedy.dialog = null;
// Used throughout
Twinkle.speedy.hasCSD = !!$('#delete-reason').length;
// The speedy criteria list can be in one of several modes
Twinkle.speedy.mode = {
sysopSingleSubmit: 1, // radio buttons, no subgroups, submit when "Submit" button is clicked
sysopRadioClick: 2, // radio buttons, no subgroups, submit when a radio button is clicked
sysopMultipleSubmit: 3, // check boxes, subgroups, "Submit" button already present
sysopMultipleRadioClick: 4, // check boxes, subgroups, need to add a "Submit" button
userMultipleSubmit: 5, // check boxes, subgroups, "Submit" button already pressent
userMultipleRadioClick: 6, // check boxes, subgroups, need to add a "Submit" button
userSingleSubmit: 7, // radio buttons, subgroups, submit when "Submit" button is clicked
userSingleRadioClick: 8, // radio buttons, subgroups, submit when a radio button is clicked
// are we in "delete page" mode?
// (sysops can access both "delete page" [sysop] and "tag page only" [user] modes)
isSysop: function twinklespeedyModeIsSysop(mode) {
return mode === Twinkle.speedy.mode.sysopSingleSubmit ||
mode === Twinkle.speedy.mode.sysopMultipleSubmit ||
mode === Twinkle.speedy.mode.sysopRadioClick ||
mode === Twinkle.speedy.mode.sysopMultipleRadioClick;
},
// do we have a "Submit" button once the form is created?
hasSubmitButton: function twinklespeedyModeHasSubmitButton(mode) {
return mode === Twinkle.speedy.mode.sysopSingleSubmit ||
mode === Twinkle.speedy.mode.sysopMultipleSubmit ||
mode === Twinkle.speedy.mode.sysopMultipleRadioClick ||
mode === Twinkle.speedy.mode.userMultipleSubmit ||
mode === Twinkle.speedy.mode.userMultipleRadioClick ||
mode === Twinkle.speedy.mode.userSingleSubmit;
},
// is db-multiple the outcome here?
isMultiple: function twinklespeedyModeIsMultiple(mode) {
return mode === Twinkle.speedy.mode.userMultipleSubmit ||
mode === Twinkle.speedy.mode.sysopMultipleSubmit ||
mode === Twinkle.speedy.mode.userMultipleRadioClick ||
mode === Twinkle.speedy.mode.sysopMultipleRadioClick;
}
};
// Prepares the speedy deletion dialog and displays it
Twinkle.speedy.initDialog = function twinklespeedyInitDialog(callbackfunc) {
var dialog;
Twinkle.speedy.dialog = new Morebits.simpleWindow(Twinkle.getPref('speedyWindowWidth'), Twinkle.getPref('speedyWindowHeight'));
dialog = Twinkle.speedy.dialog;
dialog.setTitle('انتخاب معیار حذف سریع'); // localized
dialog.setScriptName('توینکل'); // localized
dialog.addFooterLink('سیاست حذف سریع', 'وپ:محس'); // localized
dialog.addFooterLink('راهنمای توینکل', 'en:WP:TW/DOC#speedy'); // localized
var form = new Morebits.quickForm(callbackfunc, Twinkle.getPref('speedySelectionStyle') === 'radioClick' ? 'change' : null);
if (Morebits.userIsSysop) {
form.append({
type: 'checkbox',
list: [
{
label: 'فقط برچسب بزن، حذف نکن', // localized
value: 'tag_only',
name: 'tag_only',
tooltip: 'اگر فقط قصد دارید به صفحه برچسب بزنید، نه این که آن را حذف سریع کنید، این گزینه را انتخاب کنید.', // localized
checked: !(Twinkle.speedy.hasCSD || Twinkle.getPref('deleteSysopDefaultToDelete')),
event: function(event) {
var cForm = event.target.form;
var cChecked = event.target.checked;
// enable talk page checkbox
if (cForm.talkpage) {
cForm.talkpage.checked = !cChecked && Twinkle.getPref('deleteTalkPageOnDelete');
}
// enable redirects checkbox
cForm.redirects.checked = !cChecked;
// enable delete multiple
cForm.delmultiple.checked = false;
// enable notify checkbox
cForm.notify.checked = cChecked;
// enable deletion notification checkbox
cForm.warnusertalk.checked = !cChecked && !Twinkle.speedy.hasCSD;
// enable multiple
cForm.multiple.checked = false;
// enable requesting creation protection
cForm.salting.checked = false;
Twinkle.speedy.callback.modeChanged(cForm);
event.stopPropagation();
}
}
]
});
var deleteOptions = form.append({
type: 'div',
name: 'delete_options'
});
deleteOptions.append({
type: 'header',
label: 'گزینههای حذف' // localized
});
if (mw.config.get('wgNamespaceNumber') % 2 === 0 && (mw.config.get('wgNamespaceNumber') !== 2 || (/\//).test(mw.config.get('wgTitle')))) { // hide option for user pages, to avoid accidentally deleting user talk page
deleteOptions.append({
type: 'checkbox',
list: [
{
label: 'صفحه بحث را نیز حذف کن', // localized
value: 'talkpage',
name: 'talkpage',
tooltip: "این گزینه صفحهٔ بحث را هم حذف میکند. اگر معیار پ۸ (پروندهٔ موجود در انبار) را انتخاب کنید، این گزینه نادیده گرفته میشود و صفحهٔ بحث حذف نمیشود.", // localized
checked: Twinkle.getPref('deleteTalkPageOnDelete'),
event: function(event) {
event.stopPropagation();
}
}
]
});
}
deleteOptions.append({
type: 'checkbox',
list: [
{
label: 'همچنین حذف تغییرمسیرها', // localized
value: 'redirects',
name: 'redirects',
tooltip: 'این گزینه تمام تغییرمسیرهای ورودی به صفحه را نیز حذف میکند. از این گزینه برای حذفهایی که جهت انتقال یا ادغام صفحه هستند استفاده نکنید.', // localized
checked: Twinkle.getPref('deleteRedirectsOnDelete'),
event: function(event) {
event.stopPropagation();
}
}
]
});
deleteOptions.append({
type: 'checkbox',
list: [
{
label: 'حذف بر اساس چند معیار', // localized
value: 'delmultiple',
name: 'delmultiple',
tooltip: 'اگر این گزینه را انتخاب کنید، میتوانید بیش از یک معیار را به عنوان دلیل حذف صفحه برگزینید. برای مثال، ترکیب معیار ع۱۱ و م۷ برای حذف مقالهها رایج است.', // localized
event: function(event) {
Twinkle.speedy.callback.modeChanged(event.target.form);
event.stopPropagation();
}
}
]
});
deleteOptions.append({
type: 'checkbox',
list: [
{
label: 'آگاه کردن سازندهٔ صفحه از حذف آن', // localized
value: 'warnusertalk',
name: 'warnusertalk',
tooltip: 'یک الگوی آگاهسازی روی صفحهٔ بحث کاربری که صفحه را ایجاد کرده قرار داده میشود، به شرط آن که در ترجیحات توینکل، آگاهسازی را برای این معیار فعال کرده باشید ' + // localized
'و این گزینه را هم تیک زده باشید. ممکن است برای سازندهٔ مقاله پیام خوشامدی هم فرستاده شود.', // localized
checked: !Twinkle.speedy.hasCSD,
event: function(event) {
event.stopPropagation();
}
}
]
});
}
var tagOptions = form.append({
type: 'div',
name: 'tag_options'
});
if (Morebits.userIsSysop) {
tagOptions.append({
type: 'header',
label: 'گزینههای مربوط به برچسبها' // localized
});
}
tagOptions.append({
type: 'checkbox',
list: [
{
label: 'آگاه کردن سازندهٔ صفحه در صورت امکان', // localized
value: 'notify',
name: 'notify',
tooltip: 'یک الگوی آگاهسازی روی صفحهٔ بحث کاربری که صفحه را ایجاد کرده قرار میگیرد، به شرط آن که در ترجیحات توینکل، آگاهسازی را برای این معیار فعال کرده باشید ' + // localized
'و این گزینه را هم تیک بزنید. ممکن است برای سازندهٔ صفحه پیام خوشامدی هم فرستاده شود.', // localized
checked: !Morebits.userIsSysop || !(Twinkle.speedy.hasCSD || Twinkle.getPref('deleteSysopDefaultToDelete')),
event: function(event) {
event.stopPropagation();
}
}
]
});
tagOptions.append({
type: 'checkbox',
list: [
{
label: 'برچسب برای محافظت در برابر ایجاد', // localized
value: 'salting',
name: 'salting',
tooltip: 'اگر این گزینه را انتخاب کنید، کنار برچسب حذف سریع یک برچسب {{نمک}} هم قرار میدهد تا از مدیران درخواست کند که صفحه پس از حذف، در برابر ایجاد هم محافظت شود. فقط در صورتی این گزینه را استفاده کنید که صفحه بارها ایجاد شده باشد.', // localized
event: function(event) {
event.stopPropagation();
}
}
]
});
tagOptions.append({
type: 'checkbox',
list: [
{
label: 'برچسب با چند دلیل', // localized
value: 'multiple',
name: 'multiple',
tooltip: 'اگر این گزینه را انتخاب کنید، میتوانید بیش از یک معیار را به عنوان دلیل حذف صفحه برگزینید. برای مثال، ترکیب معیار ع۱۱ و م۷ برای حذف مقالهها رایج است.', // localized
event: function(event) {
Twinkle.speedy.callback.modeChanged(event.target.form);
event.stopPropagation();
}
}
]
});
form.append({
type: 'div',
name: 'work_area',
label: 'فعال کردن پودمان حذف سریع ناموفق بود. لطفاً دوباره تلاش کنید یا در [[وپ:فنی]] گزارش کنید.' // localized
});
if (Twinkle.getPref('speedySelectionStyle') !== 'radioClick') {
form.append({ type: 'submit', className: 'tw-speedy-submit' }); // Renamed in modeChanged
}
var result = form.render();
dialog.setContent(result);
dialog.display();
Twinkle.speedy.callback.modeChanged(result);
};
Twinkle.speedy.callback.getMode = function twinklespeedyCallbackGetMode(form) {
var mode = Twinkle.speedy.mode.userSingleSubmit;
if (form.tag_only && !form.tag_only.checked) {
if (form.delmultiple.checked) {
mode = Twinkle.speedy.mode.sysopMultipleSubmit;
} else {
mode = Twinkle.speedy.mode.sysopSingleSubmit;
}
} else {
if (form.multiple.checked) {
mode = Twinkle.speedy.mode.userMultipleSubmit;
} else {
mode = Twinkle.speedy.mode.userSingleSubmit;
}
}
if (Twinkle.getPref('speedySelectionStyle') === 'radioClick') {
mode++;
}
return mode;
};
Twinkle.speedy.callback.modeChanged = function twinklespeedyCallbackModeChanged(form) {
var namespace = mw.config.get('wgNamespaceNumber');
// first figure out what mode we're in
var mode = Twinkle.speedy.callback.getMode(form);
var isSysopMode = Twinkle.speedy.mode.isSysop(mode);
if (isSysopMode) {
$('[name=delete_options]').show();
$('[name=tag_options]').hide();
$('button.tw-speedy-submit').text('حذف صفحه'); // localized
} else {
$('[name=delete_options]').hide();
$('[name=tag_options]').show();
$('button.tw-speedy-submit').text('برچسب زدن به صفحه'); // localized
}
var work_area = new Morebits.quickForm.element({
type: 'div',
name: 'work_area'
});
if (mode === Twinkle.speedy.mode.userMultipleRadioClick || mode === Twinkle.speedy.mode.sysopMultipleRadioClick) {
var evaluateType = isSysopMode ? 'evaluateSysop' : 'evaluateUser';
work_area.append({
type: 'div',
label: 'هنگامی که کارتان تمام شد، کلیک کنید:' // localized
});
work_area.append({
type: 'button',
name: 'submit-multiple',
label: isSysopMode ? 'حذف صفحه' : 'برچسب زدن به صفحه', // localized
event: function(event) {
Twinkle.speedy.callback[evaluateType](event);
event.stopPropagation();
}
});
}
var radioOrCheckbox = Twinkle.speedy.mode.isMultiple(mode) ? 'checkbox' : 'radio';
if (isSysopMode && !Twinkle.speedy.mode.isMultiple(mode)) {
work_area.append({ type: 'header', label: 'دلیل دیگر' }); // localized
work_area.append({ type: radioOrCheckbox, name: 'csd', list: Twinkle.speedy.generateCsdList(Twinkle.speedy.customRationale, mode) });
}
if (namespace % 2 === 1 && namespace !== 3) {
// show db-talk on talk pages, but not user talk pages
work_area.append({ type: 'header', label: 'صفحههای بحث' }); // localized
work_area.append({ type: radioOrCheckbox, name: 'csd', list: Twinkle.speedy.generateCsdList(Twinkle.speedy.talkList, mode) });
}
if (!mw.config.get('wgIsRedirect')) {
switch (namespace) {
case 0: // article
case 1: // talk
work_area.append({ type: 'header', label: 'مقالهها' }); // localized
work_area.append({ type: radioOrCheckbox, name: 'csd', list: Twinkle.speedy.generateCsdList(Twinkle.speedy.articleList, mode) });
break;
case 2: // user
case 3: // user talk
work_area.append({ type: 'header', label: 'صفحههای کاربری' }); // localized
work_area.append({ type: radioOrCheckbox, name: 'csd', list: Twinkle.speedy.generateCsdList(Twinkle.speedy.userList, mode) });
break;
case 6: // file
case 7: // file talk
work_area.append({ type: 'header', label: 'پروندهها' }); // localized
work_area.append({ type: radioOrCheckbox, name: 'csd', list: Twinkle.speedy.generateCsdList(Twinkle.speedy.fileList, mode) });
if (!isSysopMode) {
work_area.append({ type: 'div', label: 'افزودن برچسب برای معیارهای پ۴ (بدون مجوز)، پ۵ (پروندهٔ غیر آزاد استفاده نشده)، پ۶ (فاقد دلیل برای استفادهٔ منصفانه) و پ۱۱ (بدون مدرک برای مجوز) با استفاده از زبانهٔ «تصاویر» در توینکل ممکن است.' }); // localized
}
break;
case 10: // template
case 11: // template talk
work_area.append({ type: 'header', label: 'الگوها' }); // localized
work_area.append({ type: radioOrCheckbox, name: 'csd', list: Twinkle.speedy.generateCsdList(Twinkle.speedy.templateList, mode) });
break;
case 14: // category
case 15: // category talk
work_area.append({ type: 'header', label: 'ردهها' }); // localized
work_area.append({ type: radioOrCheckbox, name: 'csd', list: Twinkle.speedy.generateCsdList(Twinkle.speedy.categoryList, mode) });
break;
case 100: // portal
case 101: // portal talk
work_area.append({ type: 'header', label: 'درگاهها' }); // localized
work_area.append({ type: radioOrCheckbox, name: 'csd', list: Twinkle.speedy.generateCsdList(Twinkle.speedy.portalList, mode) });
break;
default:
break;
}
} else {
if (namespace === 2 || namespace === 3) {
work_area.append({ type: 'header', label: 'صفحههای کاربری' }); // localized
work_area.append({ type: radioOrCheckbox, name: 'csd', list: Twinkle.speedy.generateCsdList(Twinkle.speedy.userList, mode) });
}
work_area.append({ type: 'header', label: 'تغییرمسیرها' }); // localized
work_area.append({ type: radioOrCheckbox, name: 'csd', list: Twinkle.speedy.generateCsdList(Twinkle.speedy.redirectList, mode) });
}
var generalCriteria = Twinkle.speedy.generalList;
// custom rationale lives under general criteria when tagging
if (!isSysopMode) {
generalCriteria = Twinkle.speedy.customRationale.concat(generalCriteria);
}
work_area.append({ type: 'header', label: 'دلایل عمومی' }); // localized
work_area.append({ type: radioOrCheckbox, name: 'csd', list: Twinkle.speedy.generateCsdList(generalCriteria, mode) });
var old_area = Morebits.quickForm.getElements(form, 'work_area')[0];
form.replaceChild(work_area.render(), old_area);
// if sysop, check if CSD is already on the page and fill in custom rationale
if (isSysopMode && Twinkle.speedy.hasCSD) {
var customOption = $('input[name=csd][value=reason]')[0];
if (customOption) {
if (Twinkle.getPref('speedySelectionStyle') !== 'radioClick') {
// force listeners to re-init
customOption.click();
customOption.parentNode.appendChild(customOption.subgroup);
}
customOption.subgroup.querySelector('input').value = decodeURIComponent($('#delete-reason').text()).replace(/\+/g, ' ');
}
}
};
Twinkle.speedy.generateCsdList = function twinklespeedyGenerateCsdList(list, mode) {
// mode switches
var isSysopMode = Twinkle.speedy.mode.isSysop(mode);
var multiple = Twinkle.speedy.mode.isMultiple(mode);
var hasSubmitButton = Twinkle.speedy.mode.hasSubmitButton(mode);
var pageNamespace = mw.config.get('wgNamespaceNumber');
var openSubgroupHandler = function(e) {
$(e.target.form).find('input').prop('disabled', true);
$(e.target.form).children().css('color', 'gray');
$(e.target).parent().css('color', 'black').find('input').prop('disabled', false);
$(e.target).parent().find('input:text')[0].focus();
e.stopPropagation();
};
var submitSubgroupHandler = function(e) {
var evaluateType = Twinkle.speedy.mode.isSysop(mode) ? 'evaluateSysop' : 'evaluateUser';
Twinkle.speedy.callback[evaluateType](e);
e.stopPropagation();
};
return $.map(list, function(critElement) {
var criterion = $.extend({}, critElement);
if (multiple) {
if (criterion.hideWhenMultiple) {
return null;
}
if (criterion.hideSubgroupWhenMultiple) {
criterion.subgroup = null;
}
} else {
if (criterion.hideWhenSingle) {
return null;
}
if (criterion.hideSubgroupWhenSingle) {
criterion.subgroup = null;
}
}
if (isSysopMode) {
if (criterion.hideWhenSysop) {
return null;
}
if (criterion.hideSubgroupWhenSysop) {
criterion.subgroup = null;
}
} else {
if (criterion.hideWhenUser) {
return null;
}
if (criterion.hideSubgroupWhenUser) {
criterion.subgroup = null;
}
}
if (mw.config.get('wgIsRedirect') && criterion.hideWhenRedirect) {
return null;
}
if (criterion.showInNamespaces && criterion.showInNamespaces.indexOf(pageNamespace) < 0) {
return null;
}
if (criterion.hideInNamespaces && criterion.hideInNamespaces.indexOf(pageNamespace) > -1) {
return null;
}
if (criterion.subgroup && !hasSubmitButton) {
if (Array.isArray(criterion.subgroup)) {
criterion.subgroup = criterion.subgroup.concat({
type: 'button',
name: 'submit',
label: isSysopMode ? 'حذف صفحه' : 'برچسب زدن به صفحه', // localized
event: submitSubgroupHandler
});
} else {
criterion.subgroup = [
criterion.subgroup,
{
type: 'button',
name: 'submit', // ends up being called "csd.submit" so this is OK
label: isSysopMode ? 'حذف صفحه' : 'برچسب زدن به صفحه', // localized
event: submitSubgroupHandler
}
];
}
// FIXME: does this do anything?
criterion.event = openSubgroupHandler;
}
return criterion;
});
};
Twinkle.speedy.customRationale = [
{
label: 'دلیل دیگر' + (Morebits.userIsSysop ? ' (دلیل شخصیسازیشده برای حذف)' : ' با استفاده از الگوی {{حذف سریع}}'), // localized
value: 'reason',
tooltip: 'دست کم یکی از معیارهای حذف سریع باید برای صفحه مصداق داشته باشد، و شما این را باید در دلیلی که مینویسید ذکر کنید. این گزینه برای آن نیست که وقتی دلیل حذف را بین گزینههای دیگر نیافتید از آن استفاده کنید.', // localized
subgroup: {
name: 'reason_1',
type: 'input',
label: 'دلیل: ', // localized
size: 60
},
hideWhenMultiple: true
}
];
Twinkle.speedy.talkList = [
{
label: 'ع۸: صفحهٔ بحث یتیم', // localized
value: 'talk',
tooltip: 'این معیار شامل صفحههای بحثی که برای پروژه مفید باشند نمیشود.؛ بهخصوص صفحههای بحث کاربر، بایگانیهای صفحههای بحث، و صفحهٔ بحث پروندههایی که در ویکیانبار موجود هستند.' // localized
}
];
Twinkle.speedy.fileList = [
{
label: 'پ۱: پرونده تکراری', // localized
value: 'redundantimage',
tooltip: 'هر پروندهای که تکراری باشد، قالبش با نسخهٔ دیگر یکی باشد و کیفیتش از آن کمتر باشد این شامل پروندههایی که نسخهٔ دیگری از آنها در ویکیانبار است و این به دلیل نوع اجازهنامهٔ تصویر است، نمیشود. این قبیل تصاویر باید با برچسب {{جا:موجود در انبار}} علامتگذاری شوند.', // localized
subgroup: {
name: 'redundantimage_filename',
type: 'input',
label: 'نام پروندهای که این پرونده تکرارش کردهاست: ', // localized
tooltip: 'پیشوند «پرونده:» را میتوانید ننویسید.' // localized
}
},
{
label: 'پ۲: تصاویر خراب یا خالی', // localized
value: 'noimage',
tooltip: 'پیش از حذف چنین تصاویری مطمئن شوید که مدیاویکی قادر به خواندن تصویر و نمایش یک نسخهٔ کوچکتر از آن تصویر نیست. این معیار شامل پروندههای خالی (بدون محتوا) و نیز میشود' // localized
},
{
label: 'پ۲: صفحهٔ توضیحات نالازم برای پروندهای که در ویکیانبار است', // localized
value: 'fpcfail',
tooltip: 'تصویری که در ویکیانبار است اما صفحهای در ویکیپدیا دارد که حاوی اطلاعات و برچسبهایی است که دیگر لازم نیستند.', // localized
hideWhenMultiple: true
},
{
label: 'پ۳: اجازهنامهٔ نامناسب', // localized
value: 'noncom',
tooltip: 'پروندهای که با مجوز «فقط استفادهٔ غیرتجاری»، «اثر اشتقاقی ممنوع»، یا «استفاده فقط با اخذ مجوز» منتشر شدهاست. این شامل تصاویری که مجوز «کرییتیو کامانز برای استفادهٔ غیرتجاری» دارند نیز میشود' // localized
},
{
label: 'پ۴: فاقد اطلاعات لازم در مورد اجازهنامه', // localized
value: 'unksource',
tooltip: 'پروندههایی که در ردهٔ «تصویرهای با منبع نامعلوم» یا «تصاویر با وضعیت حق تکثیر نامعلوم» یا نظایر آن قرار دارند: این پروندهها حاوی الگویی هستند که آنها را در چنین ردهای قرار میدهد و اگر هفت روز چنین شرایطی را داشته باشند )صرف نظر از این که کی بارگذاری شدهاند) میتوانند حذف شوند. توجه کنید که گاهی کاربران منبع اثر را در خلاصه ویرایش مینویسند پس حتماً تاریخچه را از این نظر بررسی کنید', // localized
hideWhenUser: true
},
{
label: 'پ۵: پروندههای غیرآزاد استفادهنشده', // localized
value: 'f5',
tooltip: 'پروندههایی که مجوز آزاد ندارند و در مالکیت عمومی نیستند و در هیچ مقالهای استفاده نشدهاند (یا تنها کاربردهایشان در مقالههایی بوده که حذف شدهاند)، و بعید است که در مقالهای دیگر استفاده شوند. استثناهای معقول عبارتند از پروندههایی که برای یک مقاله که به زودی ساخته میشود بارگذاری شدهاند. برای تصاویر غیرآزاد استفاده نشدهٔ دیگر، از برچسب «استفاده منصفانهٔ یتیم» در زبانهٔ «تصاویر» توینکل استفاده کنید', // localized
hideWhenUser: true
},
{
label: 'پ۶: فقدان توضیح در مورد استفادهٔ منصفانه', // localized
value: 'norat',
tooltip: 'میتوان هر پرونده فاقد دلیل برای استفادهٔ منصفانه را هفت روز پس از بارگذاری آن حذف کرد. پروندههای بارگذاری شده پیش از ۴/۵/۲۰۰۶ نباید حذف سریع شوند. در عوض باید کاربر بارگذار را از لزوم ارائه دلیل برای استفادهٔ منصفانه آگاه کنید. میتوان پروندههای بارگذاری شده پس از تاریخ یادشده را با دلیل «استفاده منصفانه» برچسبگذاری کرد.', // localized
hideWhenUser: true
},
{
label: 'پ۷: ادعای نادرست در مورد استفادهٔ منصفانه', // localized
value: 'badfairuse', // same as below
tooltip: 'این برچسب تنها برای پروندههایی با برچسب استفاده منصفانهای که آشکارا نامعتبر است، مثلاً یک برچسب {{نگاره نماد}} بر روی عکس یک شگوننما. در مواردی که نیازمند یک دورهٔ انتظار هستند (تصاویر قابل جایگزینی یا استدلال مورد اختلاف)، از گزینههای موجود در زبانهٔ حذف سریع پروندهٔ توینکل استفاده کنید.', // localized
subgroup: {
name: 'badfairuse_rationale',
type: 'input',
label: 'توضیح اختیاری: ', // localized
size: 60
}
},
{
label: 'پ۷: استفادهٔ منصفانه از رسانهای از یک آژانس تصویر تجاری که با موضوع مورد تفسیر، منبع مرتبط نیست', // localized
value: 'badfairuse', // same as above
tooltip: 'تصاویر یا رسانههای غیر آزاد از یک منبع تجاری (مثلاً آسوشید پرس یا گتی ایمجز)، در جایی که خود پرونده موضوع مورد تفسیر منبع نیست، بهعنوان ادعای نامعتبر استفادهٔ منصفانه در نظر گرفته میشوند و معیارهای سختگیرانهٔ وپ:ملاک منصفانه را احراز نخواهند کرد.', // localized
subgroup: {
name: 'badfairuse_rationale',
type: 'input',
label: 'توضیح اختیاری: ', // localized
size: 60
},
hideWhenMultiple: true
},
{
label: 'پ۸: تصویرهایی که همانند آنها در ویکیانبار موجود است', // localized
value: 'commons',
tooltip: 'مواردی که دارای شرایط زیر باشند، شامل این معیار میشوند: ۱: فرمت هر دو تصویر با هم یکسان است. ۲: مجوز پرونده(ها) بهطور منطقی مورد تردید است و مجوز بدون تردید در ویکیانبار مورد تأیید قرار گرفتهاست. ۳: تمامی اطلاعات موجود در صفحهٔ توضیحات پرونده در صفحهٔ توضیحات پرونده در ویکیانبار نیز موجود است. این شامل تاریخچهٔ کامل بارگذاری بههمراه پبوند به صفحهٔ کاربری محلی بارگذار میشود. ۴: پرونده حفاظت نشده است و صفحهٔ توضیحات پرونده دربردارندهٔ درخواست عدم انتقال به ویکیانبار نیست. ۵: اگر پرونده با نامی در ویکیانبار موجود است که با نام آن در ویکی محلی متفاوت است، هدف تمامی ارجاعات محلی به پرونده باید به عنوان مورد استفاده در انبار تغییر یابند. ۶: برای پروندههای {{بارگذاری شده از انبار}}: این پروندهها باید به محض این که از صفحهٔ اصلی برداشتهشدند، حذف سریع شوند', // localized
subgroup: {
name: 'commons_filename',
type: 'input',
label: 'نام پرونده در انبار: ', // localized
value: Morebits.pageNameNorm,
tooltip: 'اگر نام تصویر در انبار با نامش در اینجا یکسان است، میتوانید خالی بگذارید. نیازی به درج پیشوند «پرونده:» نیست.' // localized
},
hideWhenMultiple: true
},
{
label: 'پ۹: نقض آشکار حق تکثیر', // localized
value: 'imgcopyvio',
tooltip: 'پرونده از یک وبگاه یا منبع دیگر کپی شده است که فاقد مجوز سازگار با ویکیپدیا است و بارگذار نه مدعی استفادهٔ منصفانه است، و نه ادعای باورپذیری مبنی بر داشتن اجازهٔ استفادهٔ آزاد از پرونده را دارد. منابعی که فاقد مجوز سازگار با ویکیپدیا هستند شامل بایگانیهای عکسهای آرشیوی مانند گتی ایمجز یا کوربیس میشوند. مواردی که شامل نقض غیر آشکار حق تکثیر باشند، باید برای نظرخواهی به ویکیپدیا:نظرخواهی برای حذف بروند.', // localized
subgroup: [
{
name: 'imgcopyvio_url',
type: 'input',
label: 'پیوند به نشانی نقض حق تکثیر، شامل پیشوند "http://". اگر نقض حق تکثیر از یک منبع غیر اینترنتی رخ دادهاست و قادر به ارائهٔ نشانی نیستید، باید از جعبهٔ استدلال حذف استفاده کنید. ', // localized
size: 60
},
{
name: 'imgcopyvio_rationale',
type: 'input',
label: 'استدلال حذف برای نقض حق تکثیر غیر اینترنتی: ', // localized
size: 60
}
]
},
{
label: 'پ۱۰: پروندههای غیررسانهای یا بیاستفاده', // localized
value: 'badfiletype',
tooltip: 'پروندههای بارگذاری شده، تصویر، صوت یا ویدئو نیستند (بهعنوان مثال، پروندههایی با پسوند .doc، .pdf، یا .xls) و نه تنها در هیچ مقالهای استفاده نشدهاند، بلکه هیچ کاربرد دانشنامهای دیگری نیز برای آنها مورد انتظار نیست' // localized
},
{
label: 'پ۱۱: بدون مدرک در مورد مجوز', // localized
value: 'nopermission',
tooltip: 'اگر یک بارگذار مجوزی را مشخص کرده و از یک شخص ثالث، بدون ارائهٔ مدرکی مبنی بر موافقت آن شخص ثالث بهعنوان منبع/دارنده حق تکثیر نام برده است، آن آیتم باید هفت روز پس از ارسال آگاهسازی به بارگذار حذف شود.', // localized
hideWhenUser: true
},
{
label: 'ع۸: صفحه بحث پرونده بدون صفحه پرونده متناظر', // localized
value: 'imagepage',
tooltip: 'این معیار تنها در مواردی استفاده میشود که پرونده به هیچ عنوان موجود نباشد. برای پروندههای خراب و صفحههای توضیحات محلی برای پروندههای موجود در انبار، باید از پ۲ استفاده کرد؛ برای تغییرمسیرهای نامحتمل باید از ت۳ استفاده کرد؛ و برای تغییرمسیرهای شکسته از انبار باید از ت۴ استفاده کرد.' // localized
}
];
Twinkle.speedy.articleList = [
{
label: 'م۱: بدون بافت مشخص', // localized
value: 'nocontext',
tooltip: 'منظور مقالاتی است که نمیتوان موضوع مقاله را دریافت. مثال: او صاحب یک شرکت بزرگ است و خیلی کارش درست است. این معیار تنها باید برای مقالههای بسیار کوتاه استفاده شود. نداشتن بافت مشخص را نباید با بدون محتوا بودن (م۳) اشتباه گرفت.' // localized
},
{
label: 'م۲: مقالات غیرفارسی که در پروژههای دیگر ویکیمدیا وجود دارند', // localized
value: 'foreign',
tooltip: 'اگر مقالهٔ مورد نظر در پروژههای دیگر موجود نیست، باید از الگوی {{اصلاح ترجمه}} استفاده کرد. تمام مقالههای غرفارسی که مشمول این معیار نمیشوند (و مشمول هیچ یک از معیارهای دیگر حذف سریع نیز نیستند) باید برای بازبینی و ترجمهٔ احتمالی در صفحههای نیازمند ترجمه (صنت) فهرست شوند', // localized
subgroup: {
name: 'foreign_source',
type: 'input',
label: 'پیوند میانویکی به مقاله در زبان دیگر: ', // localized
tooltip: 'For example, fr:Bonjour'
}
},
{
label: 'م۳: بدون محتوا', // localized
value: 'nocontent',
tooltip: 'مقالههایی که تنها شامل مجموعهای از پیوندها (از جمله پیوند به بیرون، برچسب رده و جستارهای وابسته)، بازنویسی عنوان مقاله و تلاش برای برقراری ارتباط با فرد یا گروه مربوط به نام مقاله باشد. این موارد شامل صفحههای ابهامزدایی نمیشود.' // localized
},
{
label: 'م۵: انتقال به ویکی دیگر', // localized
value: 'transwiki',
tooltip: 'هر مقالهای که به نظرخواهی برای حذف رفته، نتیجهٔ نظرخواهی انتقال به ویکیدیگر بوده، انتقال به ویکی دیگر بهدرستی انجام شده و اطلاعات نگارنده نیز ثبت شدهاست. در مقابل، هر مقالهای که تنها شامل یک معنای لغتنامهوار بوده، انتقال به ویکی دیگر بهدرستی انجام شده و اطلاعات نگارنده نیز ثبت شدهاست.', // localized
subgroup: {
name: 'transwiki_location',
type: 'input',
label: 'پیوند به ویکی دیگری که باید به آن منتقل شود: ', // localized
tooltip: 'برای مثال، https://en.wiktionary.org/wiki/twinkle یا [[wikt:twinkle]]'
}
},
{
label: 'م۷: موضوع غیر قابل توجه (اشخاص، جانوران، سازمانها و وبگاهها و رخدادها)', // localized
value: 'a7',
tooltip: 'مقالهای دربارهٔ اشخاص حقیقی، دستهای از افراد، گروه، باشگاه، شرکت، محتوای وب، حیوان تک، سفر یا حزب که بهطور مشخص دلیل اهمیت موضوع را نشان نمیدهد. در صورت بحثبرانگیز بودن، یا در صورتی که در یک نظرخواهی قبلاً اجماع بر ماندن مقاله بودهاست، مقاله باید در عوض به نظرخواهی برای حذف برود.', // localized
hideWhenSingle: true
},
{
label: 'م۷: موضوع غیر قابل توجه (اشخاص)', // localized
value: 'person',
tooltip: 'مقالهای دربارهٔ یک شخص حقیق که بهطور مشخص دلیل اهمیت موضوع را نشان نمیدهد. در صورت بحثبرانگیز بودن، یا در صورتی که در یک نظرخواهی قبلاً اجماع بر ماندن مقاله بودهاست، مقاله باید در عوض به نظرخواهی برای حذف برود', // localized
hideWhenMultiple: true
},
{
label: 'م۷: موضوع غیر قابل توجه (گروه موسیقی)', // localized
value: 'band',
tooltip: 'مقالهای دربارهٔ یک گروه موسیقی، خواننده یا موسیقیدان که بهطور مشخص دلیل اهمیت موضوع را نشان نمیدهد.', // localized
hideWhenMultiple: true
},
{
label: 'م۷: موضوع غیر قابل توجه (باشگاه، گروه)', // localized
value: 'club',
tooltip: 'مقالهای دربارهٔ یک باشگاه، اجتماع یا گروع که بهطور مشخص دلیل اهمیت موضوع را نشان نمیدهد.', // localized
hideWhenMultiple: true
},
{
label: 'م۷: موضوع غیر قابل توجه (شرکت یا سازمان)', // localized
value: 'corp',
tooltip: 'مقالهای دربارهٔ یک شرکت یا سازمان که بهطور مشخص دلیل اهمیت موضوع را نشان نمیدهد.', // localized
hideWhenMultiple: true
},
{
label: 'م۷: موضوع غیر قابل توجه (وبسایت یا محتوای وب)', // localized
value: 'web',
tooltip: 'مقالهای دربارهٔ یک وبگاه، وبنوشت انجمن آنلاین، پادکست یا محتوای وب مشابه که بهطور مشخص دلیل اهمیت موضوع را نشان نمیدهد.', // localized
hideWhenMultiple: true
},
{
label: 'م۷: موضوع غیر قابل توجه (تک حیوان)', // localized
value: 'animal',
tooltip: 'مقالهای دربارهٔ یک حیوان تک (مقلاً یک حیوان خانگی) که بهطور مشخص دلیل اهمیت موضوع را نشان نمیدهد.', // localized
hideWhenMultiple: true
},
{
label: 'م۷: موضوع غیر قابل توجه (رویداد سازماندهی شده)', // localized
value: 'event',
tooltip: 'مقالهای دربارهٔ یک رویداد سازماندهی شده (تور، مأموریت، همایش، مهمانی و غیره) که بهطور مشخص دلیل اهمیت موضوع را نشان نمیدهد.', // localized
hideWhenMultiple: true
},
{
label: 'م۹: موضوع غیرقابل توجه (موسیقی ضبطشده)', // localized
value: 'a9',
tooltip: 'مقالهای دربارهٔ یک موسیقی ضبط شده که بهطور مشخص دلیل اهمیت موضوع را نشان نمیدهد و مقالهٔ خالق اثر نیز هرگز موجود نبوده یا حذف شده' // localized
},
{
label: 'م۱۰: مقالهٔ تکراری (مقالهٔ تازهساز که محتوای یکسانی با مقالهٔ قدیمیتر دارد)', // localized
value: 'a10',
tooltip: 'مقالهای که اخیراً ایجاد شده و تاریخچه کوتاهی دارد و یکی از محتوای موجود در دانشنامه را دوباره تکرار کرده و اطلاعات آن را گسترش یا بهبود نداده، و عنوان آن تغییر مسیر محتمل نیست. این شامل صفحات تفکیکشده یا هرگونه مقالهای که حاصل گسترش یا بازآرایی یک مقالهٔ قدیمیتر است، نمیشود..', // localized
subgroup: {
name: 'a10_article',
type: 'input',
label: 'نام مقالهٔ تکرار شده: ' // localized
}
},
{
label: 'م۱۱: مشخصاً ساختهٔ ذهن نویسنده است و هیچ ادعایی در مورد مهم بودنش وجود ندارد', // localized
value: 'madeup',
tooltip: 'مقالهای که به سادگی نشان میدهد که موضوع آن، توسط سازندهٔ مقاله یا کسی که او را شخصاً میشناسد، اختراع یا ابداع یا کشف شده و به صورت معتبر نشان نمیدهد که چرا موضوع آن مهم یا قابل توجه است.' // localized
}
];
Twinkle.speedy.categoryList = [
{
label: 'ر۱: ردهٔ خالی', // localized
value: 'catempty',
tooltip: 'ردههایی که برای چهار روز متوالی هیچ زیرردهای نداشته باشند و هیچ مقالهای هم در آن ردهها قرار نگیرد. این قاعده شمال ردههای ابهامزدایی و بعضی استثناهای دیگر نمیشود. اگر رده به تازگی ایجاد نشده باشد، امکان دارد قبلاً شامل مقالاتی بوده باشد، و بررسیهای بیشتری لازم خواهد بود.' // localized
},
{
label: 'ع۸: ردههای مربوط به الگوی حذف شده یا تغییرمسیر یافته', // localized
value: 'templatecat',
tooltip: 'ردههایی که بهطور مؤثر خالی هستند؛ زیرا الگو(ها)یی که قبلاً صفحهها را در رده قرار میداده حذف شده(اند). ردههایی که هنوز مورد استفادهٔ الگوها هستند مشمول این معیار نمیشوند.'
},
{
label: 'ع۸: تغییرمسیر به هدف ناموجود', // localized
value: 'redirnone',
tooltip: 'این معیار شامل هر صفحهای که برای پروژه مفید باشد، نمیشود؛ بهویژه: نظرخواهیهای حذف که جای دیگری فهرست نشدهاند، صفحههای کاربری و بحث کاربر، بایگانیهای صفحههای بحث، تغییر مسیرهای محتمل که میتواند هدف آنها را به صفحهای معتبر تغییر داد و صفحههای پرونده یا بحث پروندهای که در ویکیانبار موجود است.',
hideWhenMultiple: true
}
];
Twinkle.speedy.userList = [
{
label: 'ک۱: درخواست کاربر', // localized
value: 'userreq',
tooltip: 'زیرصفحههای شخصی، مطابق با درخواست کاربر صاحب صفحه. در برخی موارد نادر، ممکن است ماندن صفحه به دلایل مدیریتی لازم باشد. همچنین در بعضی مواقع، صفحههای اصلی کاربری نیز میتوانند حذف شوند. برای مشاهدهٔ رهنمودها و راهکارهای کامل، ویکیپدیا:صفحههای کاربری را ببینید',
subgroup: mw.config.get('wgNamespaceNumber') === 3 && mw.config.get('wgTitle').indexOf('/') === -1 ? {
name: 'userreq_rationale',
type: 'input',
label: 'استدلال (اجباری) در توضیح دلیل حذف این صفحهٔ بحث کاربر: ',
tooltip: 'صفحههای بحث کاربری تنها در شرایطی بسیار استثنائی حذف میشوند. وپ:حذف بحث را ببینید.',
size: 60
} : null,
hideSubgroupWhenMultiple: true
},
{
label: 'ک۲: کاربر ناموجود', // localized
value: 'nouser',
tooltip: 'صفحههای کاربری حسابهایی که ایجاد نشدهاند (ویژه:فهرست کاربران را بررسی کنید)'
},
{
label: 'ک۳: نگارخانه غیر آزاد', // localized
value: 'gallery',
tooltip: 'نگارخانههایی در فضای کاربری که بیشتر شامل پروندههای «استفادهٔ منصفانه» یا غیرآزاد هستند.سیاست محتوای آزاد ویکیپدیا کاربران را از نمایش پروندههای غیرآزاد، حتی آنهایی که خودشان بارگذاری کردهاند، در صفحههای کاربری منع میکند. استفاده از پروندههای آزاد، پروندههای مبتنی بر اجازهنامهٔ مستندات آزاد گنو، کریتیو کامنز و اجازهنامههای مشابه در کنار محتوای تحت مالکیت عمومی مجاز است، اما از پروندههای استفادهٔ منصفانه نباید در فضای کاربری استفاده کرد',
hideWhenRedirect: true
},
{
label: 'ک۵: نقض آشکار «وپ:میزبان وب نیست»',
value: 'notwebhost',
tooltip: 'صفحههایی در فضای کاربری شامل نوشتهها، اطلاعات، گفتگوها و/یا فعالیتهایی که مطابقت چندانی با اهداف ویکیپدیا ندارند و صاحب صفحه در خارج از فضای کاربری ویرایشی نداشته یا ویرایشهای بسیار کمی دارد. بهاستثناء پیشنویسهای قابل پذیرش و صفحههایی که تناقضی با «وپ:کاربر هست» ندارند.',
hideWhenRedirect: true
},
{
label: 'ک۱۱: صفحهٔ کاربری تبلیغاتی با نام کاربری تبلیغاتی', // localized
value: 'spamuser',
tooltip: 'صفحهٔ کاربری تبلیغاتی با نام کاربری که ترویجدهندهٔ موضوع مورد اشارهٔ تبلیغات است یا نشانهٔ ارتباط کاربر با آن است. دقت کنید که صرف داشتن یک صفحه دربارهٔ یک شرکت یا محصول در فضای کاربری یک کاربر، دلیلی برای حذف آن صفحه نیست. اگر صفحهٔ کاربری تبلیغاتی است، اما نام کاربری چنین نیست، در عوض از برچسب ع۱۱ استفاده کنید.',
hideWhenMultiple: true,
hideWhenRedirect: true
},
{
label: 'ع۱۳: درخواستهای پیشنویس مبا یا پیشنویس خالی که برای بیشتر از ۶ ماه رها شدهاست',
value: 'afc',
tooltip: 'هرگونه درخواست پیشنویس ردشده یا ارسالنشدهٔ مبا یا یک پیش نویس خالی که بیش از ۶ ماه است که ویرایش نشدهاست (بهاستثناء ویرایشهای ربات).',
hideWhenMultiple: true,
hideWhenRedirect: true
}
];
Twinkle.speedy.templateList = [
{
label: 'ال۲. نمایش نادرست ویکیپدیا:سیاستها و رهنمودها', // localized
value: 'policy',
tooltip: 'شامل الگوهای «حذف سریع» برای مشکلاتی که مشمول معیارهای حذف سریع نیستند و الگوهای تکذیبنامه که برای استفاده در مقالهها ایجاد شدهاند',
subgroup: {
name: 'policy_rationale',
type: 'input',
label: 'توضیح اختیاری: ', // localized
size: 60
},
hideSubgroupWhenSysop: true
},
{
label: 'ال۳. الگوهای تکراری و دارای کدنویسی سخت', // localized
value: 'duplicatetemplate',
tooltip: 'الگوهایی که بخش بزرگی از آنها رونوشتبرداری از یک الگوی دیگر است یا نمونههایی با کدنویسی سخت از الگوی دیگری هستند که میتواند کار مشابهی را انجام دهد',
subgroup: {
name: 'duplicatetemplate_2',
type: 'input',
label: 'الگویی که این الگو مازاد آن است: ',
tooltip: 'به استفاده از پیشوند «الگو:» نیازی نیست.'
},
hideWhenMultiple: true
}
];
Twinkle.speedy.portalList = [
{
label: 'د۱: هر درگاهی که اگر مقاله میبود، با معیارهای حذف سریع مقالهها حذف میشد',
value: 'p1',
tooltip: 'لازم است که یک معیار حذف مقاله که در این مورد صادق است را مشخص کنید (م۱، م۳، م۷, یا م۱۰).',
subgroup: {
name: 'p1_criterion',
type: 'input',
label: 'معیار مقالهای که در این مورد صادق است: '
}
},
{
label: 'د۲: درگاه کم مقاله (کمتر از سه مقالهٔ غیر خرد)',
value: 'emptyportal',
tooltip: 'هر درگاهی که برای موضوع اصلی آن تنها یک مقالهٔ سرآیند خُرد وجود داشته باشد یا مقالات غیر خردی که به موضوع درگاه میپردازند و برای عنوان درگاه مناسب هستند، کمتر از سه مقاله باشد'
}
];
Twinkle.speedy.generalList = [
{
label: 'ع۱: عبارتهای نامفهوم', // localized
value: 'nonsense',
tooltip: 'این معیار شامل نوشتار ضعیف، نوشتههای طرفدارانه، نوشتههای تحریکآمیز یا توهینآمیز، شایعات، نوشتههای تخیلی و ترجمههای بد نمیشود. به اختصار، اگر میشود فهمیدش، ع۱ قابل اعمال نیست.',
hideInNamespaces: [ 2 ] // Not applicable in userspace
},
{
label: 'ع۲: صفحههای آزمایشی', // localized
value: 'test',
tooltip: 'صفحههای ایجاد شده برای ویرایشهای آزمایشی یا آشنایی با سایر عملکردهای ویکیپدیا. زیرصفحاتی از صفحه تمرین که به عنوان آزمایش ایجاد شده را نیز شامل میشود اما خود صفحهٔ تمرین و زیرصفحههای فضای کاربری را که برای تمرین ساخته شدهاند، شامل نمیشود.',
hideInNamespaces: [ 2 ] // Not applicable in userspace
},
{
label: 'ع۳: خرابکاری محض', // localized
value: 'vandalism',
tooltip: 'خرابکاری محض و آشکار (از جمله تغییرمسیرهایی که در حین انتقال خرابکارانهٔ صفحهها ایجاد شدهاند)'
},
{
label: 'ع۳: کلکزنی آشکار', // localized
value: 'hoax',
tooltip: 'کلکزنی آشکار و واضح، در حد خرابکاری',
hideWhenMultiple: true
},
{
label: 'ع۴: ساخت دوبارهٔ صفحهای که بر پایهٔ نظرخواهیِ حذف حذف شدهاست', // localized
value: 'repost',
tooltip: 'رونوشتهایی از یک صفحهٔ حذفشده که بنا بر تازهترین نظرخواهی حذفش حذف گردیدهاست و نسخهٔ جدید آن به اندازهٔ کافی با آن یکسان است، ولو در هر عنوان دیگری. این معیار به محتوایی که مشخصاً برای بهبود به فضای نام کاربری یا پیشنویس منتقل شده است، یا مطالب احیاشده از راه بررسی حذف یا حذفشده از راه حذف زماندار یا حذف سریع (هرچند در مورد حذف سریع امکان دارد معیار حذف سریع قبلی یا دیگر معیارهای حذف سریع قابل استفاده باشند) اعمال نمیشود',
subgroup: {
name: 'repost_xfd',
type: 'input',
label: 'صفحه نظرخواهی حذف: ', // localized
tooltip: 'حتما باید با «ویکیپدیا:» آغاز شود', // localized
size: 60
}
},
{
label: 'ع۵: ساختهٔ کاربران تحریمشده یا بستهشده', // localized
value: 'banned',
tooltip: 'صفحههایی که توسط کاربران تحریمشده یا بستهشده و با نقض تحریم یا قطع دسترسی ساخته میشوند و دیگران هیچ ویرایش عمدهای (ویرایشی که جزئی نباشد و منجر به تغییر اساسی صفحه شده باشد) در آنها نکردهاند',
subgroup: {
name: 'banned_user',
type: 'input',
label: 'نام کاربری شخص طرد شده: ', // localized
tooltip: 'نباید با «کاربر:» آغاز شود' // localized
}
},
{
label: 'ع۶: انتقال', // localized
value: 'move',
tooltip: 'ممکن کردن انتقال از طریق حذف', // localized
subgroup: [
{
name: 'move_page',
type: 'input',
label: 'صفحه برای انتقال به اینجا: '
},
{
name: 'move_reason',
type: 'input',
label: 'دلیل: ',
size: 60
}
],
hideWhenMultiple: true
},
{
label: 'ع۶: نظرخواهی برای حذف', // localized
value: 'xfd',
tooltip: 'نظرخواهی برای حذف با «حذف شود» جمعبندی شده ولی صفحه حذف نشدهاست', // localized
subgroup: {
name: 'xfd_fullvotepage',
type: 'input',
label: 'صفحهای که گفتگو پیرامون حذف در آن انجام شده: ',
tooltip: 'باید با «ویکیپدیا:» آغاز شود',
size: 40
},
hideWhenMultiple: true
},
{
label: 'ع۶: انتقال از طریق کپی پیست', // localized
value: 'copypaste',
tooltip: 'این معیار تنها به انتقال حاصل از کپیکردن محتوای یک صفحهٔ دیگر که نیازمند حذف دائمی جهت بازکردن فضا برای انتقال صحیح یک صفحه است، اعمال میشود.',
subgroup: {
name: 'copypaste_sourcepage',
type: 'input',
label: 'صفحهٔ اولیه که محتوایش به اینجا کپی شده: '
},
hideWhenMultiple: true
},
{
label: 'ع۶: حذفهای فنی', // localized
value: 'g6',
tooltip: 'سایر وظایف نگهداری روزانه',
subgroup: {
name: 'g6_rationale',
type: 'input',
label: 'دلیل: ', // localized
size: 60
}
},
{
label: 'ع۷: درخواست از طرف نویسنده', // localized
value: 'author',
tooltip: 'این معیار تنها در صورتی اعمال میشود که درخواست با حسن نیت مطرح شده باشد و مشخص باشد که محتوای اصلی صفحه و صفحهٔ بحث وابسته به آن تنها اثر یک نویسنده است. خالی کردن صفحه (پاک کردن تمام نوشتهها) توسط نویسندهٔ اصلی را هم میتوان درخواست حذف تلقی کرد.',
subgroup: {
name: 'author_rationale',
type: 'input',
label: 'توضیحات اختیاری: ',
tooltip: 'میتواند شامل صفحهای باشد که نویسندهٔ صفحه در آن درخواست حذف دادهاست.',
size: 60
},
hideSubgroupWhenSysop: true
},
{
label: 'ع۸: صفحههای وابسته به صفحهای حذفشده یا ناموجود', // localized
value: 'g8',
tooltip: 'مانند صفحههای بحثی که مقالهشان وجود نداشته باشد، زیرصفحههای بدون صفحه مادر، صفحههای تصویر بدون هیچ تصویر، تغییرمسیرهایی که هدف معتبری ندارند، تغییرمسیرهای حلقهای یا ردههای مربوط به الگوهای حذفشده. این معیار شامل صفحههایی که برای پروژه مفید هستند، و بهویژه نظرخواهیهای حذفی که جای دیگری فهرست نشدهاند، صفحههای کاربری و صفحههای بحث کاربری، بایگانی بحثها، تغییرمسیرهای محتملی که بتوان آنها را به هدفهای معتبری تغییر داد، و صفحهٔ پرونده یا بحث پرونده مربوط به تصویری که در ویکیانبار بارگذاری شده است، نمیشود.',
subgroup: {
name: 'g8_rationale',
type: 'input',
label: 'توضیحات اختیاری: ',
size: 60
},
hideSubgroupWhenSysop: true
},
{
label: 'ع۸: زیرصفحههای فاقد صفحهٔ مادر', // localized
value: 'subpage',
tooltip: 'این معیار شامل صفحههایی که برای پروژه مفید هستند، و بهویژه نظرخواهیهای حذفی که جای دیگری فهرست نشدهاند، صفحههای کاربری و صفحههای بحث کاربری، بایگانی بحثها، تغییرمسیرهای محتملی که بتوان آنها را به هدفهای معتبری تغییر داد، و صفحهٔ پرونده یا بحث پرونده مربوط به تصویری که در ویکیانبار بارگذاری شده است، نمیشود.',
hideWhenMultiple: true,
hideInNamespaces: [ 0, 6, 8 ] // hide in main, file, and mediawiki-spaces
},
{
label: 'ع۱۰: صفحههای حمله', // localized
value: 'attack',
tooltip: 'صفحههایی که تنها هدف از ایجادشان حمله به یک شخص یا سازمان یا نظایر آن باشد (مثل ایجاد مقالهای با عنوان فلانی یک احمق است). این معیار همچنین شامل صفحههای زندگینامه افراد زنده نیز میشود؛ به شرطی که لحنی منفی داشته باشند، منبع کافی نداشته باشند و نسخهٔ بیطرفانهای در تاریخچهٔ آنها برای واگردانی موجود نباشد. مدیرانی که چنین صفحههایی را حذف میکنند نباید محتوای صفحه را در خلاصهٔ حذف درج کنند!'
},
{
label: 'ع۱۰: زندگینامه افراد زندهٔ کاملاً منفی و بدون منبع', // localized
value: 'negublp',
tooltip: 'صفحههای زندگینامهٔ افراد زنده که لحنی منفی داشته باشند، منبع کافی نداشته باشند و نسخهٔ بیطرفانهای در تاریخچهٔ آنها برای واگردانی موجود نباشد.',
hideWhenMultiple: true
},
{
label: 'ع۱۱: تبلیغات واضح', // localized
value: 'spam',
tooltip: 'صفحههایی که منحصراً به تبلیغ برای یک شرکت، محصول، گروه، خدمات، یا شخص میپردازند و برای دانشنامهای شدن، نیازمند بازنویسی عمده هستند. دقت کنید که اگر یک مقاله موضوعش را از دیدگاهی بیطرف توصیف کند، برای این معیار مناسب نیست؛ مقالهای که شامل تبلیغات آشکار است، باید دربردارندهٔ محتوای نامناسب نیز باشد'
},
{
label: 'ع۱۲: نقض آشکار حق تکثیر', // localized
value: 'copyvio',
tooltip: 'هر یک از این موارد: (۱) نقض حق تکثیر در یک نوبت و توسط یک نفر انجام شده باشد (پس توجه داشته باشید در مواردی که صفحهای در ویکیپدیا و با مشارکت ویرایشگران ایجاد میشود، بعداً توسط یک وبسایت دیگر کپی میشود، در صورتی که به ٱن وبسایت برخورد کردید، اشتباهاً تصور نکنید که مقاله از آنجا به ویکیپدیا کپی شدهاست؛ (۲) نسخهٔ دیگری در تاریخچهٔ مقاله نباشد که ناقض حق تکثیر نبوده ارزش نگهداری داشته باشد؛ (۳) کسی که محتوا (اعم از متن یا تصویر) را بارگذاری میکند، شواهدی از مجاز بودن تکثیر محتوا ارائه نکند، یا ادعای وی مشکوک به نظر برسد؛ یا (۴) متن مقاله از جایی کپی شده باشد که اجازه نامهٔ انتشار آن با ویکیپدیا سازگاری نداشته باشد.',
subgroup: [
{
name: 'copyvio_url',
type: 'input',
label: 'نشانی (در صورت وجود): ',
tooltip: 'اگر محتوا از یک منبع برخط کپی شدهاست، نشانی وبگاه را اینجا قرار دهید و پروتکلهای «http://» یا «https://» را هم از نشانی حذف نکنید.',
size: 60
},
{
name: 'copyvio_url2',
type: 'input',
label: 'نشانی بیشتر: ',
tooltip: 'اختیاری. باید با «http://» یا «https://» آغاز شود',
size: 60
},
{
name: 'copyvio_url3',
type: 'input',
label: 'نشانی بیشتر: ',
tooltip: 'اختیاری. باید با «http://» یا «https://» آغاز شود',
size: 60
}
]
},
{
label: 'ع۱۳: پیشنویس رهاشده', // localized
value: 'afc',
tooltip: 'هرگونه درخواست ردشده یا ارسالنشدهٔ مبا در فضای کاربری یا هرگونه صفحهٔ غیر تغییرمسیر در فضای نام پیش نویس که ظرف شش ماه گذشته ویرایش نشدهاست. پیشنویسهای خالی در هریک از این فضاهای نام را نیز شامل میشود.',
hideWhenRedirect: true,
showInNamespaces: [2, 118] // user, draft namespaces only
},
{
label: 'ع۱۴: صفحهٔ ابهامزدایی نالازم', // localized
value: 'disambig',
tooltip: 'این معیار به صفحههای ابهامزدایی اعمال میشود که ۱) عنوانشان با «(ابهامزدایی)» پایان مییابد ولی فقط یک صفحهٔ موجود در ویکیپدیا را ابهامزدایی میکنند؛ یا ۲) بدون توجه به عنوان، هیچ صفحهٔ موجود در ویکیپدیا را ابهامزدایی نمیکنند. اگر یک صفحهٔ ابهامزدایی فقط به یک مقاله پیوند داده و عنوانش با «(ابهامزدایی)» پایان نیابد، باید به یک تغییرمسیر تبدیل شود. ع۱۴ همچنین به تغییرمسیرهای یتیم «مثال (ابهامزدایی)» اعمال میشود که صفحهٔ هدف تغییرمسیرشان، صفحهٔ ابهامزدایی نبوده یا صفحهای با کارکرد مشابه ابهامزدایی (مثل مقالات مجموعهنمایه یا فهرست) نباشد'
}
];
Twinkle.speedy.redirectList = [
{
label: 'ت۲: تغییرمسیر به فضای نام دیگر', // localized
value: 'rediruser',
tooltip: 'شامل میانبرهای شبهفضای نام («وپ:») نمیشود. اگر صفحهٔ تغییرمسیر بر جا مانده از انتقال یک مقاله است، بهتر است یک یا دو روز قبل از حذف صفحهٔ تغییرمسیر صبر کرد',
showInNamespaces: [ 0 ]
},
{
label: 'ت۳: غلطهای املایی نامحتمل', // localized
value: 'redirtypo',
tooltip: 'تغییرمسیرها از غلط املایی یا عنوان بیمسمای رایج عموماً مفیدند، همانطور که تغییرمسیرها از زبانی دیگر نیز گاهی مفیدند'
},
{
label: 'R4: File namespace redirect with a name that matches a Commons page',
value: 'redircom',
tooltip: 'The redirect should have no incoming links (unless the links are cleary intended for the file or redirect at Commons).',
showInNamespaces: [ 6 ]
},
{
label: 'ع۶: تغییرمسیر به صفحهٔ ابهامزدایی قرار گرفته در جای اشتباه',
value: 'movedab',
tooltip: 'این معیار تنها بر تغییرمسیرها به صفحههای ابهامزدایی که عنوانشان با (ابهامزدایی) پایان مییابد و کاربرد اصلی برای آن موجود نیست، اعمال میشود.',
hideWhenMultiple: true
},
{
label: 'ع۸: تغییرمسیر به هدف ناموجود', // localized
value: 'redirnone',
tooltip: 'این معیار شامل صفحههایی که برای پروژه مفید هستند، و بهویژه نظرخواهیهای حذفی که جای دیگری فهرست نشدهاند، صفحههای کاربری و صفحههای بحث کاربری، بایگانی بحثها، تغییرمسیرهای محتملی که بتوان آنها را به هدفهای معتبری تغییر داد، و صفحهٔ پرونده یا بحث پرونده مربوط به تصویری که در ویکیانبار بارگذاری شده است، نمیشود.',
hideWhenMultiple: true
}
];
Twinkle.speedy.normalizeHash = {
'reason': 'حذف سریع', // localized
'nonsense': 'ع۱', // localized
'test': 'ع۲', // localized
'vandalism': 'ع۳', // localized
'hoax': 'ع۳', // localized
'repost': 'ع۴', // localized
'banned': 'ع۵', //localized
'move': 'ع۶', // localiezd
'xfd': 'ع۶', // localiezd
'movedab': 'ع۶', // localized
'copypaste': 'ع۶', // localized
'g6': 'ع۶', // localized
'author': 'ع۷', // localized
'g8': 'ع۸', // localized
'talk': 'ع۸', // localized
'subpage': 'ع۸', // localized
'redirnone': 'ع۸', // localized
'templatecat': 'ع۸', // localized
'imagepage': 'ع۸', // localized
'attack': 'ع۱۰', // localized
'negublp': 'ع۱۰', // localized
'spam': 'ع۱۱', // localized
'spamuser': 'ع۱۱', // localized
'copyvio': 'ع۱۲', // localized
'afc': 'ع۱۳', // localized
'disambig': 'ع۱۴', // localized
'nocontext': 'م۱', // localized
'foreign': 'م۲', // localized
'nocontent': 'م۳', // localized
'transwiki': 'م۵', // localized
'a7': 'م۷', // localized
'person': 'م۷', // localized
'corp': 'م۷', // localized
'web': 'م۷', // localized
'band': 'م۷', // localized
'club': 'م۷', // localized
'animal': 'م۷', // localized
'event': 'م۷', // localized
'a9': 'م۹', // localized
'a10': 'م۱۰', // localized
'madeup': 'م۱۱', // localized
'rediruser': 'ت۲', // localized
'redirtypo': 'ت۳', // localized
'redircom': 'ت۴', // localized
'redundantimage': 'پ۱', // localized
'noimage': 'پ۲', // localized
'fpcfail': 'پ۲', // localized
'noncom': 'پ۳', // localized
'unksource': 'پ۴', // localized
'unfree': 'پ۵', // localized
'f5': 'پ۵', // localized
'norat': 'پ۶', // localized
'badfairuse': 'پ۷', // localized
'commons': 'پ۸', // localized
'imgcopyvio': 'پ۹', // localized
'badfiletype': 'پ۱۰', // localized
'nopermission': 'پ۱۱', // localized
'catempty': 'ر۱', // localized
'userreq': 'ک۱', // localized
'nouser': 'ک۲', // localized
'gallery': 'ک۳', // localized
'notwebhost': 'ک۵', // localized
'policy': 'ال۲', // localized
'duplicatetemplate': 'ال۳', // localized
'p1': 'د۱', // localized
'emptyportal': 'د۲' // localized
};
Twinkle.speedy.callbacks = {
getTemplateCodeAndParams: function(params) {
var code, parameters, i;
if (params.normalizeds.length > 1) {
code = '{{db-multiple';
params.utparams = {};
$.each(params.normalizeds, function(index, norm) {
code += '|' + norm.toUpperCase();
parameters = params.templateParams[index] || [];
for (var i in parameters) {
if (typeof parameters[i] === 'string' && !parseInt(i, 10)) { // skip numeric parameters - {{db-multiple}} doesn't understand them
code += '|' + i + '=' + parameters[i];
}
}
$.extend(params.utparams, Twinkle.speedy.getUserTalkParameters(norm, parameters));
});
code += '}}';
} else {
parameters = params.templateParams[0] || [];
code = '{{db-' + params.values[0];
for (i in parameters) {
if (typeof parameters[i] === 'string') {
code += '|' + i + '=' + parameters[i];
}
}
if (params.usertalk) {
code += '|help=off';
}
code += '}}';
params.utparams = Twinkle.speedy.getUserTalkParameters(params.normalizeds[0], parameters);
}
return [code, params.utparams];
},
parseWikitext: function(wikitext, callback) {
var query = {
action: 'parse',
prop: 'text',
pst: 'true',
text: wikitext,
contentmodel: 'wikitext',
title: mw.config.get('wgPageName')
};
var statusIndicator = new Morebits.status('ایجاد خلاصهٔ حذف'); // localized
var api = new Morebits.wiki.api('تجزیهٔ الگوی حذف', query, function(apiObj) {
var reason = decodeURIComponent($(apiObj.getXML().querySelector('text').childNodes[0].nodeValue).find('#delete-reason').text()).replace(/\+/g, ' ');
if (!reason) {
statusIndicator.warn('امکان ایجاد خلاصه از الگوی حذف وجود ندارد'); // localized
} else {
statusIndicator.info('کامل'); // localized
}
callback(reason);
}, statusIndicator);
api.post();
},
noteToCreator: function(pageobj) {
var params = pageobj.getCallbackParameters();
var initialContrib = pageobj.getCreator();
// disallow notifying yourself
if (initialContrib === mw.config.get('wgUserName')) {
Morebits.status.warn('شما (' + initialContrib + ') این صفحه را ایجاد کردهاید؛ توقف آگاهسازی کاربر'); // localized
initialContrib = null;
// don't notify users when their user talk page is nominated/deleted
} else if (initialContrib === mw.config.get('wgTitle') && mw.config.get('wgNamespaceNumber') === 3) {
Morebits.status.warn('آگاهسازی مشارکتکنندهٔ اولیه: این کاربر صفحهٔ بحث خودش را ایجاد کردهاست؛ صرف نظر از آگاهسازی');
initialContrib = null;
// quick hack to prevent excessive unwanted notifications, per request. Should actually be configurable on recipient page...
} else if ( /* (initialContrib === 'Cyberbot I' || initialContrib === 'SoxBot') in case we had two bots uploading files in the future */
initialContrib === 'Rezabot' && params.normalizeds[0] === 'پ۲') { // if uploaded by Rezabot and criterion is F2 (پ۲)
Morebits.status.warn('آگاهسازی مشارکتکنندهٔ اولیه: صفحه بهصورت رویهای توسط ربات ایجاد شدهاست؛ صرف نظر از آگاهسازی');
initialContrib = null;
// Check for already existing tags
} else if (Twinkle.speedy.hasCSD && params.warnUser && !confirm('صفحه از پیش برچسب مرتبط با حذف را در خود دارد و بنابراین احتمالاً ایجادکننده قبلاً آگاهسازی شدهاست. آیا میخواهید کاربر را از این حذف نیز باخبر کنید؟')) {
Morebits.status.info('آگاهسازی مشارکتکنندهٔ اولیه', 'توسط کاربر لغو شد؛ صرف نظر از آگاهسازی.');
initialContrib = null;
}
if (initialContrib) {
var usertalkpage = new Morebits.wiki.page('بحث کاربر:' + initialContrib, 'آگاهسازی مشارکتکنندهٔ اولیه (' + initialContrib + ')'),
notifytext, i, editsummary;
// special cases: "db" and "db-multiple"
if (params.normalizeds.length > 1) {
notifytext = '\n{{subst:db' + (params.warnUser ? '-deleted' : '-notice') + '-multiple|1=' + Morebits.pageNameNorm;
var count = 2;
$.each(params.normalizeds, function(index, norm) {
notifytext += '|' + count++ + '=' + norm.toUpperCase();
});
} else if (params.normalizeds[0] === 'db') {
notifytext = '\n{{subst:db-reason' + (params.warnUser ? '-deleted' : '-notice') + '|1=' + Morebits.pageNameNorm;
} else {
notifytext = '\n{{subst:db-csd' + (params.warnUser ? '-deleted' : '-notice') + '-custom|1=';
if (params.values[0] === 'copypaste') {
notifytext += params.templateParams[0].sourcepage;
} else {
notifytext += Morebits.pageNameNorm;
}
notifytext += '|2=' + params.values[0];
}
for (i in params.utparams) {
if (typeof params.utparams[i] === 'string') {
notifytext += '|' + i + '=' + params.utparams[i];
}
}
notifytext += (params.welcomeuser ? '' : '|nowelcome=yes') + '}} ~~~~';
editsummary = 'آگاهسازی: ' + (params.warnUser ? '' : 'نامزدی ') + 'حذف سریع'; // localized
if (params.normalizeds.indexOf('ع۱۰') === -1) { // no article name in summary for G10 taggings
editsummary += ' [[:' + Morebits.pageNameNorm + ']].';
} else {
editsummary += ' صفحهٔ حمله.'; // localized
}
usertalkpage.setAppendText(notifytext);
usertalkpage.setEditSummary(editsummary + Twinkle.getPref('summaryAd'));
usertalkpage.setCreateOption('recreate');
usertalkpage.setFollowRedirect(true);
usertalkpage.append(function onNotifySuccess() {
// add this nomination to the user's userspace log, if the user has enabled it
if (params.lognomination) {
Twinkle.speedy.callbacks.user.addToLog(params, initialContrib);
}
}, function onNotifyError() {
// if user could not be notified, log nomination without mentioning that notification was sent
if (params.lognomination) {
Twinkle.speedy.callbacks.user.addToLog(params, null);
}
});
} else if (params.lognomination) {
// log nomination even if the user notification wasn't sent
Twinkle.speedy.callbacks.user.addToLog(params, null);
}
},
sysop: {
main: function(params) {
var reason;
if (!params.normalizeds.length && params.normalizeds[0] === 'db') {
reason = prompt('خلاصهٔ حذف برای استفاده، که در سیاههٔ حذف درج خواهد شد را وارد کنید:', '');
Twinkle.speedy.callbacks.sysop.deletePage(reason, params);
} else {
var code = Twinkle.speedy.callbacks.getTemplateCodeAndParams(params)[0];
Twinkle.speedy.callbacks.parseWikitext(code, function(reason) {
if (params.promptForSummary) {
reason = prompt('خلاصهٔ حذف برای استفاده را وارد کنید یا برای تأیید خلاصهٔ تولیدشده بهصورت خودکار، روی OK کلیک کنید تا.', reason);
}
Twinkle.speedy.callbacks.sysop.deletePage(reason, params);
});
}
},
deletePage: function(reason, params) {
var thispage = new Morebits.wiki.page(mw.config.get('wgPageName'), 'حذف صفحه'); // localized
if (reason === null) {
return Morebits.status.error('درخواست دلیل', 'لغو توسط کاربر'); // localized
} else if (!reason || !reason.replace(/^\s*/, '').replace(/\s*$/, '')) {
return Morebits.status.error('درخواست دلیل', "you didn't give one. I don't know... what with admins and their apathetic antics... I give up...");
}
var deleteMain = function(callback) {
thispage.setEditSummary(reason + Twinkle.getPref('deletionSummaryAd'));
thispage.deletePage(function() {
thispage.getStatusElement().info('انجام شد'); // localized
typeof callback === 'function' && callback();
Twinkle.speedy.callbacks.sysop.deleteTalk(params);
});
};
// look up initial contributor. If prompting user for deletion reason, just display a link.
// Otherwise open the talk page directly
if (params.warnUser) {
thispage.setCallbackParameters(params);
thispage.lookupCreation(function(pageobj) {
deleteMain(function() {
Twinkle.speedy.callbacks.noteToCreator(pageobj);
});
});
} else {
deleteMain();
}
},
deleteTalk: function(params) {
// delete talk page
if (params.deleteTalkPage &&
params.normalized !== 'پ۸' &&
document.getElementById('ca-talk').className !== 'new') {
var talkpage = new Morebits.wiki.page(mw.config.get('wgFormattedNamespaces')[mw.config.get('wgNamespaceNumber') + 1] + ':' + mw.config.get('wgTitle'), 'حذف صفحهٔ بحث'); // localized
talkpage.setEditSummary('[[وپ:محس#ع۸|ع۸]]: بحث صفحهٔ حذفشدهٔ «'+ Morebits.pageNameNorm + '»' + Twinkle.getPref('deletionSummaryAd'));
talkpage.deletePage();
// this is ugly, but because of the architecture of wiki.api, it is needed
// (otherwise success/failure messages for the previous action would be suppressed)
window.setTimeout(function() {
Twinkle.speedy.callbacks.sysop.deleteRedirects(params);
}, 1800);
} else {
Twinkle.speedy.callbacks.sysop.deleteRedirects(params);
}
},
deleteRedirects: function(params) {
// delete redirects
if (params.deleteRedirects) {
var query = {
'action': 'query',
'titles': mw.config.get('wgPageName'),
'prop': 'redirects',
'rdlimit': 'max' // 500 is max for normal users, 5000 for bots and sysops
};
var wikipedia_api = new Morebits.wiki.api('دریافت فهرست تغییرمسیرها...', query, Twinkle.speedy.callbacks.sysop.deleteRedirectsMain,
new Morebits.status('در حال حذف تغییرمسیرها')); // localized
wikipedia_api.params = params;
wikipedia_api.post();
}
// promote Unlink tool
var $link, $bigtext;
if (mw.config.get('wgNamespaceNumber') === 6 && params.normalized !== 'پ۸') {
$link = $('<a/>', {
'href': '#',
'text': 'برای رفتن به ابزار قطع پیوند اینجا کلیک کنید',
'css': { 'fontSize': '130%', 'fontWeight': 'bold' },
'click': function() {
Morebits.wiki.actionCompleted.redirect = null;
Twinkle.speedy.dialog.close();
Twinkle.unlink.callback('حذف کاربردها و/یا پیوندها به پروندهٔ ' + Morebits.pageNameNorm);
}
});
$bigtext = $('<span/>', {
'text': 'برای پیوندهای ورودی یتیم و حذف موارد کاربرد پرونده',
'css': { 'fontSize': '130%', 'fontWeight': 'bold' }
});
Morebits.status.info($bigtext[0], $link[0]);
} else if (params.normalized !== 'پ۸') {
$link = $('<a/>', {
'href': '#',
'text': 'برای رفتن به ابزار قطع پیوند اینجا کلیک کنید',
'css': { 'fontSize': '130%', 'fontWeight': 'bold' },
'click': function() {
Morebits.wiki.actionCompleted.redirect = null;
Twinkle.speedy.dialog.close();
Twinkle.unlink.callback('حذف ییوندها به صفحهٔ حذفشدهٔ ' + Morebits.pageNameNorm);
}
});
$bigtext = $('<span/>', {
'text': 'جهت قطع پیوندهای ورودی',
'css': { 'fontSize': '130%', 'fontWeight': 'bold' }
});
Morebits.status.info($bigtext[0], $link[0]);
}
},
deleteRedirectsMain: function(apiobj) {
var xmlDoc = apiobj.getXML();
var $snapshot = $(xmlDoc).find('redirects rd');
var total = $snapshot.length;
var statusIndicator = apiobj.statelem;
if (!total) {
statusIndicator.status('هیچ تغییرمسیری پیدا نشد'); // localized
return;
}
statusIndicator.status('0٪');
var current = 0;
var onsuccess = function(apiobjInner) {
var now = parseInt(100 * ++current / total, 10) + '%';
statusIndicator.update(now);
apiobjInner.statelem.unlink();
if (current >= total) {
statusIndicator.info(mw.language.convertNumber(now) + ' (کامل شد)'); // localized
Morebits.wiki.removeCheckpoint();
}
};
Morebits.wiki.addCheckpoint();
$snapshot.each(function(key, value) {
var title = $(value).attr('title');
var page = new Morebits.wiki.page(title, 'در حال حذف تغییرمسیر «' + title + '»'); // localized
page.setEditSummary('[[وپ:محس#ع۸|ع۸]]: تغییرمسیر به صفحهٔ حذفشدهٔ «' + Morebits.pageNameNorm + '»' + Twinkle.getPref('deletionSummaryAd'));
page.deletePage(onsuccess);
});
}
},
user: {
main: function(pageobj) {
var statelem = pageobj.getStatusElement();
// defaults to /doc for lua modules, which may not exist
if (!pageobj.exists() && mw.config.get('wgPageContentModel') !== 'Scribunto') {
statelem.error("بهنظر میرسد که صفحه موجود نیست؛ ممکن است که قبلاً حذف شدهباشد");
return;
}
var text = pageobj.getPageText();
var params = pageobj.getCallbackParameters();
statelem.status('در حال بررسی برچسبهای روی صفحه...'); // localized
// check for existing deletion tags
var tag = /(?:\{\{\s*(db|حس|delete|(db|حس)-.*?|(speedy deletion|حذف سریع)-.*?)(?:\s*\||\s*\}\}))/.exec(text);
// This won't make use of the db-multiple template but it probably should
if (tag && !confirm('یک الگوی {{' + tag[1] + '}} برای حذف سریع از پیش در صفحه قرار داده شدهاست. آیا میخواهید یک الگوی حذف سریع دیگر هم اضافه کنید؟')) { // localized
return;
}
var xfd = /\{\{((?:نظرخواهی برای حذف|article for deletion|proposed deletion|حذف زماندار|حز|حز زنز|prod blp|template for discussion)\/dated|[cfm]fd\b)/i.exec(text) || /#invoke:(RfD)/.exec(text);
if (xfd && !confirm('الگوی مرتبط با حذف {{' + xfd[1] + '}} در صفحه یافت شد. آیا همچنان میال به افزودن برچسب حذف سریع هستید؟')) {
return;
}
// given the params, builds the template and also adds the user talk page parameters to the params that were passed in
// returns => [<string> wikitext, <object> utparams]
var buildData = Twinkle.speedy.callbacks.getTemplateCodeAndParams(params),
code = buildData[0];
params.utparams = buildData[1];
// curate/patrol the page
if (Twinkle.getPref('markSpeedyPagesAsPatrolled')) {
pageobj.triage();
}
// Wrap SD template in noinclude tags if we are in template space.
// Won't work with userboxes in userspace, or any other transcluded page outside template space
if (mw.config.get('wgNamespaceNumber') === 10) { // Template:
code = '<noinclude>' + code + '</noinclude>';
}
// Remove tags that become superfluous with this action
text = text.replace(/\{\{\s*(پیشنویس صفحه کاربری|[Uu]serspace draft)\s*(\|(?:\{\{[^{}]*\}\}|[^{}])*)?\}\}\s*/g, '');
if (mw.config.get('wgNamespaceNumber') === 6) {
// 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, '');
}
if (params.requestsalt) {
if (params.normalizeds.indexOf('ع۱۰') === -1) {
code = code + '\n{{نمک}}'; // localized
} else {
code = '{{نمک}}\n' + code; // localized
}
}
// Generate edit summary for edit
var editsummary;
if (params.normalizeds.length > 1) {
editsummary = 'ثبت درخواست حذف سریع ('; // localized
$.each(params.normalizeds, function(index, norm) {
editsummary += '[[وپ:محس#' + norm + '|محس ' + norm + ']], '; // localized
});
editsummary = editsummary.substr(0, editsummary.length - 2); // remove trailing comma
editsummary += ').';
} else if (params.normalizeds[0] === 'حذف سریع') {
editsummary = 'ثبت درخواست [[وپ:محس|حذف سریع]] با معیار «' + params.templateParams[0]['1'] + '».'; // localized
} else {
editsummary = 'ثبت درخواست حذف سریع ([[وپ:محس#' + params.normalizeds[0] + '|محس ' + params.normalizeds[0] + ']]).'; // localized
}
// Set the correct value for |ts= parameter in {{db-g13}}
if (params.normalizeds.indexOf('ع۱۳') !== -1) {
code = code.replace('$TIMESTAMP', pageobj.getLastEditTime());
}
pageobj.setPageText(code + (params.normalizeds.indexOf('ع۱۰') !== -1 ? '' : '\n' + text)); // cause attack pages to be blanked
pageobj.setEditSummary(editsummary + Twinkle.getPref('summaryAd'));
pageobj.setWatchlist(params.watch);
if (params.scribunto) {
pageobj.setCreateOption('recreate'); // Module /doc might not exist
if (params.watch) {
// Watch module in addition to /doc subpage
var watch_query = {
action: 'watch',
titles: mw.config.get('wgPageName'),
token: mw.user.tokens.get('watchToken')
};
new Morebits.wiki.api('افزودن پودمان به فهرست پیگیری', watch_query).post();
}
}
pageobj.save(Twinkle.speedy.callbacks.user.tagComplete);
},
tagComplete: function(pageobj) {
var params = pageobj.getCallbackParameters();
// Notification to first contributor, will also log nomination to the user's userspace log
if (params.usertalk) {
var thispage = new Morebits.wiki.page(Morebits.pageNameNorm);
thispage.setCallbackParameters(params);
thispage.lookupCreation(Twinkle.speedy.callbacks.noteToCreator);
// or, if not notifying, add this nomination to the user's userspace log without the initial contributor's name
} else if (params.lognomination) {
Twinkle.speedy.callbacks.user.addToLog(params, null);
}
},
// note: this code is also invoked from twinkleimage
// the params used are:
// for CSD: params.values, params.normalizeds (note: normalizeds is an array)
// for DI: params.fromDI = true, params.templatename, params.normalized (note: normalized is a string)
addToLog: function(params, initialContrib) {
var usl = new Morebits.userspaceLogger(Twinkle.getPref('speedyLogPageName'));
usl.initialText =
"این صفحه شامل سیاههای از تمام نامزدیهای [[وپ:محس|حذف سریع]] انجامشده توسط این کاربر با استفاده از پودمان حذف سریع [[وپ:توینکل|توینکل]] است.\n\n" +
'اگر دیگر مایل به نگهداری این سیاهه نیستید، میتوانید از طریق [[ویکیپدیا:توینکل/ترجیحات|پنل ترجیحات]] آن را غیرفعال کنید و ' +
'این صفحه را تحت معیار [[وپ:محس#ک۱|محس ک۱]] نامزد حذف کنید.' +
(Morebits.userIsSysop ? '\n\nاین سیاهه، حذفهای سریع کاملی که با توینکل انجام شدهاند را رهگیری نمیکند.' : '');
var formatParamLog = function(normalize, csdparam, input) {
if ((normalize === 'ع۴' && csdparam === 'xfd') ||
(normalize === 'ع۶' && csdparam === 'page') ||
(normalize === 'ع۶' && csdparam === 'fullvotepage') ||
(normalize === 'ع۶' && csdparam === 'sourcepage') ||
(normalize === 'م۲' && csdparam === 'source') ||
(normalize === 'م۱۰' && csdparam === 'article') ||
(normalize === 'پ۱' && csdparam === 'filename') ||
(normalize === 'پ۵' && csdparam === 'replacement')) {
input = '[[:' + input + ']]';
} else if (normalize === 'ع۵' && csdparam === 'user') {
input = '[[:کاربر:' + input + ']]';
} else if (normalize === 'ع۱۲' && csdparam.lastIndexOf('url', 0) === 0 && input.lastIndexOf('http', 0) === 0) {
input = '[' + input + ' ' + input + ']';
} else if (normalize === 'ال۳' && csdparam === 'template') {
input = '[[:الگو:' + input + ']]';
} else if (normalize === 'پ۸' && csdparam === 'filename') {
input = '[[commons:' + input + ']]';
} else if (normalize === 'پ۱' && csdparam === 'criterion') {
input = '[[وپ:محس#' + input + ']]';
}
return ' {' + normalize + ' ' + csdparam + ': ' + 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 = mw.config.get('wgNamespaceNumber') === 6 ? ' ([{{fullurl:ویژه:سیاههها|page=' + mw.util.wikiUrlencode(mw.config.get('wgPageName')) + '}} سیاهه])' : '';
var editsummary = 'ثبت سیاههٔ نامزدی حذف سریع';
var appendText = '# [[:' + Morebits.pageNameNorm;
if (params.fromDI) {
appendText += ']]' + fileLogLink + ': حپ [[وپ:محس#' + params.normalized + '|محس ' + params.normalized.toUpperCase() + ']] ({{الگو|di-' + params.templatename + '}})';
// The params data structure when coming from DI is quite different,
// so this hardcodes the only interesting items worth logging
['reason', 'replacement', 'source'].forEach(function(item) {
if (params[item]) {
extraInfo += formatParamLog(params.normalized.toUpperCase(), item, params[item]);
return false;
}
});
editsummary += ' [[:' + Morebits.pageNameNorm + ']].'; // localized
} else {
if (params.normalizeds.indexOf('ع۱۰') === -1) { // no article name in log for G10 taggings
appendText += ']]' + fileLogLink + ': ';
editsummary += ' [[:' + Morebits.pageNameNorm + ']].'; // localized
} else {
appendText += '|این]] صفحهٔ حمله' + fileLogLink + ': '; // localized
editsummary += ' یک صفحهٔ حمله.'; // localized
}
if (params.normalizeds.length > 1) {
appendText += 'چند معیار ('; // localized
$.each(params.normalizeds, function(index, norm) {
appendText += '[[وپ:محس#' + norm + '|' + norm + ']], ';
});
appendText = appendText.substr(0, appendText.length - 2); // remove trailing comma
appendText += ')';
} else if (params.normalizeds[0] === 'db') {
appendText += '{{الگو|db-reason}}';
} else {
appendText += '[[وپ:محس#' + params.normalizeds[0] + '|محس ' + params.normalizeds[0] + ']] ({{الگو|db-' + params.values[0] + '}})';
}
// If params is "empty" it will still be full of empty arrays, but ask anyway
if (params.templateParams) {
// Treat custom rationale individually
if (params.normalizeds[0] && params.normalizeds[0] === 'db') {
extraInfo += formatParamLog('سفارشی', 'rationale', params.templateParams[0]['1']);
} else {
params.templateParams.forEach(function(item, index) {
var keys = Object.keys(item);
if (keys[0] !== undefined && keys[0].length > 0) {
// Second loop required since some items (G12, F9) may have multiple keys
keys.forEach(function(key, keyIndex) {
if (keys[keyIndex] === 'blanked' || keys[keyIndex] === 'ts') {
return true; // Not worth logging
}
extraInfo += formatParamLog(params.normalizeds[index].toUpperCase(), keys[keyIndex], item[key]);
});
}
});
}
}
}
if (params.requestsalt) {
appendText += '; حفاظت در برابر ایجاد درخواست شدهاست ([[وپ:نمک|نمکخورده]])'; // localized
}
if (extraInfo) {
appendText += '؛ اطلاعات اضافی:' + extraInfo; // localized
}
if (initialContrib) {
appendText += '؛ {{Userv|1=' + initialContrib + '}} آگاه شد'; // localized
}
appendText += ' ~~~~~\n';
usl.log(appendText, editsummary + Twinkle.getPref('summaryAd'));
}
}
};
// validate subgroups in the form passed into the speedy deletion tag
Twinkle.speedy.getParameters = function twinklespeedyGetParameters(form, values) {
var parameters = [];
$.each(values, function(index, value) {
var currentParams = [];
switch (value) {
case 'reason':
if (form['csd.reason_1']) {
var dbrationale = form['csd.reason_1'].value;
if (!dbrationale || !dbrationale.trim()) {
alert('دلیل دلخواه: لطفاً دلیلی ارائه کنید.'); // localized
parameters = null;
return false;
}
dbrationale = ''; // localized [override custom db templates]
currentParams['1'] = dbrationale;
}
break;
case 'userreq': // U1
if (form['csd.userreq_rationale']) {
var u1rationale = form['csd.userreq_rationale'].value;
if (mw.config.get('wgNamespaceNumber') === 3 && !(/\//).test(mw.config.get('wgTitle')) &&
(!u1rationale || !u1rationale.trim())) {
alert('محس ک۱: لطفاً در زمان نامزد کردن صفحههای بحث کاربری، استدلالی ارائه دهید.');
parameters = null;
return false;
}
currentParams.rationale = u1rationale;
}
break;
case 'repost': // G4
if (form['csd.repost_xfd']) {
var deldisc = form['csd.repost_xfd'].value;
if (deldisc) {
if (!/^(?:وپ|ویکیپدیا):/i.test(deldisc)) { // localized
alert('محس ع۴: صفحه نظرخواهی حذف باید با «ویکیپدیا:» آغاز شود.'); // localized
parameters = null;
return false;
}
currentParams.xfd = deldisc;
}
}
break;
case 'banned': // G5
if (form['csd.banned_user'] && form['csd.banned_user'].value) {
currentParams.user = form['csd.banned_user'].value.replace(/^\s*کاربر:/i, ''); // localized
}
break;
case 'move': // G6
if (form['csd.move_page'] && form['csd.move_reason']) {
var movepage = form['csd.move_page'].value,
movereason = form['csd.move_reason'].value;
if (!movepage || !movepage.trim()) {
alert('محس ع۶ (انتقال): لطفاً نام صفحهای که باید به اینجا انتقال یابد را مشخص کنید.'); // localized
parameters = null;
return false;
}
if (!movereason || !movereason.trim()) {
alert('محس ع۶ (انتقال): لطفاً دلیل انتقال را مشخص کنید.'); // localized
parameters = null;
return false;
}
currentParams.page = movepage;
currentParams.reason = movereason;
}
break;
case 'xfd': // G6
if (form['csd.xfd_fullvotepage']) {
var xfd = form['csd.xfd_fullvotepage'].value;
if (xfd) {
if (!/^(?:wp|wikipedia):/i.test(xfd)) {
alert('محس ع۶ (نبح): عنوان صفحهٔ نظرخواهی برای حذف، اگر وارد شدهباشد، باید با «ویکیپدیا:» آغاز شود.');
parameters = null;
return false;
}
currentParams.fullvotepage = xfd;
}
}
break;
case 'copypaste': // G6
if (form['csd.copypaste_sourcepage']) {
var copypaste = form['csd.copypaste_sourcepage'].value;
if (!copypaste || !copypaste.trim()) {
alert('محس ع۶ (کپیپیست): لطفاً نام صفحهٔ مبدأ را مشخص کنید.'); // localized
parameters = null;
return false;
}
currentParams.sourcepage = copypaste;
}
break;
case 'g6': // G6
if (form['csd.g6_rationale'] && form['csd.g6_rationale'].value) {
currentParams.rationale = form['csd.g6_rationale'].value;
}
break;
case 'author': // G7
if (form['csd.author_rationale'] && form['csd.author_rationale'].value) {
currentParams.rationale = form['csd.author_rationale'].value;
}
break;
case 'g8': // G8
if (form['csd.g8_rationale'] && form['csd.g8_rationale'].value) {
currentParams.rationale = form['csd.g8_rationale'].value;
}
break;
case 'attack': // G10
currentParams.blanked = 'yes';
// it is actually blanked elsewhere in code, but setting the flag here
break;
case 'copyvio': // G12
if (form['csd.copyvio_url'] && form['csd.copyvio_url'].value) {
currentParams.url = form['csd.copyvio_url'].value;
}
if (form['csd.copyvio_url2'] && form['csd.copyvio_url2'].value) {
currentParams.url2 = form['csd.copyvio_url2'].value;
}
if (form['csd.copyvio_url3'] && form['csd.copyvio_url3'].value) {
currentParams.url3 = form['csd.copyvio_url3'].value;
}
break;
case 'afc': // G13
currentParams.ts = '$TIMESTAMP'; // to be replaced by the last revision timestamp when page is saved
break;
case 'redundantimage': // F1
if (form['csd.redundantimage_filename']) {
var redimage = form['csd.redundantimage_filename'].value;
if (!redimage || !redimage.trim()) {
alert('محس پ۱: لطفاً نام پروندهٔ دیگر را مشخص کنید.');
parameters = null;
return false;
}
currentParams.filename = /^\s*(پرونده|تصویر|Image|File):/i.test(redimage) ? redimage : 'پرونده:' + redimage;
}
break;
case 'badfairuse': // F7
if (form['csd.badfairuse_rationale'] && form['csd.badfairuse_rationale'].value) {
currentParams.rationale = form['csd.badfairuse_rationale'].value;
}
break;
case 'commons': // F8
if (form['csd.commons_filename']) {
var filename = form['csd.commons_filename'].value;
if (filename && filename.trim() && filename !== Morebits.pageNameNorm) {
currentParams.filename = /^\s*(پرونده|تصویر|Image|File):/i.test(filename) ? filename : 'پرونده:' + filename;
}
}
break;
case 'imgcopyvio': // F9
if (form['csd.imgcopyvio_url'] && form['csd.imgcopyvio_rationale']) {
var f9url = form['csd.imgcopyvio_url'].value;
var f9rationale = form['csd.imgcopyvio_rationale'].value;
if ((!f9url || !f9url.trim()) && (!f9rationale || !f9rationale.trim())) {
alert('محس پ۹: در زمان نامزد کردن پرونده با معیار پ۹، باید یک نشانی یا دلیل (یا هردو) را وارد کنید.');
parameters = null;
return false;
}
if (form['csd.imgcopyvio_url'].value) {
currentParams.url = f9url;
}
if (form['csd.imgcopyvio_rationale'].value) {
currentParams.rationale = f9rationale;
}
}
break;
case 'foreign': // A2
if (form['csd.foreign_source']) {
var foreignlink = form['csd.foreign_source'].value;
if (!foreignlink || !foreignlink.trim()) {
alert('محس م۲: لطفاً یک پیوند میانویکی به مقالهای که این صفحه از آن کپی شدهاست، ارائه دهید.');
parameters = null;
return false;
}
currentParams.source = foreignlink;
}
break;
case 'transwiki': // A5
if (form['csd.transwiki_location'] && form['csd.transwiki_location'].value) {
currentParams.location = form['csd.transwiki_location'].value;
}
break;
case 'a10': // A10
if (form['csd.a10_article']) {
var duptitle = form['csd.a10_article'].value;
if (!duptitle || !duptitle.trim()) {
alert('محس م۱۰: لطفاً نام مقالهٔ تکرار شده را مشخص کنید.'); // localized
parameters = null;
return false;
}
currentParams.article = duptitle;
}
break;
case 'policy': // T2
if (form['csd.policy_rationale'] && form['csd.policy_rationale'].value) {
currentParams.rationale = form['csd.policy_rationale'].value;
}
break;
case 'duplicatetemplate': // T3
if (form['csd.duplicatetemplate_2']) {
var t3template = form['csd.duplicatetemplate_2'].value;
if (!t3template || !t3template.trim()) {
alert('محس ال۳: لطفاً نام الگوی تکرار شده را مشخص کنید.'); // localized
parameters = null;
return false;
}
currentParams.ts = '~~~~~';
currentParams.template = t3template.replace(/^\s*الگو:/i, '');
}
break;
case 'p1': // P1
if (form['csd.p1_criterion']) {
var criterion = form['csd.p1_criterion'].value;
if (!criterion || !criterion.trim()) {
alert('محس د۱: لطفاً یک معیار واحد را مشخص کنید.');
parameters = null;
return false;
}
currentParams.criterion = criterion;
}
break;
default:
break;
}
parameters.push(currentParams);
});
return parameters;
};
// Function for processing talk page notification template parameters
// key1/value1: for {{db-criterion-[notice|deleted]}} (via {{db-csd-[notice|deleted]-custom}})
// utparams.param: for {{db-[notice|deleted]-multiple}}
Twinkle.speedy.getUserTalkParameters = function twinklespeedyGetUserTalkParameters(normalized, parameters) {
var utparams = [];
// Special cases
if (normalized === 'حذف سریع') {
utparams['2'] = parameters['1'];
} else if (normalized === 'ع۶') {
utparams.key1 = 'to';
utparams.value1 = Morebits.pageNameNorm;
} else if (normalized === 'ع۱۲') {
['url', 'url2', 'url3'].forEach(function(item, idx) {
if (parameters[item]) {
idx++;
utparams['key' + idx] = item;
utparams['value' + idx] = utparams[item] = parameters[item];
}
});
} else {
// Handle the rest
var param;
switch (normalized) {
case 'ع۴':
param = 'xfd';
break;
case 'م۲':
param = 'source';
break;
case 'م۵':
param = 'location';
break;
case 'م۱۰':
param = 'article';
break;
case 'پ۹':
param = 'url';
break;
case 'د۱':
param = 'criterion';
break;
default:
break;
}
// No harm in providing a usertalk template with the others' parameters
if (param && parameters[param]) {
utparams.key1 = param;
utparams.value1 = utparams[param] = parameters[param];
}
}
return utparams;
};
Twinkle.speedy.resolveCsdValues = function twinklespeedyResolveCsdValues(e) {
var values = (e.target.form ? e.target.form : e.target).getChecked('csd');
if (values.length === 0) {
alert('لطفاً یک معیار را انتخاب کنید!');
return null;
}
return values;
};
Twinkle.speedy.callback.evaluateSysop = function twinklespeedyCallbackEvaluateSysop(e) {
var form = e.target.form ? e.target.form : e.target;
if (e.target.type === 'checkbox' || e.target.type === 'text' ||
e.target.type === 'select') {
return;
}
var tag_only = form.tag_only;
if (tag_only && tag_only.checked) {
Twinkle.speedy.callback.evaluateUser(e);
return;
}
var values = Twinkle.speedy.resolveCsdValues(e);
if (!values) {
return;
}
var templateParams = Twinkle.speedy.getParameters(form, values);
if (!templateParams) {
return;
}
var normalizeds = values.map(function(value) {
return Twinkle.speedy.normalizeHash[value];
});
// analyse each criterion to determine whether to watch the page, prompt for summary, or notify the creator
var watchPage, promptForSummary;
normalizeds.forEach(function(norm) {
if (Twinkle.getPref('watchSpeedyPages').indexOf(norm) !== -1) {
watchPage = true;
}
if (Twinkle.getPref('promptForSpeedyDeletionSummary').indexOf(norm) !== -1) {
promptForSummary = true;
}
});
var warnusertalk = false;
if (form.warnusertalk.checked) {
$.each(normalizeds, function(index, norm) {
if (Twinkle.getPref('warnUserOnSpeedyDelete').indexOf(norm) !== -1) {
if (norm === 'ع۶' && values[index] !== 'copypaste') {
return true;
}
warnusertalk = true;
return false; // break
}
});
}
var welcomeuser = false;
if (warnusertalk) {
$.each(normalizeds, function(index, norm) {
if (Twinkle.getPref('welcomeUserOnSpeedyDeletionNotification').indexOf(norm) !== -1) {
welcomeuser = true;
return false; // break
}
});
}
var params = {
values: values,
normalizeds: normalizeds,
watch: watchPage,
deleteTalkPage: form.talkpage && form.talkpage.checked,
deleteRedirects: form.redirects.checked,
warnUser: warnusertalk,
welcomeuser: welcomeuser,
promptForSummary: promptForSummary,
templateParams: templateParams
};
Morebits.simpleWindow.setButtonsEnabled(false);
Morebits.status.init(form);
Twinkle.speedy.callbacks.sysop.main(params);
};
Twinkle.speedy.callback.evaluateUser = function twinklespeedyCallbackEvaluateUser(e) {
var form = e.target.form ? e.target.form : e.target;
if (e.target.type === 'checkbox' || e.target.type === 'text' ||
e.target.type === 'select') {
return;
}
var values = Twinkle.speedy.resolveCsdValues(e);
if (!values) {
return;
}
var templateParams = Twinkle.speedy.getParameters(form, values);
if (!templateParams) {
return;
}
// var multiple = form.multiple.checked;
var normalizeds = [];
$.each(values, function(index, value) {
var norm = Twinkle.speedy.normalizeHash[value];
normalizeds.push(norm);
});
// analyse each criterion to determine whether to watch the page/notify the creator
var watchPage = false;
$.each(normalizeds, function(index, norm) {
if (Twinkle.getPref('watchSpeedyPages').indexOf(norm) !== -1) {
watchPage = true;
return false; // break
}
});
var notifyuser = false;
if (form.notify.checked) {
$.each(normalizeds, function(index, norm) {
if (Twinkle.getPref('notifyUserOnSpeedyDeletionNomination').indexOf(norm) !== -1) {
if (norm === 'ع۶' && values[index] !== 'copypaste') {
return true;
}
notifyuser = true;
return false; // break
}
});
}
var welcomeuser = false;
if (notifyuser) {
$.each(normalizeds, function(index, norm) {
if (Twinkle.getPref('welcomeUserOnSpeedyDeletionNotification').indexOf(norm) !== -1) {
welcomeuser = true;
return false; // break
}
});
}
var csdlog = false;
if (Twinkle.getPref('logSpeedyNominations')) {
$.each(normalizeds, function(index, norm) {
if (Twinkle.getPref('noLogOnSpeedyNomination').indexOf(norm) === -1) {
csdlog = true;
return false; // break
}
});
}
var params = {
values: values,
normalizeds: normalizeds,
watch: watchPage,
usertalk: notifyuser,
welcomeuser: welcomeuser,
lognomination: csdlog,
requestsalt: form.salting.checked,
templateParams: templateParams
};
Morebits.simpleWindow.setButtonsEnabled(false);
Morebits.status.init(form);
Morebits.wiki.actionCompleted.redirect = mw.config.get('wgPageName');
Morebits.wiki.actionCompleted.notice = 'برچسبزدن کامل شد';
// Modules can't be tagged, follow standard at TfD and place on /doc subpage
params.scribunto = mw.config.get('wgPageContentModel') === 'Scribunto';
var wikipedia_page = params.scribunto ? new Morebits.wiki.page(mw.config.get('wgPageName') + '/توضیحات', 'برچسبزدن صفحهٔ مستندات پودمان') : new Morebits.wiki.page(mw.config.get('wgPageName'), 'برچسبزدن صفحه');
wikipedia_page.setCallbackParameters(params);
wikipedia_page.load(Twinkle.speedy.callbacks.user.main);
};
})(jQuery);
// </nowiki>