مستخدم:Gerges/Gadget-speed-deletion.js
(بالتحويل من مستخدم:Gerges Shamon/Gadget-speed-deletion.js)
يمكن توفير توثيق لسكربت المستخدم هذا في الصفحة : مستخدم:Gerges/Gadget-speed-deletion. |
ملاحظة: بعد الحفظ، قد يلزمك إفراغ الكاش لرؤية التغييرات ( ).
/**
* إضافة الشطب أو الحذف السريع
* [[:ar:MediaWiki:Gadget-speed-deletion.js]]
* المطور الأصلي: [[:ar:User:ASammour]]
* التحديث والصيانة : [[:ar:User:Gerges Shamon]]
*/
$(document).ready(function() {
mw.loader.using(['mediawiki.user', 'oojs-ui-core', 'oojs-ui-windows', 'mediawiki.Title', 'mediawiki.messagePoster'], function() {
function SendNotify(_page, _title, _notify) {
var title = new mw.Title(_page);
var posterPromise = mw.messagePoster.factory.create(title);
posterPromise.done(function(poster) {
poster.post(_title, _notify);
});
return posterPromise;
}
var reasons = [
"مقالة [[ويكيبيديا:ويكيبيديا ليست|غير موسوعية]] أو خارج نطاق ويكيبيديا",
"مقالة لا تستوفي [[ويكيبيديا:ملحوظية (أشخاص)|معايير ملحوظية الأشخاص]]",
"موضوع لا يحقق [[ويكيبيديا:ملحوظية|الملحوظية]] أو الأهمية أو الشهرة الكافية",
"صفحة قصيرة جدا لا تحتوي على السياق الكافي لمعرفة موضوع المقالة",
"[[ويكيبيديا:مشروع ويكي سخام|دعاية صريحة]] أو ترويج لأمر ما",
"مقالة مكررة عن مقالة أخرى ولا تقبل التحويل",
"معلومات متضادة ومتلابسة",
"معلومات [[ويكيبيديا:لا تختلق الأكاذيب|غير صحيحة]] غايتها الخداع والتدليس",
"موقع ويب غير مستوفي لمعايير [[ويكيبيديا:ملحوظية (ويب)|ملحوظية الويب]]",
"كتاب غير مستوفي لمعايير [[ويكيبيديا:ملحوظية (كتب)|ملحوظية الكتب]]",
"مقالة مخالفة [[ويكيبيديا:ملحوظية (عائلات وأنساب)|لسياسة العائلات والأنساب]]",
"موضوع لا يحقق جودة [[ويكيبيديا:جودة البذرة|البذرة]]",
"موضوع لا يحقق جودة [[ويكيبيديا:جودة البذرة/مواقع جغرافية|بذرة المواقع الجغرافية]]",
"خرق واضح ل[[ويكيبيديا:حقوق التأليف والنشر|حقوق التأليف والنشر]] نتيجة لنسخ المحتوى من مكان آخر بدون تصريح",
"إعادة إنشاء صفحة تم [[ويكيبيديا:سياسة الحذف|حذفها]] بناء على [[ويكيبيديا:نقاش الحذف|نقاش حذف]]",
"مقالة [[ويكيبيديا:ترجمة آلية|مترجمة آلياً]] ذات محتوى ركيك",
"[[ويكيبيديا:محررون/توزيع المهام|أعمال صيانة]] غير خلافية",
"صفحة طلب منشئها حذفها بنية حسنة",
"صفحة نقاش لصفحة محذوفة أو غير موجودة",
"نقاش لا يخص تطوير الموضوع وتحسينه",
"صفحة مستخدم مخالفة [[ويكيبيديا:صفحات المستخدمين|للمعايير المتبعة]] أو من إنشاء مجهول",
"طلب المستخدم لحذف صفحة في نطاقه الشخصي",
"صورة فاسدة أو صفحة صورة في [[ويكيميديا كومنز]]",
"بوابة فارغة أو مكررة أو غير مكتملة، أو تجربة، أو ليس لها مقالة رئيسية",
"وحدة أو قالب مكرر أو ليس له [[ويكيبيديا:قوالب|استخدام مفيد]] أو أنشئ من باب الخطأ",
"[[خاص:تصنيفات غير مستخدمة|تصنيف غير مستخدم]] أو مكرر أو ليس له فائدة",
"إعادة إنشاء صفحة قد حذفت من قبل",
"صفحة طلب",
"خطاب موجه",
"صفحة فارغة لا تحوي [[نثر|نصا نثريا]]",
"صفحة [[مساعدة:تجربة|تجربة]]",
"[[ويكيبيديا:تخريب|تخريب]] محض",
"صفحة [[ويكيبيديا:لا للهجوم الشخصي|تهجم]] أو ذات [[لفظ ناب|محتوى بذئ]]",
"كلام [[ويكيبيديا:كلام فارغ|لا معنى له]] أو غير مفهوم",
"نص بلغة غير العربية",
"تحويلة غير ضرورية",
"[[خاص:تحويلات مكسورة|تحويلة مكسورة]]",
"[[ويكيبيديا:معايير الحذف السريع#التحويلات (R)|تحويلة مخالفة]] بين [[ويكيبيديا:نطاق|نطاقات]] مختلفة",
"صفحة توضيح [[ويكيبيديا:توضيح#الحاجة إلى التوضيح|عديمة الفائدة]] أو تحتوي على وصلات لصفحات غير موجودة بعد",
];
function MyProcessDialog(config) {
MyProcessDialog.super.call(this, config);
}
OO.inheritClass(MyProcessDialog, OO.ui.ProcessDialog);
MyProcessDialog.static.name = 'GadgetSpeedDeletion';
MyProcessDialog.static.title = 'الترشيح للحذف السريع';
MyProcessDialog.static.actions = [
{
action: 'save',
label: 'تنفيذ',
flags: ['primary', 'progressive']
}, {
label: 'إلغاء',
flags: 'safe'
}
];
MyProcessDialog.static.size = 'large';
var fieldset = new OO.ui.FieldsetLayout();
var dropdownOptions = [];
var urlRegEx = /\[\[[^\]]*\|([^\]]*)]]/g;
reasons.forEach(function(string) {
dropdownOptions.push({
data: string,
label: string.replace(urlRegEx, '$1')
});
});
var APIGSD = new mw.Api();
var optionsInput = new OO.ui.RadioSelectInputWidget({
options: dropdownOptions
});
var NotifyCheckbox = new OO.ui.CheckboxInputWidget({
selected: true
});
fieldset.addItems([
new OO.ui.FieldLayout(optionsInput, { label: new OO.ui.HtmlSnippet('<h3>سبب الحذف السريع:</h3>'), align: 'inline' }),
new OO.ui.FieldLayout(NotifyCheckbox, { label: new OO.ui.HtmlSnippet('<b>إرسال إشعار لمنشئ الصفحة</b>'), align: 'inline' })
]);
MyProcessDialog.prototype.initialize = function() {
MyProcessDialog.super.prototype.initialize.apply(this, arguments);
this.content = new OO.ui.PanelLayout({ padded: true, expanded: false, });
this.content.$element.append(fieldset.$element);
this.$body.append(this.content.$element);
};
MyProcessDialog.prototype.getActionProcess = function(action) {
var mReason = optionsInput.getValue();
var mIsNotify = NotifyCheckbox.isSelected();
var dialog = this;
if (action) {
if (action == 'save') {
return MyProcessDialog.super.prototype.getActionProcess.call(this, action).next(function() {
if (mIsNotify) {
return APIGSD.get({
"action": "query",
"format": "json",
"prop": "revisions",
"titles": mw.config.get('wgPageName'),
"utf8": 1,
"rvprop": "user",
"rvlimit": "1",
"rvdir": "newer",
"formatversion": "latest"
}).then(function(x) {
if (!x.query.pages[0].revisions[0].anon) {
var user = "نقاش المستخدم:" + x.query.pages[0].revisions[0].user;
return SendNotify(user, "حذف سريع لـ [[" + mw.config.get('wgPageName').replace(/_/g, " ") + "]]", "\{\{نسخ:تنبيه شطب 2|" + mw.config.get('wgPageName').replace(/_/g, " ") + "|" + mReason + "\}\}");
}
});
}
}, this).next(function() {
return new mw.Api().edit(mw.config.get('wgPageName'), function(revision) {
return {
text: "\{\{شطب|" + mReason + "\}\}\n" + revision.content,
summary: "ترشيح صفحة للحذف بسبب " + mReason
};
});
}, this).execute().then(
function() {
mw.notify('رشحت صفحة للحذف');
dialog.close();
setTimeout(function() { location.reload(); }, 1000);
},
function(_, data) {
dialog.close();
mw.notify(APIGSD.getErrorMessage(data), { type: 'error' });
}
);
}
}
return MyProcessDialog.super.prototype.getActionProcess.call(this, action);
};
var windowManager = new OO.ui.WindowManager();
mw.util.addPortletLink('p-tb', "#", 'حذف سريع', 'button-speedDelete', 'شطب الصفحة');
$("#button-speedDelete").click(function() {
$(document.body).append(windowManager.$element);
var dialog = new MyProcessDialog();
windowManager.addWindows([dialog]);
windowManager.openWindow(dialog);
});
});
});