پرش به محتوا

مدیاویکی:Gadget-close.js: تفاوت میان نسخه‌ها

از ویکی‌پدیا، دانشنامهٔ آزاد
محتوای حذف‌شده محتوای افزوده‌شده
تغییر نام متغیر به چیزی معنی‌دارتر که از نظر بزرگی و کوچکی هم با نام باقی متغیرها هماهنگی باشد؛ افزودن فاصله برای فهرست گلوله‌ای/شماره‌ای
حذف و بماند هم جزو مواردی هستند که باید از اول سطر شروع بشوند
خط ۳۴۹: خط ۳۴۹:
newText += archiveSectionOptions.textComment.getValue();
newText += archiveSectionOptions.textComment.getValue();
newText += ' ~~' + '~~';
newText += ' ~~' + '~~';
if (archiveSectionOptions.radioSupport.isSelected() || archiveSectionOptions.radioOppose.isSelected()) {
if (archiveSectionOptions.radioSupport.isSelected() ||
archiveSectionOptions.radioOppose.isSelected() ||
archiveSectionOptions.radioDelete.isSelected() ||
archiveSectionOptions.radioNotDel.isSelected()) {
newText = current + '\n' + newText;
newText = current + '\n' + newText;
} else {
} else {

نسخهٔ ‏۱۰ ژانویهٔ ۲۰۱۷، ساعت ۰۴:۳۱

/*global jQuery, mediaWiki */
(function($, mw) {
  'use strict';
  var windowManager;
  var archiveSection;
  var commentInSection;
  var archiveSectionOptions = {
    install: function() {
      if ($.inArray(mw.config.get("wgNamespaceNumber"), [1,3,4,5,7,9,11,13,15]) > -1) {
        $('.mw-editsection').each(function() {
          var span = $('<span>', {
            class: 'mw-editsection mw-archivesection'
          }).insertBefore(this);
          span.append($('<span>', {
            class: 'mw-editsection-bracket',
            text: '['
          }));
          span.append($('<a>', {
            href: '#',
            title: 'ثبت نظر (موافق/مخالف/شد/...)',
            style: 'font-size: smaller;',
            text: 'ثبت نظر',
          }).click(function(e) {
            e.preventDefault();
            var section = e.target;
            mw.loader.using(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui-windows']).done(function() {
              archiveSectionOptions.createCommentWindow(section);
            });
          }));
          span.append($('<span>', {
            class: 'mw-editsection-bracket',
            text: ' / '
          }));
          span.append($('<a>', {
            href: '#',
            title: 'جمع‌بندی این بخش',
            style: 'font-size: smaller;',
            text: 'جمع‌بندی',
          }).click(function(e) {
            e.preventDefault();
            var section = e.target;
            mw.loader.using(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui-windows']).done(function() {
              archiveSectionOptions.createArchiveWindow(section);
            });
          }));
          span.append($('<span>', {
            class: 'mw-editsection-bracket',
            text: ']'
          }));
          // Late pre-loading
          mw.loader.load(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui-windows']);
        });
      }
    },
    createArchiveWindow: function(section) {
      var query = archiveSectionOptions.getQuery(section);
      archiveSectionOptions.currentSectionId = query.section;

      function ArchiveSection(config) {
        ArchiveSection.super.call(this, config);
      }
      OO.inheritClass(ArchiveSection, OO.ui.ProcessDialog);
      ArchiveSection.static.name = 'archive';
      ArchiveSection.static.title = 'جمع‌بندی بخش';
      ArchiveSection.static.actions = [{
        action: 'archive',
        label: 'جمع‌بندی',
        flags: 'primary'
      }, {
        label: 'لغو',
        flags: 'safe'
      }];
      ArchiveSection.prototype.initialize = function() {
        var fieldset = [];
        ArchiveSection.super.prototype.initialize.apply(this, arguments);
        this.panel = new OO.ui.PanelLayout({
          padded: true,
          expanded: false
        });
        this.content = new OO.ui.FieldsetLayout();
        archiveSectionOptions.switchTop = new OO.ui.ToggleSwitchWidget({
          label: 'جمع‌بندی بالای متن باشد',
          value: true,
        });
        archiveSectionOptions.switchSuccess = new OO.ui.ToggleSwitchWidget({
          label: 'بحث در رسیدن به اجماع موفق بود',
          value: true,
        });
        archiveSectionOptions.switchBold = new OO.ui.ToggleSwitchWidget({
          label: 'متن جمع‌بندی ضخیم نمایش داده شود',
          value: false,
        });
        archiveSectionOptions.textSummary = new OO.ui.TextInputWidget({
          placeholder: 'متن جمع‌بندی را وارد کنید',
        });
        //archiveSectionOptions.textSummary.setRTL(true);
        fieldset.push(new OO.ui.FieldLayout(archiveSectionOptions.switchTop, {
          label: 'جمع‌بندی بالای متن باشد',
          align: 'inline',
        }));
        fieldset.push(new OO.ui.FieldLayout(archiveSectionOptions.switchSuccess, {
          label: 'بحث در رسیدن به اجماع موفق بود',
          align: 'inline',
        }));
        fieldset.push(new OO.ui.FieldLayout(archiveSectionOptions.switchBold, {
          label: 'متن جمع‌بندی ضخیم نمایش داده شود',
          align: 'inline',
        }));
        fieldset.push(new OO.ui.FieldLayout(archiveSectionOptions.textSummary, {
          label: 'جمع‌بندی:',
          align: 'top'
        }));
        this.content.addItems(fieldset);
        this.panel.$element.append(this.content.$element);
        this.$body.append(this.panel.$element);
      };
      ArchiveSection.prototype.getActionProcess = function(action) {
        var dialog = this;
        if (action === 'archive') {
          archiveSectionOptions.doEdit(archiveSectionOptions.currentSectionId, action);
        }
        return ArchiveSection.super.prototype.getActionProcess.call(this, action);
      };
      if (!windowManager) {
        windowManager = new OO.ui.WindowManager();
        $('body').append(windowManager.$element);
      }
      if (!archiveSection) {
        archiveSection = new ArchiveSection({
          size: 'medium'
        });
        windowManager.addWindows([archiveSection]);
      }
      windowManager.openWindow(archiveSection);
    },
    createCommentWindow: function(section) {
      var query = archiveSectionOptions.getQuery(section);
      archiveSectionOptions.currentSectionId = query.section;

      function CommentInSection(config) {
        CommentInSection.super.call(this, config);
      }
      OO.inheritClass(CommentInSection, OO.ui.ProcessDialog);
      CommentInSection.static.title = 'comment';
      CommentInSection.static.title = 'ثبت نظر';
      CommentInSection.static.actions = [{
        action: 'comment',
        label: 'ثبت نظر',
        flags: 'primary'
      }, {
        label: 'لغو',
        flags: 'safe'
      }];
      CommentInSection.prototype.initialize = function() {
        var fieldset = [];
        CommentInSection.super.prototype.initialize.apply(this, arguments);
        this.panel = new OO.ui.PanelLayout({
          padded: true,
          expanded: false
        });
        this.content = new OO.ui.FieldsetLayout();
        archiveSectionOptions.radioComment = new OO.ui.RadioOptionWidget({
          label: 'پیام',
        });
        archiveSectionOptions.radioDone = new OO.ui.RadioOptionWidget({
          label: 'شد',
        });
        archiveSectionOptions.radioReject = new OO.ui.RadioOptionWidget({
          label: 'نشد',
        });
        archiveSectionOptions.radioSupport = new OO.ui.RadioOptionWidget({
          label: 'موافق',
        });
        archiveSectionOptions.radioOppose = new OO.ui.RadioOptionWidget({
          label: 'مخالف',
        });
        archiveSectionOptions.radioDelete = new OO.ui.RadioOptionWidget({
          label: 'حذف',
        });
        archiveSectionOptions.radioNotDel = new OO.ui.RadioOptionWidget({
          label: 'بماند',
        });
        archiveSectionOptions.radioCommentType = new OO.ui.RadioSelectWidget({
          items: [
          	archiveSectionOptions.radioComment,
          	archiveSectionOptions.radioDone,
            archiveSectionOptions.radioReject,
            archiveSectionOptions.radioSupport,
            archiveSectionOptions.radioOppose,
            archiveSectionOptions.radioDelete,
            archiveSectionOptions.radioNotDel
          ]
        });
        archiveSectionOptions.radioCommentType.selectItem(archiveSectionOptions.radioComment);
        archiveSectionOptions.textComment = new OO.ui.TextInputWidget({
          placeholder: 'متن نظر را وارد کنید',
        });
        //archiveSectionOptions.textComment.setRTL(true);
        fieldset.push(new OO.ui.FieldLayout(archiveSectionOptions.radioCommentType, {
          label: 'برچسب قبل از نظر',
          align: 'top'
        }));
        fieldset.push(new OO.ui.FieldLayout(archiveSectionOptions.textComment, {
          label: 'متن نظر:',
          align: 'top'
        }));
        this.content.addItems(fieldset);
        this.panel.$element.append(this.content.$element);
        this.$body.append(this.panel.$element);
      };
      CommentInSection.prototype.getActionProcess = function(action) {
        var dialog = this;
        if (action === 'comment') {
          archiveSectionOptions.doEdit(archiveSectionOptions.currentSectionId, action);
        }
        return CommentInSection.super.prototype.getActionProcess.call(this, action);
      };
      if (!windowManager) {
        windowManager = new OO.ui.WindowManager();
        $('body').append(windowManager.$element);
      }
      if (!commentInSection) {
        commentInSection = new CommentInSection({
          size: 'medium'
        });
        windowManager.addWindows([commentInSection]);
      }
      windowManager.openWindow(commentInSection);
    },
    getQuery: function(section) {
      var href = $(section).parent().next().find('a').attr('href');
      var query = new mw.Uri(href).query;
      return query;
    },
    setIndentation: function(text, newText) {
      text = text.replace('\r', '')
      var lines = text.split('\n');
      var lastline = lines[lines.length - 1];
      var colons = lastline.match('^:*')[0].length;
      var indentation = '';
      for(var i = 0; i < colons + 1; i++){
        indentation += ':';
      }
      text = text + '\n' + indentation + newText.trim();
      return text
    },
    doEdit: function(sectionId, action) {
      (new mw.Api()).get({
        format: 'json',
        action: 'query',
        titles: mw.config.get("wgPageName"),
        rvsection: sectionId,
        prop: 'revisions',
        rvprop: 'content',
      }).then(function(data) {
        var page = data.query.pages[Object.keys(data.query.pages)[0]];
        var current = page.revisions[0]['*'];
        var header = current.substr(0, current.indexOf('\n'));
        var content = current.substr(current.indexOf('\n') + 1);
        var newText = '';
        var section_title = (current.match(/^(=+)[^=]*?(\1)$/m) || [''])[0];
        section_title = section_title.replace(/\=/g, '');
        var editSummary = '/' + '*' + section_title + '*' + '/ ';
        if (action == 'archive') {
          editSummary += 'جمع‌بندی: ';
          editSummary += archiveSectionOptions.textSummary.getValue();
          newText = header + '\n';
          // Per Special:Diff/18468612
          if (mw.config.get("wgPageName") == "ویکی‌پدیا:درخواست_انتقال") {
             if (archiveSectionOptions.switchSuccess.getValue()) {
               content = content.replace(/\{\{وضعیت\|?\}\}/, '{{وضعیت|شد}}');
             } else {
               content = content.replace(/\{\{وضعیت\|?\}\}/, '{{وضعیت|نشد}}');
             }
          }
          newText += '{{بسته';
          if (archiveSectionOptions.switchSuccess.getValue()) {
            newText += '}}\n';
          } else {
            newText += '|ناموفق=بله}}\n';
          }
          var summaryText = '';
          if (archiveSectionOptions.textSummary.getValue()) {
            if (archiveSectionOptions.switchBold.getValue()) {
              summaryText += "'''";
            }
            summaryText += archiveSectionOptions.textSummary.getValue();
            if (archiveSectionOptions.switchBold.getValue()) {
              summaryText += "'''";
            }
            summaryText += ' ~~' + '~~\n';
          }
          if (archiveSectionOptions.switchTop.getValue()) {
            if (archiveSectionOptions.textSummary.getValue()) {
              newText += ':' + summaryText;
            }
             newText += content;
            if( newText.indexOf('{{بسته') > -1) newText += '\n{{پایان بسته}}';
          } else {
            if (archiveSectionOptions.textSummary.getValue()) {
              newText = archiveSectionOptions.setIndentation(newText + content, summaryText);
            } else {
              newText = newText + content;
            }
            if( newText.indexOf('{{بسته') > -1) newText += '\n{{پایان بسته}}';
          }
          return (new mw.Api()).post({
            format: 'json',
            action: 'edit',
            title: mw.config.get("wgPageName"),
            section: sectionId,
            summary: editSummary,
            text: newText,
            token: mw.user.tokens.get('editToken')
          });
        } else {
          // editSummary += archiveSectionOptions.textComment.getValue();
          var currentTxt = current.replace('\r', '')
          var prefix = '';
          if (currentTxt.search('\n*')>0){
                prefix = '* ';
          } else if (currentTxt.search('\n#')>0){
                prefix = '# ';
          } else{
                prefix = '* ';
          }
          if (archiveSectionOptions.radioDone.isSelected()) {
            newText = '{{شد}} ';
            editSummary += 'انجام شد';
          } else if (archiveSectionOptions.radioComment.isSelected()){
            newText = '';
            editSummary += 'پیام';
          } else if (archiveSectionOptions.radioReject.isSelected()) {
            newText = '{{نشد}} ';
            editSummary += 'انجام نشد';
          } else if (archiveSectionOptions.radioNotDel.isSelected()) {
            newText = prefix + ' {{بماند}} ';
            editSummary += 'ثبت نظر بماند';
          } else if (archiveSectionOptions.radioDelete.isSelected()) {
            newText = prefix + ' {{حذف}} ';
            editSummary += 'ثبت نظر حذف شود';
          } else if (archiveSectionOptions.radioSupport.isSelected()) {
            newText = prefix + ' {{موافق}} ';
            editSummary += 'ثبت نظر موافق';
          } else {
            newText = prefix + ' {{مخالف}} ';
            editSummary += 'ثبت نظر مخالف';
          }
          newText += archiveSectionOptions.textComment.getValue();
          newText += ' ~~' + '~~';
          if (archiveSectionOptions.radioSupport.isSelected() ||
                 archiveSectionOptions.radioOppose.isSelected() ||
                 archiveSectionOptions.radioDelete.isSelected() ||
                 archiveSectionOptions.radioNotDel.isSelected()) {
            newText = current + '\n' + newText;
          } else {
            newText = archiveSectionOptions.setIndentation(current, newText);
          }

          return (new mw.Api()).post({
            format: 'json',
            action: 'edit',
            title: mw.config.get("wgPageName"),
            section: sectionId,
            summary: editSummary,
            text: newText,
            token: mw.user.tokens.get('editToken')
          });
        }
      }).then(function() {
        if (action == 'archive') {
          mw.notify('جمع‌بندی شما ثبت شد!');
        } else {
          mw.notify('نظر شما ثبت شد!');
        }
        location.hash = $('.mw-headline')[sectionId - 1].id;
        location.reload(true);
      }, function(error) {
        mw.notify('ثبت نظر یا جمع‌بندی ناموفق بود: ' + error, {
          type: 'error'
        });
      })
    },
    currentSectionId: -1,
  };
  if (mw.config.get('wgNamespaceNumber') >= 0) {
    $(archiveSectionOptions.install);
  }
})(jQuery, mediaWiki);