ميدياويكي:Gadget-speed-deletion.js

من ويكيبيديا، الموسوعة الحرة

ملاحظة: بعد الحفظ، قد يلزمك إفراغ الكاش لرؤية التغييرات.

/**
 * إضافة الشطب أو الحذف السريع
 * [[: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();
    if (mw.config.get( 'wgIsProbablyEditable' )) {
    	mw.util.addPortletLink(((mw.config.get('skin')=='minerva')? 'p-tb': 'p-cactions'), "#", 'حذف سريع', 'button-speedDelete', 'شطب الصفحة');
      $("#button-speedDelete").click(function() {
        $(document.body).append(windowManager.$element);
        var dialog = new MyProcessDialog();
        windowManager.addWindows([dialog]);
        windowManager.openWindow(dialog);
      });
    }
  });
});