مدیاویکی:Gadget-UserMessages.js

از ویکی حقوق
پرش به ناوبری پرش به جستجو

نکته: پس از انتشار ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را پاک کنید.

  • فایرفاکس / سافاری: کلید Shift را نگه دارید و روی دکمهٔ Reload کلیک کنید، یا کلید‌های Ctrl-F5 یا Ctrl-R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-R)
  • گوگل کروم: کلیدهای Ctrl+Shift+R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-Shift-R)
  • اینترنت اکسپلورر/ Edge: کلید Ctrl را نگه‌دارید و روی دکمهٔ Refresh کلیک کنید، یا کلید‌های Ctrl-F5 را با هم فشار دهید
  • اپرا: Ctrl-F5 را بفشارید.
/**
 * This gadget is a substantial rewrite of the UserMessages gadget, influenced by
 * [[n:en:MediaWiki:Gadget-UserMessages.js]] and [[n:MediaWiki:Gadget-UserMessages.js]]
 * 
 * Unlike the previous versions, this uses OOUI and can accept one or more
 * parameters for the messages that are being posted on the user's talk page.
 */

(function($, mw) {
  'use strict';
  var windowManager;
  var UM;
  var UMOptions = {
    install: function() {
      if (mw.config.get('wgAction') === 'view' | (mw.config.get('wgAction') === 'edit' & mw.config.get('wgCurRevisionId') === 0)) {
        $(mw.util.addPortletLink( 'p-cactions', '#', 'اعلان', 'ca-warn', 'درج یک اعلان مبتنی بر الگو', '*')).click(function(e) {
          mw.loader.using(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui-windows', 'mediawiki.api']).done(UMOptions.createWindow);
          e.preventDefault();
        });
        // Late pre-loading
        mw.loader.load(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui-windows', 'mediawiki.api']);
      }
    },
    createWindow: function() {
      function PreviewPanel(config) {
        PreviewPanel.parent.call(this, config);
        
        this.$content = $('<div>').addClass('oo-ui-PreviewPanel');
      }
      OO.inheritClass(PreviewPanel, OO.ui.PanelLayout);
      PreviewPanel.prototype.setContent = function ($content) {
        this.$element.children().detach();
        this.$element.append($content);
        windowManager.getCurrentWindow().updateSize();
      };
      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 dialog = this;
        UserMessages.super.prototype.initialize.apply(this, arguments);
        
        this.buttons = [];
        this.buttons['Groups'] = [];
        this.buttons['Noobs'] = [];
        this.buttons['Warnings'] = [];
        this.buttons['Tools'] = [];
        this.buttons['Article'] = [];
        this.buttons['Copyright'] = [];
        this.buttons['Advanced'] = [];
        this.buttons['Spam'] = [];
        this.buttons['Block'] = [];
        this.buttons['Rights'] = [];

        this.buttons['Groups']['Noobs'] = new OO.ui.ButtonOptionWidget({
          label: 'تازه‌کاران',
          data: {
            group: 'Noobs'
          }
        });
        this.buttons['Groups']['Warnings'] = new OO.ui.ButtonOptionWidget({
          label: 'هشدارها',
          data: {
            group: 'Warnings'
          }
        });
        this.buttons['Groups']['Tools'] = new OO.ui.ButtonOptionWidget({
          label: 'ابزارها',
          data: {
            group: 'Tools'
          }
        });
        this.buttons['Groups']['Article'] = new OO.ui.ButtonOptionWidget({
          label: 'مقاله',
          data: {
            group: 'Article'
          }
        });
        this.buttons['Groups']['Copyright'] = new OO.ui.ButtonOptionWidget({
          label: 'حق تکثیر',
          data: {
            group: 'Copyright'
          }
        });
        this.buttons['Groups']['Advanced'] = new OO.ui.ButtonOptionWidget({
          label: 'پیشرفته',
          data: {
            group: 'Advanced'
          }
        });
        this.buttons['Groups']['Spam'] = new OO.ui.ButtonOptionWidget({
          label: 'هرزنگاری',
          data: {
            group: 'Spam'
          }
        });
        this.buttons['Groups']['Block'] = new OO.ui.ButtonOptionWidget({
          label: 'بستن',
          data: {
            group: 'Block'
          }
        });
        this.buttons['Groups']['Rights'] = new OO.ui.ButtonOptionWidget({
          label: 'دسترسی',
          data: {
            group: 'Rights'
          }
        });

        this.buttonSelectGroups = new OO.ui.ButtonSelectWidget({
          items: [
            this.buttons['Groups']['Noobs'],
            this.buttons['Groups']['Warnings'],
            this.buttons['Groups']['Tools'],
            this.buttons['Groups']['Article'],
            this.buttons['Groups']['Copyright'],
            this.buttons['Groups']['Advanced'],
            this.buttons['Groups']['Spam']
          ]
        });
        if ($(mw.config.get('wgUserGroups')).filter(['eliminator', 'sysop']).length > 0) {
          this.buttonSelectGroups.addItems([
            this.buttons['Groups']['Block']
          ]);
        }
        if ($(mw.config.get( 'wgUserGroups' )).filter(['sysop']).length > 0) {
          this.buttonSelectGroups.addItems([
            this.buttons['Groups']['Rights']
          ]);
        }
        this.buttonSelectGroups.selectItem(this.buttons['Groups']['Noobs']);
        this.buttonSelectGroups.on('choose', function(item) {
          dialog.buttonSelectChoices = new OO.ui.ButtonSelectWidget({
            items: dialog.buttonSelectChoicesItems[item.data.group]
          });
          dialog.buttonSelectChoices.selectItem();
          dialog.panelChoices.$element.children().detach();
          dialog.panelChoices.$element.append(dialog.buttonSelectChoices.$element);
          dialog.setChooseAction();
          dialog.panelParams.toggle(false);
          dialog.previewResult.toggle(false);
          windowManager.getCurrentWindow().updateSize();
        });

        this.buttons['Noobs']['WelcomeUser'] = new OO.ui.ButtonOptionWidget({
          label: 'خوشامد (کاربر)',
          data: {
            template: 'خوشامد',
            params: [
              {
                id: '1',
                label: 'پیام تکمیلی (اختیاری)'
              }
            ]
          }
        });
        this.buttons['Noobs']['WelcomeIP'] = new OO.ui.ButtonOptionWidget({
          label: 'خوشامد (آی‌پی)',
          data: {
            template: 'خوشامد-آی‌پی'
          }
        });
        this.buttons['Noobs']['Sign'] = new OO.ui.ButtonOptionWidget({
          label: 'امضا کنید',
          data: {
            template: 'امضا کنید',
            params: [
              {
                id: '1',
                label: 'پیام تکمیلی (اختیاری)'
              }
            ]
          }
        });
        this.buttons['Noobs']['DoNotSign'] = new OO.ui.ButtonOptionWidget({
          label: 'امضا مکنید',
          data: {
            template: 'امضا مکنید',
            params: [
              {
                id: '1',
                label: 'عنوان مقاله (اختیاری)'
              }
            ]
          }
        });
        this.buttons['Noobs']['Ping'] = new OO.ui.ButtonOptionWidget({
          label: 'آگاه‌سازی کنید',
          data: {
            template: 'آموزش آگاه‌سازی'
          }
        });
        this.buttons['Noobs']['UploadGuide'] = new OO.ui.ButtonOptionWidget({
          label: 'بارگذاری در ویکی‌فا (منصفانه)',
          data: {
            template: 'راهنمای بارگذاری پرونده در ویکی‌فا'
          }
        });
        this.buttons['Noobs']['CommonsGuide'] = new OO.ui.ButtonOptionWidget({
          label: 'بارگذاری در ویکی‌انبار (آزاد)',
          data: {
            template: 'راهنمای بارگذاری پرونده در ویکی‌انبار'
          }
        });
        this.buttons['Noobs']['Keyboard'] = new OO.ui.ButtonOptionWidget({
          label: 'صفحه کلید فارسی',
          data: {
            template: 'استفاده از صفحه کلید فارسی'
          }
        });
        this.buttons['Noobs']['Preview'] = new OO.ui.ButtonOptionWidget({
          label: 'عدم ذخیره متعدد',
          data: {
            template: 'از پیش‌نمایش استفاده کنید',
            params: [
              {
                id: '1',
                label: 'عنوان مقاله (اختیاری)'
              }
            ]
          }
        });
        this.buttons['Noobs']['SisterProjects'] = new OO.ui.ButtonOptionWidget({
          label: 'ویکی خواهر',
          data: {
            template: 'ویرایش در ویکی‌های خواهر',
            params: [
              {
                id: '1',
                label: 'نام پروژهٔ خواهر (اختیاری)'
              }
            ]
          }
        });
        this.buttons['Noobs']['EditSummary'] = new OO.ui.ButtonOptionWidget({
          label: 'خلاصه ویرایش',
          data: {
            template: 'تذکر خلاصه ویرایش'
          }
        });
        this.buttons['Noobs']['Sandbox'] = new OO.ui.ButtonOptionWidget({
          label: 'صفحه تمرین',
          data: {
            template: 'صفحه تمرین'
          }
        });
        this.buttons['Noobs']['FakeArticle'] = new OO.ui.ButtonOptionWidget({
          label: 'صفحهٔ کاربری مقاله‌نما',
          data: {
            template: 'هشدار مقاله‌نما',
            params: [
              {
                id: '1',
                label: 'نام صفحه (اختیاری)'
              }
            ]
          }
        });
        this.buttons['Warnings']['Vandalism'] = new OO.ui.ButtonOptionWidget({
          label: 'هشدار خرابکاری',
          data: {
            template: 'تذکر خرابکاری'
          }
        });
        this.buttons['Warnings']['VandalismFinal'] = new OO.ui.ButtonOptionWidget({
          label: 'آخرین هشدار خرابکاری',
          data: {
            template: 'تذکر خرابکاری (آخرین)'
          }
        });
        this.buttons['Warnings']['Disruption'] = new OO.ui.ButtonOptionWidget({
          label: 'هشدار اخلالگری',
          data: {
            template: 'هشدار ویرایش اخلالگرانه',
            params: [
              {
                id: '1',
                label: 'نام صفحه (اختیاری)'
              }
            ]
          }
        });
        this.buttons['Warnings']['Responsiveness'] = new OO.ui.ButtonOptionWidget({
          label: 'هشدار پاسخگویی',
          data: {
            template: 'پاسخ به بحث'
          }
        });
        this.buttons['Warnings']['SockPupptery'] = new OO.ui.ButtonOptionWidget({
          label: 'هشدار زاپاس‌بازی',
          data: {
            template: 'تذکر زاپاس'
          }
        });
        this.buttons['Tools']['VE'] = new OO.ui.ButtonOptionWidget({
          label: 'ویرایشگر دیداری',
          data: {
            template: 'کار با ویرایشگر دیداری'
          }
        });
        this.buttons['Tools']['ToWikifa'] = new OO.ui.ButtonOptionWidget({
          label: 'به ویکی‌فا',
          data: {
            template: 'به ویکی‌فا'
          }
        });
        this.buttons['Tools']['Translator'] = new OO.ui.ButtonOptionWidget({
          label: 'کمک‌مترجم',
          data: {
            template: 'ابزار کمک‌مترجم'
          }
        });
        this.buttons['Tools']['ExtraEditTools'] = new OO.ui.ButtonOptionWidget({
          label: 'ابزارهای ویرایشی',
          data: {
            template: 'ابزارهای ویرایشی'
          }
        });
        this.buttons['Tools']['Abar'] = new OO.ui.ButtonOptionWidget({
          label: 'ابرابزار',
          data: {
            template: 'ابرابزار'
          }
        });
        this.buttons['Tools']['Applications'] = new OO.ui.ButtonOptionWidget({
          label: 'ابزارهای کاربردی',
          data: {
            template: 'ابزارهای کاربردی'
          }
        });
        this.buttons['Tools']['ProveIt'] = new OO.ui.ButtonOptionWidget({
          label: 'ابزار اثباتش کن',
          data: {
            template: 'اثباتش کن'
          }
        });
        this.buttons['Tools']['AWD'] = new OO.ui.ButtonOptionWidget({
          label: 'ویرایشگر خودکار',
          data: {
            template: 'ویرایشگر خودکار'
          }
        });
        this.buttons['Tools']['Patrol'] = new OO.ui.ButtonOptionWidget({
          label: 'ابزار گشت سریع',
          data: {
            template: 'ابزار گشت‌زنی سریع'
          }
        });
        this.buttons['Tools']['CheckDictation'] = new OO.ui.ButtonOptionWidget({
          label: 'اشتباه‌یاب',
          data: {
            template: 'ابزار اشتباه‌یاب'
          }
        });

        this.buttons['Article']['Featured'] = new OO.ui.ButtonOptionWidget({
          label: 'برگزیده/خوبیده',
          data: {
            template: 'تذکر محتوای برگزیده'
          }
        });
        this.buttons['Article']['Tutorial'] = new OO.ui.ButtonOptionWidget({
          label: 'آموزش ویکی‌نویسی',
          data: {
            template: 'ویکی‌نویسی'
          }
        });
        this.buttons['Article']['Student'] = new OO.ui.ButtonOptionWidget({
          label: 'ویرایش دانشجویی',
          data: {
            template: 'ویرایش دانشجویی'
          }
        });
        this.buttons['Article']['Incomplete'] = new OO.ui.ButtonOptionWidget({
          label: 'نوشتار نامناسب',
          data: {
            template: 'نوشتار نامناسب',
            params: [
              {
                id: '1',
                label: 'عنوان مقاله (اختیاری)'
              }
            ]
          }
        });
        this.buttons['Article']['TooShort'] = new OO.ui.ButtonOptionWidget({
          label: 'زیادی کوتاه',
          data: {
            template: 'بیش از حد کوتاه',
            params: [
              {
                id: '1',
                label: 'عنوان مقاله (اختیاری)'
              }
            ]
          }
        });
        this.buttons['Article']['Minima'] = new OO.ui.ButtonOptionWidget({
          label: 'حداقل‌ها',
          data: {
            template: 'حداقل‌های مقاله'
          }
        });
        this.buttons['Article']['Deleted'] = new OO.ui.ButtonOptionWidget({
          label: 'حذف شده',
          data: {
            template: 'مقاله حذف شده',
            params: [
              {
                id: '1',
                label: 'پیام تکمیلی (اختیاری)'
              }
            ]
          }
        });
        this.buttons['Article']['Redirect'] = new OO.ui.ButtonOptionWidget({
          label: 'تغییرمسیر',
          data: {
            template: 'از تغییرمسیر استفاده کنید'
          }
        });
        this.buttons['Article']['Move'] = new OO.ui.ButtonOptionWidget({
          label: 'انتقال',
          data: {
            template: 'از انتقال استفاده کنید'
          }
        });
        this.buttons['Article']['Titles'] = new OO.ui.ButtonOptionWidget({
          label: 'القاب ممنوع',
          data: {
            template: 'هشدار القاب ممنوع'
          }
        });
        this.buttons['Article']['Spoiler'] = new OO.ui.ButtonOptionWidget({
          label: 'مخدوش‌کردن داستان فیلم',
          data: {
            template: 'خلاصه داستان را مخدوش نکنید'
          }
        });
        this.buttons['Article']['MachineTranslation'] = new OO.ui.ButtonOptionWidget({
          label: 'ترجمه ماشینی',
          data: {
            template: 'ترجمه ماشینی ممنوع',
            params: [
              {
                id: '1',
                label: 'عنوان صفحه (اختیاری)'
              }
            ]
          }
        });
        this.buttons['Article']['NoFlag'] = new OO.ui.ButtonOptionWidget({
          label: 'پرچم نزنید',
          data: {
            template: 'پرچم نزنید'
          }
        });
        this.buttons['Copyright']['DoNotCopy'] = new OO.ui.ButtonOptionWidget({
          label: 'کپی مکنید',
          data: {
            template: 'کپی مکنید',
            params: [
              {
                id: '1',
                label: 'عنوان مقاله (اختیاری)'
              }
            ]
          }
        });
        this.buttons['Copyright']['UseCitation'] = new OO.ui.ButtonOptionWidget({
          label: 'یادکرد دقیق',
          data: {
            template: 'یادکرد دقیق منبع',
            params: [
              {
                id: '1',
                label: 'عنوان مقاله (اختیاری)'
              }
            ]
          }
        });
        this.buttons['Copyright']['CiteNotCopy'] = new OO.ui.ButtonOptionWidget({
          label: 'ارجاع به جای کپی',
          data: {
            template: 'نحوه استفاده از مقالات علمی'
          }
        });
        this.buttons['Copyright']['ReliableSources'] = new OO.ui.ButtonOptionWidget({
          label: 'منابع معتبر',
          data: {
            template: 'منابع معتبر'
          }
        });
        this.buttons['Copyright']['CitationTutorial'] = new OO.ui.ButtonOptionWidget({
          label: 'آموزش یادکرد',
          data: {
            template: 'ارجاع صحیح'
          }
        });
        this.buttons['Copyright']['License'] = new OO.ui.ButtonOptionWidget({
          label: 'مجوز نگاره',
          data: {
            template: 'مجوز نگاره'
          }
        });
        this.buttons['Copyright']['Copyvio'] = new OO.ui.ButtonOptionWidget({
          label: 'هشدار نگاره',
          data: {
            template: 'هشدار نقض حق تکثیر'
          }
        });
        this.buttons['Copyright']['Ownership'] = new OO.ui.ButtonOptionWidget({
          label: 'قانون مالکیت',
          data: {
            template: 'هشدار نقض قانون مالکیت محتوا'
          }
        });

        this.buttons['Advanced']['Coord'] = new OO.ui.ButtonOptionWidget({
          label: 'مختصات',
          data: {
            template: 'مختصات‌دهی'
          }
        });
        this.buttons['Advanced']['Categories'] = new OO.ui.ButtonOptionWidget({
          label: 'رده‌بندی',
          data: {
            template: 'رده‌دهی'
          }
        });
        this.buttons['Advanced']['Interwiki'] = new OO.ui.ButtonOptionWidget({
          label: 'میان‌ویکی',
          data: {
            template: 'افزودن میان‌ویکی'
          }
        });

        this.buttons['Spam']['Advertisement'] = new OO.ui.ButtonOptionWidget({
          label: 'تبلیغ',
          data: {
            template: 'تبلیغ مکنید',
            params: [
              {
                id: '1',
                label: 'عنوان مقاله (اختیاری)'
              }
            ]
          }
        });
        this.buttons['Spam']['Notability'] = new OO.ui.ButtonOptionWidget({
          label: 'سرشناسی',
          data: {
            template: 'پیام سرشناسی',
            params: [
              {
                id: '1',
                label: 'عنوان مقاله (اختیاری)'
              },
              {
                id: '2',
                label: 'پیام تکمیلی (اختیاری)'
              }
            ]
          }
        });
        this.buttons['Spam']['Sereh'] = new OO.ui.ButtonOptionWidget({
          label: 'سره‌نویسی',
          data: {
            template: 'سره ننویسید',
            params: [
              {
                id: '1',
                label: 'عنوان مقاله (اختیاری)'
              }
            ]
          }
        });
        this.buttons['Spam']['3RR'] = new OO.ui.ButtonOptionWidget({
          label: 'سه‌برگردان',
          data: {
            template: 'هشدار نقض قانون سه‌برگردان',
            params: [
              {
                id: '1',
                label: 'عنوان مقاله (اختیاری)'
              }
            ]
          }
        });
        this.buttons['Spam']['Autobiography'] = new OO.ui.ButtonOptionWidget({
          label: 'خودنوشته',
          data: {
            template: 'خودنوشته'
          }
        });
        this.buttons['Spam']['WP:NOT'] = new OO.ui.ButtonOptionWidget({
          label: 'اشتباه گرفته‌اید',
          data: {
            template: 'اشتباه گرفته‌اید',
            params: [
              {
                id: '1',
                label: 'با چه اشتباه گرفته؟ (اختیاری)'
              }
            ]
          }
        });
        this.buttons['Spam']['Username'] = new OO.ui.ButtonOptionWidget({
          label: 'نام کاربری',
          data: {
            template: 'نام کاربری نامناسب',
            params: [
              {
                id: '1',
                label: 'دلیل (اختیاری)'
              }
            ]
          }
        });
        this.buttons['Spam']['Canvassing'] = new OO.ui.ButtonOptionWidget({
          label: 'جارزنی',
          data: {
            template: 'جارزنی'
          }
        });

        this.buttons['Block']['Username'] = new OO.ui.ButtonOptionWidget({
          label: 'نام کاربری نامناسب',
          data: {
            template: 'بستن نام تبلیغی'
          }
        });
        this.buttons['Block']['OneDay'] = new OO.ui.ButtonOptionWidget({
          label: 'یک‌روزه',
          data: {
            template: 'قطع دسترسی موقت',
            params: [
              {
                id: 'دلیل',
                label: 'دلیل (اختیاری)'
              }
            ]
          }
        });
        this.buttons['Block']['Indefinite'] = new OO.ui.ButtonOptionWidget({
          label: 'بی‌پایان',
          data: {
            template: 'قطع دسترسی بی‌پایان',
            params: [
              {
                id: 'دلیل',
                label: 'دلیل (اختیاری)'
              }
            ]
          }
        });
        this.buttons['Block']['Detailed'] = new OO.ui.ButtonOptionWidget({
          label: 'با ذکر مدت و دلیل',
          data: {
            template: 'قطع دسترسی',
            params: [
              {
                id: 'مدت',
                label: 'مدت (اختیاری)'
              },
              {
                id: 'دلیل',
                label: 'دلیل (اختیاری)'
              }
            ]
          }
        });
        this.buttons['Block']['Partial'] = new OO.ui.ButtonOptionWidget({
          label: 'موردی',
          data: {
            template: 'قطع دسترسی موردی',
            params: [
              {
                id: 'صفحات',
                label: 'صفحه‌ها (مثل [[فلان]] و [[بهمان]])'
              },
              {
                id: 'فضای نام',
                label: 'فضای نام (بین موارد «و» بگذارید)'
              },
              {
                id: 'مدت',
                label: 'مدت (اختیاری)'
              },
              {
                id: 'دلیل',
                label: 'دلیل (اختیاری)'
              }
            ]
          }
        });
        this.buttons['Block']['AbuseFilter'] = new OO.ui.ButtonOptionWidget({
          label: 'اشتباه پالایه',
          data: {
            template: 'پوزش پالایه'
          }
        });

        this.buttons['Rights']['Autopatrol'] = new OO.ui.ButtonOptionWidget({
          label: 'گشت خودکار',
          data: {
            template: 'اعطای گشت خودکار'
          }
        });
        this.buttons['Rights']['Revert'] = new OO.ui.ButtonOptionWidget({
          label: 'واگردان',
          data: {
            template: 'اعطای واگردان'
          }
        });
        this.buttons['Rights']['Patroller'] = new OO.ui.ButtonOptionWidget({
          label: 'گشت‌زن',
          data: {
            template: 'اعطای گشت‌زن'
          }
        });
        this.buttons['Rights']['TemplateEditor'] = new OO.ui.ButtonOptionWidget({
          label: 'ویرایشگر الگو',
          data: {
            template: 'اعطای ویرایشگر الگو'
          }
        });
        this.buttons['Rights']['Eliminator'] = new OO.ui.ButtonOptionWidget({
          label: 'ویکی‌بان',
          data: {
            template: 'اعطای ویکی‌بان'
          }
        });
        this.buttons['Rights']['Sysop'] = new OO.ui.ButtonOptionWidget({
          label: 'مدیر',
          data: {
            template: 'اعطای مدیریت'
          }
        });
        this.buttons['Rights']['ReinstateEliminator'] = new OO.ui.ButtonOptionWidget({
          label: 'تمدید ویکی‌بانی',
          data: {
            template: 'تمدید ویکی‌بانی'
          }
        });

        this.buttonSelectChoicesItems = [];
        this.buttonSelectChoicesItems['Noobs'] = [
          this.buttons['Noobs']['WelcomeUser'],
          this.buttons['Noobs']['WelcomeIP'],
          this.buttons['Noobs']['Sign'],
          this.buttons['Noobs']['DoNotSign'],
          this.buttons['Noobs']['Ping'],
          this.buttons['Noobs']['UploadGuide'],
          this.buttons['Noobs']['CommonsGuide'],
          this.buttons['Noobs']['Keyboard'],
          this.buttons['Noobs']['Preview'],
          this.buttons['Noobs']['Sandbox'],
          this.buttons['Noobs']['SisterProjects'],
          this.buttons['Noobs']['EditSummary'],
          this.buttons['Noobs']['FakeArticle']
        ];
        this.buttonSelectChoicesItems['Warnings'] = [
          this.buttons['Warnings']['Vandalism'],
          this.buttons['Warnings']['VandalismFinal'],
          this.buttons['Warnings']['Disruption'],
          this.buttons['Warnings']['Responsiveness'],
          this.buttons['Warnings']['SockPupptery']
        ];
        this.buttonSelectChoicesItems['Tools'] = [
          this.buttons['Tools']['VE'],
          this.buttons['Tools']['ToWikifa'],
          this.buttons['Tools']['Translator'],
          this.buttons['Tools']['ExtraEditTools'],
          this.buttons['Tools']['Abar'],
          this.buttons['Tools']['Applications'],
          this.buttons['Tools']['ProveIt'],
          this.buttons['Tools']['AWD'],
          this.buttons['Tools']['Patrol'],
          this.buttons['Tools']['CheckDictation']
        ];
        this.buttonSelectChoicesItems['Article'] = [
          this.buttons['Article']['Featured'],
          this.buttons['Article']['Tutorial'],
          this.buttons['Article']['Student'],
          this.buttons['Article']['Incomplete'],
          this.buttons['Article']['TooShort'],
          this.buttons['Article']['Minima'],
          this.buttons['Article']['Deleted'],
          this.buttons['Article']['Redirect'],
          this.buttons['Article']['Move'],
          this.buttons['Article']['Titles'],
          this.buttons['Article']['Spoiler'],
          this.buttons['Article']['MachineTranslation'],
          this.buttons['Article']['NoFlag']
        ];
        this.buttonSelectChoicesItems['Copyright'] = [
          this.buttons['Copyright']['DoNotCopy'],
          this.buttons['Copyright']['UseCitation'],
          this.buttons['Copyright']['CiteNotCopy'],
          this.buttons['Copyright']['ReliableSources'],
          this.buttons['Copyright']['CitationTutorial'],
          this.buttons['Copyright']['License'],
          this.buttons['Copyright']['Copyvio'],
          this.buttons['Copyright']['Ownership']
        ];
        this.buttonSelectChoicesItems['Advanced'] = [
          this.buttons['Advanced']['Coord'],
          this.buttons['Advanced']['Categories'],
          this.buttons['Advanced']['Interwiki']
        ];
        this.buttonSelectChoicesItems['Spam'] = [
          this.buttons['Spam']['Advertisement'],
          this.buttons['Spam']['Notability'],
          this.buttons['Spam']['Sereh'],
          this.buttons['Spam']['3RR'],
          this.buttons['Spam']['Autobiography'],
          this.buttons['Spam']['WP:NOT'],
          this.buttons['Spam']['Username'],
          this.buttons['Spam']['Canvassing']
        ];
        this.buttonSelectChoicesItems['Block'] = [
          this.buttons['Block']['Username'],
          this.buttons['Block']['OneDay'],
          this.buttons['Block']['Indefinite'],
          this.buttons['Block']['Detailed'],
          this.buttons['Block']['Partial'],
          this.buttons['Block']['AbuseFilter']
        ];
        this.buttonSelectChoicesItems['Rights'] = [
          this.buttons['Rights']['Autopatrol'],
          this.buttons['Rights']['Revert'],
          this.buttons['Rights']['Patroller'],
          this.buttons['Rights']['TemplateEditor'],
          this.buttons['Rights']['Eliminator'],
          this.buttons['Rights']['Sysop'],
          this.buttons['Rights']['ReinstateEliminator']
        ];

        // The default choice
        this.buttonSelectChoices = new OO.ui.ButtonSelectWidget({
          items: this.buttonSelectChoicesItems['Noobs']
        });

        this.setChooseAction = function() {
          dialog.buttonSelectChoices.on('choose', function(item) {
            dialog.previewResult.toggle(false);
            if (item.data !== undefined & item.data.params !== undefined) {
              dialog.panelParams.toggle(true);
              dialog.buttonPreview.toggle(true);
              dialog.buttonReset.toggle(true);
              for (var i = 0; i < item.data.params.length; i++) {
                dialog.textParamLayouts[i].toggle(true);
                dialog.textParamLayouts[i].setLabel(item.data.params[i].label);
                dialog.textParamLayouts[i].setData(item.data.params[i].id);
              }
              for (var i = item.data.params.length; i < 4; i++) {
                dialog.textParamLayouts[i].toggle(false);
              }
            } else {
              for (var i = 0; i < 4; i++) {
                dialog.textParamLayouts[i].toggle(false);
              }
              dialog.panelParams.toggle(true);
              dialog.buttonPreview.toggle(true);
              dialog.buttonReset.toggle(true);
            }
            windowManager.getCurrentWindow().updateSize();
          });          
        }
        this.setChooseAction();

        // The parameters
        this.textParams = [];
        this.textParamLayouts = [];

        this.textParams[0] = new OO.ui.TextInputWidget({
          placeholder: 'متنی وارد کنید'
        });
        this.textParams[1] = new OO.ui.TextInputWidget({
          placeholder: 'متنی وارد کنید'
        });
        this.textParams[2] = new OO.ui.TextInputWidget({
          placeholder: 'متنی وارد کنید'
        });
        this.textParams[3] = new OO.ui.TextInputWidget({
          placeholder: 'متنی وارد کنید'
        });
        this.textParamLayouts[0] = new OO.ui.FieldLayout( this.textParams[0], {
          label: 'پارامتر اول'
        });
        this.textParamLayouts[1] = new OO.ui.FieldLayout( this.textParams[1], {
          label: 'پارامتر دوم'
        });
        this.textParamLayouts[2] = new OO.ui.FieldLayout( this.textParams[2], {
          label: 'پارامتر سوم'
        });
        this.textParamLayouts[3] = new OO.ui.FieldLayout( this.textParams[3], {
          label: 'پارامتر چهارم'
        });
        this.paramFieldset = new OO.ui.FieldsetLayout({
          items: this.textParamLayouts
        });
        this.buttonPreview = new OO.ui.ButtonWidget({
          label: 'پیش‌نمایش',
          icon: 'check',
          title: 'پیش‌نمایش',
          flags: 'progressive'
        });
        this.buttonPreview.on('click', function() {
          dialog.previewResult.toggle(true);
          dialog.previewResult.setContent(''); // Makes any previous preview results go away, so the user notices the change
          windowManager.getCurrentWindow().updateSize();
          var wikitext = UserMessages.prepareWikitext(dialog);
          var api = new mw.Api();
          api.get({
            action: 'parse',
            text: wikitext,
            pst: true
          }).done(function( data ) {
            dialog.previewResult.setContent($(data.parse.text['*']));
          });
        });
        this.buttonReset = new OO.ui.ButtonWidget({
          label: 'پاک کردن',
          icon: 'clear',
          title: 'پاک کردن',
          flags: 'destructive'
        });
        this.buttonReset.on('click', function() {
          for (var i = 0; i < 4; i++) {
              dialog.textParams[i].setValue('');
          }
          dialog.previewResult.toggle(false);
          dialog.buttonPreview.toggle(true);
          dialog.buttonReset.toggle(true);
          windowManager.getCurrentWindow().updateSize();
        });
        this.panelParams = new OO.ui.PanelLayout({
          expanded: true,
          padded: true
        });
        this.previewResult = new PreviewPanel({
          expanded: true,
          padded: true,
          $content: ''
        });
        this.previewResult.toggle(false);
        this.panelParams.$element.append(this.paramFieldset.$element);
        this.panelParams.$element.append(this.buttonPreview.$element);
        this.panelParams.$element.append(this.buttonReset.$element);
        for (var i = 0; i < 4; i++) {
            this.textParamLayouts[i].toggle(false);
        }
        this.buttonPreview.toggle(false);
        this.buttonReset.toggle(false);
        this.panelGroups = new OO.ui.PanelLayout({
          expanded: true,
          padded: true,
          classes: ['panelGroups']
        });
        this.panelGroups.$element.append(this.buttonSelectGroups.$element);
        this.panelChoices = new OO.ui.PanelLayout({
          expanded: true,
          padded: true,
          classes: ['panelChoices']
        });
        this.panelChoices.$element.append(this.buttonSelectChoices.$element);
        this.panelPreview = new OO.ui.PanelLayout({
          expanded: true,
          padded: true
        });
        this.panelPreview.$element.append(this.previewResult.$element);

        this.stackLayout = new OO.ui.StackLayout({
          items: [
            this.panelGroups,
            this.panelChoices,
            this.panelParams,
            this.panelPreview
          ],
          continuous: true,
          scrollable: false
        });
        this.$body.append(this.stackLayout.$element);
      };
      UserMessages.prepareWikitext = function(dialog) {
        var paramNames = [];
        var paramValues = [];
        var btn = dialog.buttonSelectChoices.findSelectedItem().getData();
        var wikitext = '{{subst:' + btn.template;
        for (var i = 0; i < 4; i ++) {
          paramNames[i] = dialog.textParamLayouts[i].getData();
          paramValues[i] = dialog.textParams[i].getValue();
          if (dialog.textParamLayouts[i].isVisible()) {
            wikitext += '|' + paramNames[i] + '=' + paramValues[i];
          }
        }
        wikitext += '}}';
        return wikitext;
      }
      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 wikitext = UserMessages.prepareWikitext(dialog);
          wikitext += '\n~~' + '~~';
          var summary = 'افزودن «[[الگو:' + dialog.buttonSelectChoices.findSelectedItem().getData().template + ']]» به کمک [[ویکی‌پدیا:ابزار اعلان به کاربران|ابزار اعلان به کاربران]]';
          return new OO.ui.Process(function() {
            UMOptions.savePage(mw.config.get('wgPageName'), wikitext, summary, function() {
              location.reload();
            });
            dialog.close({
              action: action
            }).done(function() {
              // Page will be reloaded once saved
            });
          });
        }
        return UserMessages.super.prototype.getActionProcess.call(this, action);
      };
      if (!windowManager) {
        windowManager = new OO.ui.WindowManager();
        $('body').append(windowManager.$element);
      }
      UM = new UserMessages({
        size: 'large'
      });
      windowManager.addWindows([UM]);
      windowManager.openWindow(UM);
    },
    savePage: function(title, text, summary, callback) {
      (new mw.Api()).post({
        action: 'edit',
        title: title,
        summary: summary,
        appendtext: '\n' + text,
        token: mw.user.tokens.get('csrfToken')
      }).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);
      });
    },
  };
  if (mw.config.get('wgNamespaceNumber') === 3 | mw.config.get('wgPageName') === 'ویکی‌پدیا:صفحه_تمرین') {
    $(UMOptions.install);
  }
})(jQuery, mediaWiki);