مستخدم:Gerges/GadgetRollbackFast.js

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

mw.loader.using(['oojs'], function() {
    if (mw.config.get('wgAction') != 'history') return;
    var GRFButton = document.createElement("span");
    GRFButton.innerHTML = "<a>إرجاع</a>";
    var mw_rollback_link = document.querySelector(".mw-rollback-link");
    mw_rollback_link.parentNode.insertBefore(GRFButton, mw_rollback_link.nextSibling);

    var APIRollback = new mw.Api();
    var LGadgetRollbackFast = '[[مستخدم:Gerges/الإرجاع السريع|الإرجاع السريع]]';
    var GRFTextInputWidget;
    GRFButton.addEventListener('click', function(event) {
        event.preventDefault();
        var _namePage = mw.config.get('wgPageName');
        APIRollback.get({
            action: 'query',
            titles: _namePage,
            prop: 'revisions',
            rvprop: 'user',
            format: 'json',
            formatversion: '2'
        }).then(function(res) {
            var _userEdit = res.query.pages[0].revisions[0].user;
            function GRFDialog(config) {
                GRFDialog.super.call(this, config);
            }
            OO.inheritClass(GRFDialog, OO.ui.ProcessDialog);

            GRFDialog.static.name = 'GadgetRollbackFast';
            GRFDialog.static.title = 'الإرجاع السريع';
            GRFDialog.static.size = 'small';
            GRFDialog.static.actions = [{
                action: 'save',
                label: 'نعم',
                flags: ['primary', 'progressive']
            }, {
                label: 'لا',
                flags: 'safe'
            }];

            GRFDialog.prototype.initialize = function() {
                GRFDialog.super.prototype.initialize.apply(this, arguments);
                this.panel = new OO.ui.PanelLayout( {
                    padded: true,
                    expanded: false
                });
                this.content = new OO.ui.FieldsetLayout();
                this.Input = new OO.ui.TextInputWidget({
                    placeholder: 'سبب الإرجاع',
                    indicator: 'required',
                    value: ''
                });
                this.field = new OO.ui.FieldLayout(this.Input, {
                    label: 'هل تود استرجاع تعديلات '+ _userEdit + '؟',
                    align: 'top'
                });
                this.content.addItems([this.field]);
                this.panel.$element.append(this.content.$element);
                this.$body.append(this.panel.$element);
                this.Input.connect(this, {
                    'change': 'onInputChange'
                });
            };
            var SummaryRollback = 'استرجاع اخر تعديلات [[Special:Contributions/'+_userEdit+'|'+_userEdit+']] ([[User talk:'+_userEdit+'|نقاش]]) علي صفحة '+_namePage.replace(/_/g, ' ')+' ('+LGadgetRollbackFast+')';
            GRFDialog.prototype.onInputChange = function (value) {
                if (value != '') {
                  SummaryRollback =  'استرجاع اخر تعديلات [[Special:Contributions/'+_userEdit+'|'+_userEdit+']] ([[User talk:'+_userEdit+'|نقاش]]) علي صفحة '+_namePage.replace(/_/g, ' ')+' : '+value+' ('+LGadgetRollbackFast+')';
                }
            };
            GRFDialog.prototype.getActionProcess = function(action) {
                var dialog = this;
                if (action == 'save') {
                    return GRFDialog.super.prototype.getActionProcess.call(this, action).next(function() {
                        return APIRollback.rollback(_namePage, _userEdit, {
                            summary: SummaryRollback
                        });
                    }, this).execute().then(
                        function() {
                            mw.notify('استرجعت التعديلات');
                            dialog.close();
                            setTimeout(function() {
                                location.reload();
                            }, 1000);
                        },
                        function(_, data) {
                            dialog.close();
                            mw.notify(APIRollback.getErrorMessage(data), {
                                type: 'error'
                            });
                        });

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

            var windowManager = new OO.ui.WindowManager();
            $(document.body).append(windowManager.$element);
            var dialog = new GRFDialog();
            windowManager.addWindows([dialog]);
            windowManager.openWindow(dialog);
        });
    });
});