مستخدم:Alnokta/twinklespeedy.js
يمكن توفير توثيق لسكربت المستخدم هذا في الصفحة : مستخدم:Alnokta/twinklespeedy. |
ملاحظة: بعد الحفظ، قد يلزمك إفراغ الكاش لرؤية التغييرات ( ).
// If TwinkleConfig aint exist.
if( typeof( TwinkleConfig ) == 'undefined' ) {
TwinkleConfig = {};
}
/**
TwinkleConfig.summaryAd (string)en.wiki.x.io
If ad should be added or not to summary, default [[وب:لمح|لمح البصر]]
*/
if( typeof( TwinkleConfig.summaryAd ) == 'undefined' ) {
TwinkleConfig.summaryAd = " بواسطة [[وب:لمح]]";
}
/**
TwinkleConfig.deletionSummaryAd (string)
If ad should be added or not to deletion summary, default [[وب:لمح|لمح البصر]]
*/
if( typeof( TwinkleConfig.deletionSummaryAd ) == 'undefined' ) {
TwinkleConfig.deletionSummaryAd = " بواسطة [[وب:لمح|لمح البصر]]";
}
/**
TwinkleConfig.watchSpeedyPages (array)
What types of actions that should result in forced addition to watchlist
*/
if( typeof( TwinkleConfig.watchSpeedyPages ) == 'undefined' ) {
TwinkleConfig.watchSpeedyPages = [ 'g3', 'g5', 'g10', 'g11', 'g12' ];
}
/**
TwinkleConfig.markSpeedyPagesAsMinor (boolean)
If, when applying speedy template to page, to mark the edit as minor, default true
*/
if( typeof( TwinkleConfig.markSpeedyPagesAsMinor ) == 'undefined' ) {
TwinkleConfig.markSpeedyPagesAsMinor = true;
}
/**
TwinkleConfig.notifyUserOnSpeedyDeletionNomination (array)
What types of actions that should result that the author of the page should be notified of nomination
*/
if( typeof( TwinkleConfig.notifyUserOnSpeedyDeletionNomination ) == 'undefined' ) {
TwinkleConfig.notifyUserOnSpeedyDeletionNomination = [ 'g1', 'g2', 'g3', 'g4', 'g10', 'g11', 'g12', 'a1', 'a2', 'a3', 'a5', 'a7', 'i1', 'i2', 'i3', 'i4', 'i5', 'i6', 'i7', 'i8', 'i9', 'u3', 't1', 't2', 't3', 'p2' ];
}
/**
TwinkleConfig.userTalkPageMode may take arguments:
'window': open a new window, remmenber the opened window
'tab': opens in a new tab, if possible.
'blank': force open in a new window, even if a such window exist
*/
if( typeof( TwinkleConfig.userTalkPageMode ) == 'undefined' ) {
TwinkleConfig.userTalkPageMode = 'window';
}
/**
TwinkleConfig.deleteTalkPageOnDelete
If talk page if exists should also be deleted (CSD G8) when spedying a page (admin only)
*/
if( typeof( TwinkleConfig.deleteTalkPageOnDelete ) == 'undefined' ) {
TwinkleConfig.deleteTalkPageOnDelete = false;
}
/**
TwinkleConfig.toolboxButtons (string)
If id defined in this array, the button of the action is located inthe toolbox instead of in
the actions bar.
*/
if( typeof( TwinkleConfig.toolboxButtons ) == 'undefined' ) {
TwinkleConfig.toolboxButtons = [];
}
/**
TwinkleConfig.orphanNormalPagesOnSpeedyDelete (hash)
Defines if all backlinks to a page should be removed.
property 'exclude' defined actions not to orphan
*/
if( typeof( TwinkleConfig.orphanBacklinksOnSpeedyDelete ) == 'undefined' ) {
TwinkleConfig.orphanBacklinksOnSpeedyDelete = { exclude: ['g6'], orphan:true };
}
function twinklespeedy() {
if( wgNamespaceNumber < 0 || wgCurRevisionId == false ) {
return;
}
if( userIsInGroup( 'sysop' ) ) {
mw.util.addPortletLink( 'p-cactions', "javascript:twinklespeedy.callback()", "شطب", "tw-csd", "حذف سريع بحسب وب:شطب", "");
} else if (twinkleConfigExists) {
mw.util.addPortletLink( 'p-cactions', "javascript:twinklespeedy.callback()", "شطب", "tw-csd", "إدراج قالب شطب", "");
}
else
{
mw.util.addPortletLink('p-cactions', 'javascript:alert("ليس لحسابك فترة تسجيل كافية كي يستعمل لمح البصر.");', 'شطب', 'tw-csd', 'ضع قالب شطب بحسب وب:شطب', '');
}
}
$(twinklespeedy);
twinklespeedy.callback = function twinklespeedyCallback() {
var Window = new SimpleWindow( 800, 400 );
Window.setTitle( "اختر سببا للحذف السريع" );
var form = new QuickForm( userIsInGroup( 'sysop' ) ? twinklespeedy.callback.evaluateSysop : twinklespeedy.callback.evaluateUser, 'change' );
if( userIsInGroup( 'sysop' ) ) {
form.append( {
type: 'checkbox',
list: [
{
label: 'إدراج قالب شطب',
value: 'tag_only',
name: 'tag_only',
tooltip: 'إدراج قالب شطب',
event: function( event ) {
event.target.form.notify.disabled = ! event.target.checked;
event.stopPropagation();
}
},
{
label: 'Orphan backlinks',
value: 'orphan_backlinks',
name: 'orphan_backlinks',
tooltip: 'إذا أردت تيتيم كافة الوصلات العائدة إلى الصفحة، سيتم تجاوز الاستثناءات في كل الأحوال',
checked: TwinkleConfig.orphanBacklinksOnSpeedyDelete.orphan,
event: function( event ) {
TwinkleConfig.orphanBacklinksOnSpeedyDelete.orphan = event.target.checked;
event.stopPropagation();
}
}
]
} );
}
form.append( {
type: 'checkbox',
list: [
{
label: 'نبه عند الإمكان',
value: 'notify',
name: 'notify',
tooltip: 'في حالة وجود تنبيه في الإعداداتن، قم بالتنبيه وإلا فلا',
checked: true,
disabled: userIsInGroup( 'sysop' ),
event: function( event ) {
event.stopPropagation();
}
}
]
}
);
if( wgNamespaceNumber == Namespace.IMAGE ) {
form.append( {type:'header', label:'Images/Media' } );
form.append ( {
type: 'radio',
name: 'csd',
list: [
{
label: 'I1: صورة زائدة',
value: 'redundantimage',
tooltip: 'أي صورة يوجد منها نسخة مطابقة أو أفضل من ناحية الوضوح في ويكيبيديا، كذلك، أي ملف ميديا يوجد منه نسخة مطابقة أو أفضل من ناحية الجودة. لا يشمل الصور المتكررة في كومنز بسبب إشكاليات الترخيص؛ these should be tagged with \{\{subst:ncd|Image:newname.ext\}\} or \{\{subst:ncd\}\} instead'
},
{
label: 'I2: صورة معطوبة أو فارغة',
value: 'noimage',
tooltip: 'قبل حذف هذا النوع من الصور، تأكد أن محرك الميدياويكي لا يستطيع قراءتها بواسطة معاينة صورة مصغرة. يشمل الصور في كومنز ذات صفحات الشرح الفارغة (أي بلا محتوى).'
},
{
label: 'I3: رخصة غير ملائمة',
value: 'noncom',
tooltip: 'الصور المرخصة بـ "للاستعمال غير التجاري فقط"، "استعمال بلا إنشاء مشتقات"، "بإذن من" التي تم رفعها بعد 19-5-2005، إلا إذا انطبقت عليها المعايير المحددة للمحتوى غير الحر مثل الصور برخصة "'
},
{
label: 'I4: معلومات ترخيص ناقصة',
value: 'unksource',
tooltip: 'صور في تصنيف "صور بدون مصدر"، "صور بدون ترخيص"، "صور غير مؤكدة الحقوق" تم وسمها لأكثر من سبعة أيام بغض النظر عن زمن رفعها. انتبه، يقوم بعض المستخدمين بتحديد المصدر في ملخص الرفع، لا تنس من فحص ظروف الصورة'
},
{
label: 'I5: صور غير حرة غير مستعملة',
value: 'unfree',
tooltip: 'صور وملفات ميديا غير حرة وغير مستعملة في أي مقالة تم وسمها بقالب يضعها في تصنيف فرعي مؤرخ لصور استعمال عادل يتيمة وذلك لمدة تزيد عن سبعة أيام. تقبل استثناءات منطقية مثل رفع صور لمقالات وشيكة.'
},
{
label: 'I6: لا يوجد عرض لأسباب جواز الاستعمال العادل',
value: 'norat',
tooltip: 'أي صورة أو ملف ميديا لا تحوي عرضا لمبررات الاستخدام العادل سوف تحذف بعد سبعة أيام من رفعها. الاستعمال في القوالب ليست مبررا للاستعمال العادل. صور وملفات ميديا تم رفعها قبل 4-5-2006 لا تحذف فورا بل يجب إعلام الرافع بوجوب وضع مبررات الاستخدام العادل.Images or other media uploaded after 2006-05-04 can be tagged with \{\{subst:nrd\}\}, and the uploader notified with \{\{subst:missing rationale|Image:image name\}\}. Such images can be found in the dated subcategories of Category:Images with no fair use rationale'
},
{
label: 'I7: استعمال عادل مخالف',
value: 'badfairuse',
tooltip: 'ص'
},
{
label: 'I8: صور موجودة في كومنز',
value: 'nowcommons',
tooltip: 'يشترط استيفاء الشروط التالية: ١: انعدام شك معقول برخصة الصورة ومصدرها، والصورة مقبولة بكومنز دون شك. ٢: كافة المعلومات عن الصورة موجودة في صفحة الصورة في كومنز، يشمل تاريخ الرفع كاملا ووصلة إلى صفحة مستخدم الرافع. ٣: الصورة غير محمية، ووصف صفحة الصورة لا يحوي طلبا بعدم النقل إلى كومنز. ٤: تم وسم الصورة بقالب الآن كومنز لمدة أسبوع على الأقل. لا حاجة للانتظار أسبوعا لو قام الرافع بوسم الصورة. ٥: إذا كانت الصورة موجودة في كومنز تحت اسم مختلف عن الاسم المحلي، يجب تعديل كل الوصلات للصورة للاسم الموجود في كومنز. ٦: For \{\{c-uploaded\}\} images: They may be speedily deleted as soon as they are off the Main Page'
},
{
label: 'I9: خرق صريح لحقوق النشر',
value: 'imgcopyvio',
tooltip: 'تم نسخ الصورة من موقع وب أو مصدر آخر ذو ترخيض غير متوافق مع ويكيبيديا، والرافع لا يستطيع التأكيد أنها ملكية عامة، بترخيص حرة، استعمال عادل أو مستعملة بإذن. تشمل مواقع مكتبات الصور مثل Getty Images أو Corbis. الخرق غير الصريح لحقوق النشر يتم النقاش حول حذفه'
},
{
label: 'I10: ملفات وسائط غير مفيدة',
value: 'badfiletype',
tooltip: 'ملفات مرفوعة وليس ملفات صور، صوتية، أو فيديو (مثلا .doc, .pdf, or .xls) التي ليس لها استعمال موسوعي متوقع'
}
]
} );
}
form.append( { type:'header', label:'General criteria' } );
form.append( {
type: 'radio',
name: 'csd',
list: [
{
label: 'G1: بلا معنى',
value: 'nonsense',
tooltip: '،صفحة لا معنى لمحتواها. لا يشمل: النص الركيك، المقالات الخطابية، الملاحظات البذيئة، التخريب، معلومات من نسج الخيال، النصوص بلغة أجنبية، الترجمات السيئة، النظريات غير القابلة للتصديق.' },
{
label: 'G2: صفحة تجارب',
value: 'test',
tooltip: 'مثلا "هل أستطيع الكتابة هنا؟"'
},
{
label: 'G3: تخريب',
value: 'vandalism',
tooltip: 'تخريب واضح'
},
{
label: 'G3: نقل صفحة',
value: 'pagemove',
tooltip: 'تحويلات فارغة نتجت من تنظيف تخريب النقل'
},
{
label: 'G4: تكرار مقال سبق حذفه',
value: 'repost',
tooltip: 'نسخة عن سبق حذفها بواسطة التصويت للحذف، شرط أن تكون نسخة مماثلة للمقالة المحذوفة وأي تعديل لن يزيل سبب الحذف. لا ينطبق هذا البند على محتوى تم userfied، أو على محتوى تم استرجاع حذفه أو على محتوى تم شطبه رغم أنه في الحالة الأخيرة يمكن الشطب إذا كان سبب الشطب لا يزال قائما'
},
{
label: 'G5: مستخدم تم منعه',
value: 'banned',
tooltip: 'صفحات أنشأها مستخدم تم منعه أثناء فترة المنع'
},
{
label: 'G6: دمج تاريخ',
value: 'histmerge',
tooltip: 'حذف مؤقت لصفحة بهدف دمج التاريخ'
},
{
label: 'G6: نقل',
value: 'move',
tooltip: 'إفساح المجال أمام نقل غير خلافي مثل تبديل العنوان مع التحويلة'
},
{
label: 'G6: تصويت للحذف',
value: 'afd',
tooltip: 'قام إداري بإغلاق تصويت للحذف وكانت النتيجة حذف'
},
{
label: 'G6: صيانة',
value: 'g6',
tooltip: 'أعمال صيانة وتنظيف غير خلافية'
},
{
label: 'G7: حذف بطلب من المؤلف',
value: 'author',
tooltip: 'أي صفحة يطلب مؤلفها حذفها بنية حسنة،شرط أن يكون جل محتواها من إضافة مؤلفها.'
},
{
label: 'G7: صفحة أفرغها مؤلفها',
value: 'blanked',
tooltip: ' إذا قام المؤلف بإفراغ محتوى الصفحة سيعتبر ذلك طلبا بالحذف'
},
{
label: 'G8: صفحات نقاش لمقالات غير موجودة',
value: 'talk',
tooltip: 'استثناءات: صفحة تحوي نقاشا بشأن الحذف لا وجود له في مكان آخر؛ صفحة نقاش صورة رفعت على كومنز؛ صفحة ثانوية للنقاش (مثلا نقاشات مؤرشفة) التي لا وجود للمقال فيها'
},
{
label: 'G10: صفحة تهجم',
value: 'attack',
tooltip: ' صفحات جل غايتها التشهير بموضوعها (مثلا فلان نصاب). تشمل سير الأحياء ذات اللهجة السلبية بدون الاستشهاد بمصادر في ظل انعدام وجود صيغة محايدة في تاريخ الصفحة يمكن استرجاعها. على الإداريين ألا يقتبسوا المقال في سبب الحذف.'
},
{
label: 'G11: دعاية صريحة',
value: 'spam',
tooltip: 'الصفحات التي جل غايتها الإعلان عن شركة، منتوج، مجموعة، خدمة أو شخص ما التي تحتاج إعادة صياغة جذرية كي تصبح موسوعية. يسمح بنشر مقالات عن شركة، منتوج، مجموعة، خدمة أو شخص ما ولكن لا يسمح أن يكون نص المقال دعائيا.'
},
{
label: 'G12: خرق واضح لحقوق النشر',
value: 'copyvio',
tooltip: ' 1:مادة تم نسخها عن موقع ذو ترخيص غير متوافق مع ويكيبيديا، أو صورة من موقع لبيع مجموعات الصور (مثل Getty Images أو Corbis) أو أي مزود محتوى تجاري؛ 2:لا يوجد محتوى غير خارق لحقوق النشر في تاريخ الصفحة؛ 3: قام بنشر الخرق شخص واحد في دفعة واحدة بدل أن يتم تطوير المقالة تدريجيا تم بعدها نسخ المقالة عن ويكيبيديا إلى مواقع أخرى.'
}
]
});
if( wgNamespaceNumber == 0 || wgNamespaceNumber == 1 ) {
form.append( { type:'header', label:'Articles' } );
form.append( {
type: 'radio',
name: 'csd',
list: [
{
label: 'A1: بلا سياق',
value: 'nocontext',
tooltip: 'مقالة قصيرة جدا بلا سياق واضح (مثلا، "أنه رجل غريب قام ببناء مصنع الشوكولاطة ويملك سيارة سريعة.") المحتوى القليل لا يبرر للحذف ما دام له سياق واضح يؤهله ليكون بذرة.'
},
{
label: 'A2: لغة أجنبية',
value: 'foreign',
tooltip: 'مقالة بلغة أجنبية'
},
{
label: 'A3: يفتقر لمحتوى',
value: 'nocontent',
tooltip: 'أي مقالة لا تحوي سوى وصلات (بما فيها وصلات خارجية، تصنيف وقسم "راجع أيضا")، إعادة صياغة العنوان أو محاولات للتراسل مع شخص أو مجموعة مذكورين في عنوان المقال. لا يشمل صفحات التوضيح'
},
{
label: 'A5: منقولة لمشروع ويكيميديا آخر',
value: 'transwiki',
tooltip: 'أي مقالة تم نقلها إلى مشروع ويكيميديا آخر بصورة مرتبة بحيث حفظت سجلات المؤلف.'
},
{
label: 'A7: لا ملحوظية',
value: 'bio',
tooltip: 'مقالة عن شخص، مجموعة أشخاص، فرقة، ناد، شركة أو محتوى وب لا تفيد أهمية أو ملحوظية موضوعها. في الحالات الخلافية أو إن تم التصويت سابقا على إبقاء المقالة، يجب إجراء تصويت للحذف.'
},
{
label: 'A7: فرقة موسيقية بلا ملحوظية',
value: 'band',
tooltip: 'مقالة عن فرقة، مغن، موسيقي أو مجموعة موسيقية لا تفيد بأهمية الموضوع'
},
{
label: 'A7: ناد بلا ملحوظية',
value: 'club',
tooltip: 'مقالة عن ناد لا تفيد أهمية موضوعها'
},
{
label: 'A7: شركة بلا ملحوظية',
value: 'inc',
tooltip: 'مقالة عن شركة لا تفيد أهمية موضوعها.'
},
{
label: 'A7: موقع بلا ملحوظية',
value: 'web',
tooltip: 'مقالة عن موقع وب، مدونة، منتدى او أي محوى وب آخر لا تفيد أهمية موضوعها.'
}
]
} );
}
form.append( { type:'header', label: 'Redirects' } );
form.append( {
type: 'radio',
name: 'csd',
list: [
{
label: 'R1: تحويلة مكسورة',
value: 'redirnone'
},
{
label: 'R2: تحويلة إلى نطاقات النقاش، المستخدم أو نقاش المستخدم من نطاق المقالات',
value: 'rediruser',
tooltip: '(لا يشمل الاختصارات). إن كانت الصفحة نتاج عملية نقل، يمكنك الانتظار يوما أو يومين قبل الحذف'
},
{
label: 'R3: تحويلة جديدة عبارة عن خطأ مطبعي غير شائع',
value: 'redirtypo',
tooltip: 'التحويلات من الأخطاء الشائعة مفيدة عادة، كذلك تحويلات بلغات أجنبية'
}
]
} );
if( wgNamespaceNumber == 14 || wgNamespaceNumber == 15 ) {
form.append( { type:'header', label: 'Categories' } );
form.append( {
type: 'radio',
name: 'csd',
list: [
{
label: 'C1: تصنيف فارغ',
value: 'catempty',
tooltip: '(لا يحوي مقالات أو تصنيفات فرعية لمدة 4 أيام على الأقل) ومحتواه الوحيد وصلة للتصنيف الأم. لا يشمل تصنيفات يتم التصويت حول حذفها. إن لم يكن التصنيف جديد نسبيا فمن الأرجح أن يكون قد حوى مقالات سابقا مما يستدعي تحقيقا أعمق'
},
{
label: 'C3: تصنيف قالب محذوف',
value: 'catfd',
tooltip: 'إذا كان محتوى التصنيف من قالب واحد فقط وتم حذف القالب بحسب سياسة الحذف، يمكن حذف التصنيف دون تصويت آخر'
}
]
} );
} if( wgNamespaceNumber == 2 || wgNamespaceNumber == 3 ) {
form.append( { type:'header', label: 'User pages' } );
form.append( {
type: 'radio',
name: 'csd',
list: [
{
label: 'U1: طلب المستخدم',
value: 'userreq',
tooltip: 'صفحة مستخدم فرعية، طلب المستخدم حذفها. في بعض الحالات النادرة قد تكون حاجة لإبقائها. في بعض الحالات يمكن حذف صفحة المستخدم أيضا'
},
{
label: 'U2: مستخدم غير موجود',
value: 'nouser',
tooltip: 'صفحات مستخدم لمستخدمين لا وجود لهم (افحص في خاص:قائمة الأعضاء'
},
{
label: 'U3: معرض صور غير حرة',
value: 'gallery',
tooltip: 'صور غير حرة أو "استخدام عادل" في نطاق المستخدم. إن سياسة المحتوى غير الحر في ويكيبيديا تمنع المستخدمين من عرض صور غير حرة.'
},
]
} );
} if( wgNamespaceNumber == 10 || wgNamespaceNumber == 11 ) {
form.append( { type:'header', label: 'Templates' } );
form.append( {
type: 'radio',
name: 'csd',
list: [
{
label: 'T1: قالب يزرع الفرقة',
value: 'divisive'
},
{
label: 'T2: قوالب تكون تشرح السياسات بشكل خاطئ',
value: 'policy',
tooltip: 'يشمل قوالب الحذف السريع لمسببات ليست من ضمن بنود سياسة الحذف السريع وقوالب إخلاء مسؤولية معدة للاستخدام في المقالات'
},
{
label: 'T3: قوالب ليس لها استخدام مفيد',
value: 't3',
tooltip: 'قوالب تكون نسخة عن قوالب أخرى أو قوالب تكون حالة خاصة من قوالب يمكنها القيام بمهمتها'
}
]
} );
} if( wgNamespaceNumber == 100 || wgNamespaceNumber == 101 ) {
form.append( { type:'header', label: 'Portals' } );
form.append( {
type: 'radio',
name: 'csd',
list: [
{
label: 'P2: بوابة فارغة',
value: 'emptyportal',
tooltip: 'أي بوابة تكون عن موضوع لا يوجد فيه مقال رئيسي ليس ببذرة وعلى الأقل ثلاث مقالات أخرى ليست بذورا يمكن مناقشتها في البوابة'
}
]
} ); }
var result = form.render();
Window.setContent( result );
Window.display();
}
twinklespeedy.normalizeHash = {
'nonsense': 'g1',
'test': 'g2',
'vandalism': 'g3',
'pagemove': 'g3',
'repost': 'g4',
'banned': 'g5',
'histmerge': 'g6',
'move': 'g6',
'afd': 'g6',
'g6': 'g6',
'author': 'g7',
'blanked': 'g7',
'talk': 'g8',
'attack': 'g10',
'spam': 'g11',
'copyvio': 'g12',
'nocontext': 'a1',
'foreign': 'a2',
'nocontent': 'a3',
'transwiki': 'a5',
'bio': 'a7',
'inc': 'a7',
'web': 'a7',
'band': 'a7',
'club': 'a7',
'redirnone': 'r1',
'rediruser': 'r2',
'redirtypo': 'r3',
'redundantimage': 'i1',
'noimage': 'i2',
'noncom': 'i3',
'unksource': 'i4',
'unfree': 'i5',
'norat': 'i6',
'badfairuse': 'i7',
'nowcommons': 'i8',
'imgcopyvio': 'i9',
'badfiletype': 'i10',
'catempty': 'c1',
'catfd': 'c3',
'userreq': 'u1',
'nouser': 'u2',
'gallery': 'u3',
'divisive': 't1',
'policy':'t2',
't3':'t3',
'emptyportal': 'p2'
};
twinklespeedy.reasonHash = {
'nonsense': 'كلام دون معنى',
'test': 'صفحة تجربة',
'vandalism': 'تخريب',
'pagemove': 'تحويلة نشأت خلال تنظيف عملية نقل مقالة للتخريب',
'repost': 'نسخة عن مقالة تم التصويت على حذفها',
'banned': 'مساهمة مستخدم تم منعه',
'histmerge': 'حذف مؤقت لدمج تاريخ الصفحة',
'move': 'إفساح المجال لعملية نقل غير خلافية',
'afd': 'حذف الصفحة بعد أن تم التصويت على ذلك',
'g6': 'حذف خلال عملية ترتيب غير خلافية',
'author': 'المحرر الوحيد طلب الحذف',
'blanked': 'المحرر الوحيد أفرغ الصفحة من محتواها',
'talk': 'صفحة نقاش لمقالة غير موجودة',
'attack': 'صفحة تهجم',
'spam': 'دعاية صريحة، غايتها الإعلان عن أمر ما',
'copyvio': 'خرق صريح لحقوق النشر',
'nocontext': 'مقالة قصيرة جدا، تكاد لا تحوي معلومات',
'foreign': 'مقالة بلغة أجنبية',
'nocontent': 'لم يكن هنالك أي محتوى سوى وصلات أو إعادة صياغة للعنوان أو محاولة تراسل',
'transwiki': 'تم النقل إلى مشروع ويكيميديا آخر',
'bio': 'مقالة عن شخصية، مجموعة، فرقة، ناد، شركة أو محتوى وب حقيقيون لكن دون أن بستوفوا معايير الملحوظية',
'web': 'مقالة عن موقع وب، مدونة، منتدى أو أي محتوى وب مشابه لا يستوفي معايير الملحوظية',
'inc': 'مقالة عن شركة لا تستوفي معايير الملحوظية',
'club': 'مقالة عن ناد لا يستوفي معايير الملحوظية',
'band': 'مقالة عن فرقة، مغن، مجموعة موسيقية لا تستوفي معايير الملحوظية',
'redirnone': 'تحويلة لصفحة غير موجودة',
'rediruser': 'تحويلة لنطاق النقاش أو نطاق المستخدم أو نقاش المستخدم',
'redirtypo': 'تحويلة ناتجة عن خطأ مطبعي قلما يحدث',
'redundantimage': 'توجد صورة أخرى مشابهة أو أفضل في ويكيبيديا',
'noimage': 'صفحة صورة معطوبة أو فارغة',
'noncom': 'تم ترخيصها "للاستعمال غير التجاري فقط"، "لا استعمال اشتقاقي" أو "مستخدمة بإذن"، تم رفعها يوم 15 مايو 2005 أو ما قبله دون كتابة شرح جواز الاستخدام العادل',
'unksource': 'صورة تنقصها المصادر أو الترخيص لمدة تزيد عن سبعة أيام',
'unfree': 'صورة غير حرة غير مستعملة لمدة تزيد عن سبع أيام',
'norat': 'صورة مرفوعة تحت بند الاستخدام العادل دون عرض مبررات هذا الاستخدام لمدة تزيد عن سبعة أيام',
'badfairuse': 'صورة مع مبررات استخدام عادل خاطئة وتم تبليغ الرافع لمدة تزيد عن 48 ساعة',
'nowcommons': 'صورة مماثلة لصورة موجودة على كومنز',
'imgcopyvio': 'صورة اشتبهت بخرق حقوق النشر، ولم يبرهن الرافع أنها ملكية عامة، استخدام عادل أو صورة حرة',
'badfiletype':'كان ملفا ليس صورة، صوت، أو فيديو بدون استعمال موسوعي متوقع',
'catempty': 'كان تصنيفا فارغا لفترة أربعة أيام على الأقل',
'catfd': 'كان تصنيفا لم يحو سوى قالب تم حذفه',
'userreq': 'كانت صفحة مستخدم طلب صاحبها حذفها',
'nouser': 'كانت صفحة مستخدم لمستخدم لا وجود له',
'gallery': 'was a gallery in the user space which consisted mostly of fair use images',
'divisive': 'was an divisive and inflammatory template',
'policy': 'كان قالبا يشرح سياسات ويكيبيديا بشكل مضلل',
't3': 'was a template which was a duplicate of, hard-coded instance of, or an inferior alternative to a other template',
'emptyportal': 'كانت بوابة غير مستعملة'
};
twinklespeedy.callbacks = {
sysop: {
main: function( self ) {
var xmlDoc = self.responseXML;
var normal = xmlDoc.evaluate( '//normalized/n/@to', xmlDoc, null, XPathResult.STRING_TYPE, null ).stringValue;
if( normal ) {
wgPageName = normal;
}
var exists = xmlDoc.evaluate( 'boolean(//pages/page[not(@missing)])', xmlDoc, null, XPathResult.BOOLEAN_TYPE, null ).booleanValue;
if( ! exists ) {
self.statelem.error( "يبدو أن الصفحة غير موجودة. لعله قد تم حذفها" );
return;
}
var query = {
'title': wgPageName,
'action': 'delete'
};
var wikipedia_wiki = new Wikipedia.wiki( 'Deleting page', query, twinklespeedy.callbacks.sysop.deletePage );
wikipedia_wiki.params = self.params;
wikipedia_wiki.followRedirect = false;
wikipedia_wiki.get();
if(
TwinkleConfig.deleteTalkPageOnDelete &&
self.params.normalized != 'i8' &&
wgNamespaceNumber % 2 == 0 &&
document.getElementById( 'ca-talk' ).className != 'new'
) {
var talk_page = namespaces[ wgNamespaceNumber + 1 ] + ':' + wgTitle;
var query = query = {
'title': talk_page,
'action': 'delete'
};
var wikipedia_wiki = new Wikipedia.wiki( 'Deleting talk page', query, twinklespeedy.callbacks.sysop.deleteTalkPage );
wikipedia_wiki.params = self.params;
wikipedia_wiki.followRedirect = false;
wikipedia_wiki.get();
}
if( wgNamespaceNumber == 6 && self.params.normalized != 'i8' ) {
var query = {
'action': 'query',
'list': 'imageusage',
'titles': wgPageName,
'iulimit': userIsInGroup( 'sysop' ) ? 5000 : 500 // 500 is max for normal users, 5000 for bots and sysops
};
var wikipedia_api = new Wikipedia.api( 'Grabbing image links', query, twinklespeedy.callbacks.sysop.unlinkImageInstancesMain );
wikipedia_api.params = self.params;
wikipedia_api.post();
}
var doOrphan = TwinkleConfig.orphanBacklinksOnSpeedyDelete;
if(
doOrphan.orphan &&
doOrphan.exclude.indexOf( self.params.normalized.toLowerCase() ) == -1
) {
var query = {
'action': 'query',
'list': 'backlinks',
'blfilterredir': 'nonredirects',
'bltitle': wgPageName,
'bllimit': userIsInGroup( 'sysop' ) ? 5000 : 500, // 500 is max for normal users, 5000 for bots and sysops
'blnamespace': [0, 100] // Main namespace and portal namespace only, keep on talk pages.
};
var wikipedia_api = new Wikipedia.api( 'Grabbing backlinks', query, twinklespeedy.callbacks.sysop.unlinkBacklinksMain );
wikipedia_api.params = self.params;
wikipedia_api.post();
}
var query = {
'action': 'query',
'list': 'backlinks',
'blfilterredir': 'redirects',
'bltitle': wgPageName,
'bllimit': userIsInGroup( 'sysop' ) ? 5000 : 500 // 500 is max for normal users, 5000 for bots and sysops
};
var wikipedia_api = new Wikipedia.api( 'Grabbing redirects', query, twinklespeedy.callbacks.sysop.deleteRedirectsMain );
wikipedia_api.params = self.params;
wikipedia_api.post();
},
unlinkBacklinksMain: function( self ) {
var xmlDoc = self.responseXML;
var snapshot = xmlDoc.evaluate('//backlinks/bl/@title', xmlDoc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );
if( snapshot.snapshotLength == 0 ) {
return;
}
var statusIndicator = new Status('Removing backlinks', '0%');
var total = snapshot.snapshotLength * 2;
var onsuccess = function( self ) {
var obj = self.params.obj;
var total = self.params.total;
var now = parseInt( 100 * ++(self.params.current)/total ) + '%';
obj.update( now );
self.statelem.unlink();
if( self.params.current >= total ) {
obj.info( now + ' (completed)' );
Wikipedia.removeCheckpoint();
}
}
var onloaded = onsuccess;
var onloading = function( self ) {}
Wikipedia.addCheckpoint();
if( snapshot.snapshotLength == 0 ) {
statusIndicator.info( '100% (completed)' );
Wikipedia.removeCheckpoint();
return;
}
var params = clone( self.params );
params.current = 0;
params.total = total;
params.obj = statusIndicator;
params.page = wgPageName;
for ( var i = 0; i < snapshot.snapshotLength; ++i ) {
var title = snapshot.snapshotItem(i).value;
var query = {
'title': title,
'action': 'submit'
}
var wikipedia_wiki = new Wikipedia.wiki( "Unlinking on " + title, query, twinklespeedy.callbacks.sysop.unlinkBacklinks );
wikipedia_wiki.params = params;
wikipedia_wiki.onloading = onloading;
wikipedia_wiki.onloaded = onloaded;
wikipedia_wiki.onsuccess = onsuccess;
wikipedia_wiki.get();
}
},
unlinkBacklinks: function( self ) {
var form = self.responseXML.getElementById('editform');
var text = form.wpTextbox1.value;
var old_text = text;
var wikiPage = new Mediawiki.Page( text );
wikiPage.removeLink( self.params.page );
text = wikiPage.getText();
if( text == old_text ) {
// Nothing to do, return
self.onsuccess( self );
Wikipedia.actionCompleted( self );
return;
}
var postData = {
'wpMinoredit': form.wpMinoredit.checked ? '' : undefined,
'wpWatchthis': undefined,
'wpStarttime': form.wpStarttime.value,
'wpEdittime': form.wpEdittime.value,
'wpAutoSummary': form.wpAutoSummary.value,
'wpEditToken': form.wpEditToken.value,
'wpSummary': 'Removing backlinks to ' + self.params.page + " that has been speedily deleted per ([[WP:CSD#" + self.params.normalized.toUpperCase() + "|CSD " + self.params.normalized.toUpperCase() + "]])" + "; " + TwinkleConfig.deletionSummaryAd,
'wpTextbox1': text
};
self.post( postData );
},
deleteRedirectsMain: function( self ) {
var xmlDoc = self.responseXML;
var snapshot = xmlDoc.evaluate('//backlinks/bl/@title', xmlDoc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );
var total = snapshot.snapshotLength * 2;
if( snapshot.snapshotLength == 0 ) {
return;
}
var statusIndicator = new Status('Deleting redirects', '0%');
var onsuccess = function( self ) {
var obj = self.params.obj;
var total = self.params.total;
var now = parseInt( 100 * ++(self.params.current)/total ) + '%';
obj.update( now );
self.statelem.unlink();
if( self.params.current >= total ) {
obj.info( now + ' (completed)' );
Wikipedia.removeCheckpoint();
}
}
var onloaded = onsuccess;
var onloading = function( self ) {}
Wikipedia.addCheckpoint();
if( snapshot.snapshotLength == 0 ) {
statusIndicator.info( '100% (completed)' );
Wikipedia.removeCheckpoint();
return;
}
var params = clone( self.params );
params.current = 0;
params.total = total;
params.obj = statusIndicator;
for ( var i = 0; i < snapshot.snapshotLength; ++i ) {
var title = snapshot.snapshotItem(i).value;
var query = {
'title': title,
'action': 'delete'
}
var wikipedia_wiki = new Wikipedia.wiki( "Deleting " + title, query, twinklespeedy.callbacks.sysop.deleteRedirects );
wikipedia_wiki.params = params;
wikipedia_wiki.onloading = onloading;
wikipedia_wiki.onloaded = onloaded;
wikipedia_wiki.onsuccess = onsuccess;
wikipedia_wiki.followRedirect = false;
wikipedia_wiki.get();
}
},
deleteRedirects: function( self ) {
var form = this.responseXML.getElementById( 'deleteconfirm' );
if( ! form ) { // Hell, image deletion is b0rked :(
form = this.responseXML.getElementsByTagName( 'form' )[0];
var postData = {
'wpDeleteReasonList': 'other',
'wpReason': "Speedy deleted per ([[WP:CSD#R1|CSD R1]]), Redirect to deleted page \"" + wgPageName + "\"." + TwinkleConfig.deletionSummaryAd,
'wpEditToken': form.wpEditToken.value
}
} else {
var postData = {
'wpWatch': form.wpWatch.checked ? '' : undefined,
'wpDeleteReasonList': 'other',
'wpReason': "Speedy deleted per ([[WP:CSD#R1|CSD R1]]), Redirect to deleted page \"" + wgPageName + "\"." + TwinkleConfig.deletionSummaryAd,
'wpEditToken': form.wpEditToken.value
}
}
self.post( postData );
},
unlinkImageInstancesMain: function( self ) {
var xmlDoc = self.responseXML;
var snapshot = xmlDoc.evaluate('//imageusage/iu/@title', xmlDoc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );
if( snapshot.snapshotLength == 0 ) {
return;
}
var statusIndicator = new Status('Unlinking instances image', '0%');
var total = snapshot.snapshotLength * 2;
var onsuccess = function( self ) {
var obj = self.params.obj;
var total = self.params.total;
var now = parseInt( 100 * ++(self.params.current)/total ) + '%';
obj.update( now );
self.statelem.unlink();
if( self.params.current >= total ) {
obj.info( now + ' (completed)' );
Wikipedia.removeCheckpoint();
}
}
var onloaded = onsuccess;
var onloading = function( self ) {}
Wikipedia.addCheckpoint();
if( snapshot.snapshotLength == 0 ) {
statusIndicator.info( '100% (completed)' );
Wikipedia.removeCheckpoint();
return;
}
var params = clone( self.params );
params.current = 0;
params.total = total;
params.obj = statusIndicator;
params.image = wgTitle;
for ( var i = 0; i < snapshot.snapshotLength; ++i ) {
var title = snapshot.snapshotItem(i).value;
var query = {
'title': title,
'action': 'submit'
}
var wikipedia_wiki = new Wikipedia.wiki( "Unlinking on " + title, query, twinklespeedy.callbacks.sysop.unlinkImageInstances );
wikipedia_wiki.params = params;
wikipedia_wiki.onloading = onloading;
wikipedia_wiki.onloaded = onloaded;
wikipedia_wiki.onsuccess = onsuccess;
wikipedia_wiki.get();
}
},
unlinkImageInstances: function( self ) {
var form = self.responseXML.getElementById('editform');
var text = form.wpTextbox1.value;
var old_text = text;
var wikiPage = new Mediawiki.Page( text );
wikiPage.commentOutImage( self.params.image, 'Commented out because image was deleted' );
text = wikiPage.getText();
if( text == old_text ) {
// Nothing to do, return
self.onsuccess( self );
Wikipedia.actionCompleted( self );
return;
}
var postData = {
'wpMinoredit': form.wpMinoredit.checked ? '' : undefined,
'wpWatchthis': undefined,
'wpStarttime': form.wpStarttime.value,
'wpEdittime': form.wpEdittime.value,
'wpAutoSummary': form.wpAutoSummary.value,
'wpEditToken': form.wpEditToken.value,
'wpSummary': 'Removing instance of image ' + self.params.image + " that has been speedily deleted per ([[WP:CSD#" + self.params.normalized.toUpperCase() + "|CSD " + self.params.normalized.toUpperCase() + "]])" + "; " + TwinkleConfig.deletionSummaryAd,
'wpTextbox1': text
};
self.post( postData );
},
deletePage: function( self ) {
var form = this.responseXML.getElementById( 'deleteconfirm' );
if( ! form ) { // Hell, image deletion is b0rked :(
form = this.responseXML.getElementsByTagName( 'form' )[0];
var postData = {
'wpDeleteReasonList': 'other',
'wpReason': "Speedy deleted per ([[WP:CSD#" + self.params.normalized.toUpperCase() + "|CSD " + self.params.normalized.toUpperCase() + "]]), " + self.params.reason + "." + TwinkleConfig.deletionSummaryAd,
'wpEditToken': form.wpEditToken.value
}
self.post( postData );
} else {
var postData = {
'wpWatch': self.params.watch || form.wpWatch.checked ? '' : undefined,
'wpDeleteReasonList': 'other',
'wpReason': "Speedy deleted per ([[WP:CSD#" + self.params.normalized.toUpperCase() + "|CSD " + self.params.normalized.toUpperCase() + "]]), " + self.params.reason + "." + TwinkleConfig.deletionSummaryAd,
'wpEditToken': form.wpEditToken.value
}
self.post( postData );
}
},
deleteTalkPage: function( self ) {
form = this.responseXML.getElementById( 'deleteconfirm' );
var postData = {
'wpWatch': self.params.watch || form.wpWatch.checked ? '' : undefined,
'wpDeleteReasonList': 'other',
'wpReason': "Speedy deleted per ([[WP:CSD#g8|CSD g8]]), was a talk page of deleted page." + TwinkleConfig.deletionSummaryAd,
'wpEditToken': form.wpEditToken.value
}
self.post( postData );
}
},
user: {
main: function( self ) {
var xmlDoc = self.responseXML;
var exists = xmlDoc.evaluate( 'boolean(//pages/page[not(@missing)])', xmlDoc, null, XPathResult.BOOLEAN_TYPE, null ).booleanValue;
if( ! exists ) {
self.statelem.error( "It seems that the page doesn't exists, perhaps it has already been deleted" );
return;
}
var query = {
'title': wgPageName,
'action': 'submit'
};
var wikipedia_wiki = new Wikipedia.wiki( 'Tagging page', query, twinklespeedy.callbacks.user.tagPage );
wikipedia_wiki.params = self.params;
wikipedia_wiki.followRedirect = false;
wikipedia_wiki.get();
},
tagPage: function( self ) {
form = this.responseXML.getElementById( 'editform' );
var text = form.wpTextbox1.value;
self.statelem.status( 'Checking for tags on the page...' );
var tag = /(\{\{(?:db-?|delete)\|?.*?\}\})/.exec( text );
if( tag ) {
self.statelem.error( [ htmlNode( 'strong', tag[0] ) , " is already placed on the page." ] )
return;
}
var xfd = /(\{\{(?:[rsaitcm]fd|md1)[^{}]*?\}\})/i.exec( text );
if( xfd && !confirm( "The deletion related template " + xfd[0] + " is already present on the page, do you still want to apply CSD template?" ) ) {
return;
}
var code;
switch( self.params.normalized ) {
case 'i8':
var date = new Date();
var code = "\{\{NowCommons|month=" + date.getUTCMonthName() + "|day=" + date.getUTCDate() + "|year=" + date.getUTCFullYear() + "|1=" + wgPageName.replace( '_', ' ' ) + "\}\}";
break;
case 'g6':
switch( self.params.value ) {
case 'histmerge':
var title = prompt( 'please enter the title to merge into here' );
if( title == null ) {
return;
}
code = "\{\{db-" + self.params.value + "|1=" + title + "\}\}";
break;
default:
code = "\{\{db-" + self.params.value + "\}\}";
break;
}
break;
case 'g12':
var url = prompt( 'please enter url if available, including the http://' );
if( url == null ) {
return;
}
code = "\{\{db-" + self.params.value + "|url=" + url + "\}\}";
break;
case 'i1':
var img = prompt( 'enter the image this is redundant to, excluding the Image: prefix' );
if( img == null ) {
return;
}
code = "\{\{db-" + self.params.value + "|1=" + img + "\}\}";
break;
case 't3':
var template = prompt( 'enter the template this is redundant to, excluding the Template: prefix' );
if( template == null ) {
return;
}
code = "\{\{db-" + self.params.value + "|1=\~\~\~\~\~|2=" + template + "\}\}";
break;
default:
code = "\{\{db-" + self.params.value + "\}\}";
break;
}
// Notification to first contributor
var query = {
'action': 'query',
'prop': 'revisions',
'titles': wgPageName,
'rvlimit': 1,
'rvprop': 'user',
'rvdir': 'newer'
}
var callback = function( self ) {
var xmlDoc = self.responseXML;
var user = xmlDoc.evaluate( '//rev/@user', xmlDoc, null, XPathResult.STRING_TYPE, null ).stringValue;
var query = {
'title': 'User talk:' + user,
'action': 'submit'
};
var wikipedia_wiki = new Wikipedia.wiki( 'Notifying of initial contributor (' + user + ')', query, twinklespeedy.callbacks.user.userNotification );
wikipedia_wiki.params = self.params;
wikipedia_wiki.get();
}
if( self.params.usertalk ) {
var wikipedia_api = new Wikipedia.api( 'Grabbing data of initial contributor', query, callback );
wikipedia_api.params = self.params;
wikipedia_api.post();
}
var postData = {
'wpMinoredit': TwinkleConfig.markSpeedyPagesAsMinor ? '' : undefined,
'wpWatchthis': self.params.watch ? '' : undefined,
'wpStarttime': form.wpStarttime.value,
'wpEdittime': form.wpEdittime.value,
'wpAutoSummary': form.wpAutoSummary.value,
'wpEditToken': form.wpEditToken.value,
'wpSummary': "Requesting speedy deletion ([[WP:CSD#" + self.params.normalized.toUpperCase() + "|CSD " + self.params.normalized.toUpperCase() + "]])." + TwinkleConfig.summaryAd,
'wpTextbox1': code + "\n" + text
};
self.post( postData );
},
userNotification: function( self ) {
var form = self.responseXML.getElementById( 'editform' );
var text = form.wpTextbox1.value;
text += "\n\{\{subst:db-csd-notice-custom|1=" + wgPageName + "|2=" + self.params.value + "\}\} \~\~\~\~";
var postData = {
'wpMinoredit': form.wpMinoredit.checked ? '' : undefined,
'wpWatchthis': form.wpWatchthis.checked ? '' : undefined,
'wpStarttime': form.wpStarttime.value,
'wpEdittime': form.wpEdittime.value,
'wpAutoSummary': form.wpAutoSummary.value,
'wpEditToken': form.wpEditToken.value,
'wpSummary': 'Notification: Speedy deletion nomination of \[\[' + wgPageName + '\]\].' + TwinkleConfig.summaryAd,
'wpTextbox1': text
};
self.post( postData );
}
}
}
twinklespeedy.callback.evaluateSysop = function twinklespeedyCallbackEvaluateSysop(e) {
wgPageName = wgPageName.replace( /_/g, ' ' ); // for queen/king/whatever and country!
var tag_only = e.target.form.tag_only;
if( tag_only && tag_only.checked ) {
return twinklespeedy.callback.evaluateUser(e);
}
var value = e.target.value;
var normalized = twinklespeedy.normalizeHash[ value ];
var params = {
value: value,
normalized: normalized,
watch: TwinkleConfig.watchSpeedyPages.indexOf( normalized ) != -1,
reason: twinklespeedy.reasonHash[ value ]
};
Status.init( e.target.form );
var query = {
'action': 'query',
'titles': wgPageName
}
var wikipedia_api = new Wikipedia.api( 'Checking if page exists', query, twinklespeedy.callbacks.sysop.main );
wikipedia_api.params = params;
wikipedia_api.post();
}
twinklespeedy.callback.evaluateUser = function twinklespeedyCallbackEvaluateUser(e) {
wgPageName = wgPageName.replace( /_/g, ' ' ); // for queen/king/whatever and country!
var value = e.target.value;
var normalized = twinklespeedy.normalizeHash[ value ];
var params = {
value: value,
normalized: normalized,
watch: TwinkleConfig.watchSpeedyPages.indexOf( normalized ) != -1,
usertalk: TwinkleConfig.notifyUserOnSpeedyDeletionNomination.indexOf( normalized ) != -1 && e.target.form.notify.checked
};
Status.init( e.target.form );
Wikipedia.actionCompleted.redirect = wgPageName;
Wikipedia.actionCompleted.notice = "Tagging complete";
var query = {
'action': 'query',
'titles': wgPageName
}
var wikipedia_api = new Wikipedia.api( 'Checking if page exists', query, twinklespeedy.callbacks.user.main );
wikipedia_api.params = params;
wikipedia_api.post();
}