ميدياويكي:Gadget-AjaxMove.js

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

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

if (mw.config.get('skin') == 'minerva') {
  $('#bodyContent').prepend("<a href='#' style='margin-inline-end: 1em;text-indent:5px;width: fit-content; display: inline-block;' id='btn-ajaxMove'>نقل سريع</a>");
} else {
  mw.util.addPortletLink('p-cactions', '#', "نقل سريع", "btn-ajaxMove", "نقل سريع");
}

$("#btn-ajaxMove").click(function() {
  var Input = { to: '', reason: '' };

  function AjaxMoveDialog(config) {
    AjaxMoveDialog.super.call(this, config);
  }
  OO.inheritClass(AjaxMoveDialog, OO.ui.ProcessDialog);

  AjaxMoveDialog.static.name = 'AjaxMoveDialog';
  AjaxMoveDialog.static.title = 'نقل سريع';
  AjaxMoveDialog.static.actions = [
    { action: 'save', label: 'نقل', flags: ['primary', 'progressive'] },
    { label: 'إلغاء', flags: 'safe' }
  ];

  AjaxMoveDialog.prototype.initialize = function() {
    AjaxMoveDialog.super.prototype.initialize.apply(this, arguments);
    this.content = new OO.ui.PanelLayout({ padded: true, expanded: false });
    this.input_to = new OO.ui.TextInputWidget({ value: mw.config.get('wgPageName') });
    this.field_to = new OO.ui.FieldLayout(this.input_to, {
      label: 'إلى'
    });
    this.input_reason = new OO.ui.TextInputWidget();
    this.field_reason = new OO.ui.FieldLayout(this.input_reason, {
      label: 'سبب'
    });
    this.fieldset = new OO.ui.FieldsetLayout();
    this.fieldset.addItems([this.field_to, this.field_reason]);
    this.content.$element.append(this.fieldset.$element);
    this.$body.append(this.content.$element);
    //Events
    this.input_to.on('change', function(value) {
      Input.to = value;
    });
    this.input_reason.on('change', function(value) {
      Input.to = reason;
    });
  };
  AjaxMoveDialog.prototype.getActionProcess = function(action) {
    var dialog = this;
    if (action) {
      return new OO.ui.Process(function() {
        let deferred = $.Deferred();
        let api = new mw.Api();
        try {
          api.postWithToken('csrf', {
            action: 'move',
            from: mw.config.get('wgPageName'),
            to: Input.to,
            reason: Input.reason,
            movetalk: true,
            errorformat: 'html',
            errorlang: mw.config.get('wgUserLanguage'),
            errorsuselocal: true
          }).then(function() {
            deferred.resolve();
            dialog.close();
            mw.notify('نُقلت الصفحة بنجاح... سيُعاد تحميل الصفحة خلال ثوان');
            setTimeout(function() {
              location.reload();
            }, 1500);
          }, function(_, error) {
            deferred.reject([new OO.ui.Error(api.getErrorMessage(error))]);
          });
        } catch (e) {
          deferred.reject([new OO.ui.Error('حدث خطأ غير متوقع')]);
          console.log(e);
        }

        return deferred;
      });
    }
    return AjaxMoveDialog.super.prototype.getActionProcess.call(this, action);
  };

  var windowManager = new OO.ui.WindowManager();
  $(document.body).append(windowManager.$element);

  var dialog = new AjaxMoveDialog();
  windowManager.addWindows([dialog]);
  windowManager.openWindow(dialog);
});