User:Mooeypoo/testgadget.js

// source: https://fa.wikipedia.org/wiki/%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1:Huji/UserMessages.js?uselang=en /*global jQuery, mediaWiki */ (function($, mw) { 'use strict';  var windowManager;  var UM;  var UMOptions = {    install: function {      if (mw.config.get('wgAction') === 'view') {        $(mw.util.addPortletLink( 'p-cactions', '#', 'تذکر', 'ca-warn', 'فرستادن سریع یک پیام یا تذکر مبتنی بر الگو', '*')).click(function(e) { mw.loader.using(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui-windows', 'mediawiki.api']) .then(UMOptions.createWindow) .then( function {				windowManager.openWindow( UM );        	} ); e.preventDefault; });       // Late pre-loading        mw.loader.load(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui-windows', 'mediawiki.api']);      }    },    createWindow: function {      function UserMessages(config) {        UserMessages.super.call(this, config);      }      OO.inheritClass(UserMessages, OO.ui.ProcessDialog);      UserMessages.static.name = 'Warn dialog';      UserMessages.static.title = 'ارسال پیام یا تذکر';      UserMessages.static.actions = [{        action: 'warn',        label: 'تذکر',        flags: 'primary'      }, {        label: 'لغو',        flags: 'safe'      }];      UserMessages.prototype.initialize = function {        var fieldset = [];        UserMessages.super.prototype.initialize.apply(this, arguments);        this.panel = new OO.ui.PanelLayout({ padded: true, expanded: false });       this.content = new OO.ui.FieldsetLayout;        UMOptions.radioWelcome = new OO.ui.RadioOptionWidget({ id: 'radioWelcome', label: 'خوشامد', });       UMOptions.radioNoob = new OO.ui.RadioOptionWidget({ id: 'radioNoob', label: 'تازه‌کاران', });       UMOptions.radioTools = new OO.ui.RadioOptionWidget({ id: 'radioTools', label: 'ابزارها', });       UMOptions.radioArticle = new OO.ui.RadioOptionWidget({ id: 'radioArticle', label: 'مقاله', });       UMOptions.radioCopyright = new OO.ui.RadioOptionWidget({ id: 'radioCopyright', label: 'حق تکثیر', });       UMOptions.radioAdvanced = new OO.ui.RadioOptionWidget({ id: 'radioAdvanced', label: 'پیشرفته', });       UMOptions.radioSpam = new OO.ui.RadioOptionWidget({ id: 'radioSpam', label: 'هرزنگاری', });       UMOptions.radioBlock = new OO.ui.RadioOptionWidget({ id: 'radioBlock', label: 'بستن', });       UMOptions.radioRights = new OO.ui.RadioOptionWidget({ id: 'radioRights', label: 'دسترسی', });       UMOptions.radioCategories = new OO.ui.RadioSelectWidget({ items: [ UMOptions.radioWelcome, UMOptions.radioNoob, UMOptions.radioTools, UMOptions.radioArticle, UMOptions.radioCopyright, UMOptions.radioAdvanced, UMOptions.radioSpam, UMOptions.radioBlock, UMOptions.radioRights ]       });        fieldset.push(new OO.ui.FieldLayout(UMOptions.radioCategories, {          label: 'نوع پیام یا تذکر',          align: 'top'        }));        this.content.addItems(fieldset);        this.panel.$element.append(this.content.$element);        this.$body.append(this.panel.$element);      };      UserMessages.prototype.getSetupProcess = function(data) {        data = data || {};        return UserMessages.super.prototype.getSetupProcess.call( this, data )          .next( function  { // Do something }, this );     };      UserMessages.prototype.getActionProcess = function(action) {        var dialog = this;        if (action === 'warn') {          var page = mw.config.get('wgPageName');          return new OO.ui.Process(function { // Determine the text to be added UMOptions.loadSavePageRefresh(mw.config.get('wgPageName'), 'text', 'summary'); dialog.close({             action: action            }).done(function {              // Page will be reloaded once saved            }); });       }        return UserMessages.super.prototype.getActionProcess.call(this, action);      }; debugger;      if (!windowManager) {        windowManager = new OO.ui.WindowManager;        $('body').append(windowManager.$element);      }      if (!UM) {        UM = new UserMessages({ size: 'medium' });       windowManager.addWindows([UM]);      }      UMOptions.loadPage(mw.config.get('wgPageName'), function(pageText){ // Do something });   },    loadPage: function(title, callback) {      (new mw.Api).get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', format: 'json' }).done(function(data) { try { callback($.map(data.query.pages, function(value) { return value; })[0].revisions[0]['*']); } catch (exception) { callback(''); }     }).fail(function(data) { callback($.map(data.query.pages, function(value) { return value; })[0].revisions[0]); });   },    savePage: function(title, text, summary, callback) {      (new mw.Api).post({ action: 'edit', title: title, text: text, summary: summary, minor: '1', token: mw.user.tokens.get('editToken') }).done(function(data) { if (data.error && data.error.info) { if (data.error.info == 'missingtitle') { mw.notify('صفحه ' + title + ' موجود نیست!', {             type: 'error'            }); } else { mw.notify(data.error.info, {             type: 'error'            }); }       } else { callback; }     }).fail(function(data) { mw.notify(data); });   },    loadSavePageRefresh: function(page, replaceCallback, summary) {      UMOptions.loadPage(page, function(text) { UMOptions.savePage(page, replaceCallback(text), summary, function {         location.reload;        }); });   }  };  if (mw.config.get('wgNamespaceNumber') == 3) {    $(UMOptions.install);  } })(jQuery, mediaWiki);