User:Syunsyunminmin/wikinews/easy-dialog.js

From Wikimedia Incubator

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
//<nowiki>
if (typeof Syunmin === 'undefined') {
	var Syunmin = {};
}
Syunmin.api = new mw.Api();
Syunmin.IBWN = {};
Syunmin.IBWN.suffix = ' (using [[User:Syunsyunminmin/wikinews/easy-dialog|easy dialog]])';
Syunmin.IBWN.language = {
	"Wn/bn" :{
		"text": "প্রতিস্থাপন",
    	"developRegExp": "Wn/bn/(উন্নয়ন চলছে|develop)",
    	"develop": "Wn/bn/উন্নয়ন চলছে",
			"reviewRegExp": "Wn/bn/(নিরীক্ষা|অনিরীক্ষিত প্রকাশ|প্রকাশ করুন)",
    	"review": "Wn/bn/নিরীক্ষা",
    	"publish": "Wn/bn/প্রকাশ করুন",
    	"peer-review": "Wn/bn/প্রকাশন নিরীক্ষা",
    	"peer-review-params": {
    		"disabled": {
		        "সংখ্যা": {
        			"label": "সংখ্যা",
        			"value": mw.config.get("wgRevisionId")
        		},
        		"তারিখ": {
	        		"label": "তারিখ",
        			"value": "~~~~~"
        		},
        		"নিরীক্ষক": {
	        		"label": "নিরীক্ষক",
        			"value": mw.config.get("wgUserName")
        		},
    		},
    		"select": {
		        "ফলাফল": {
        			"label": "ফলাফল",
        			"options": ["সফল", "বিফল"]
        		}
    		},
				"selectOption": {
					"সফল": "pass",
					"বিফল": "fail"
				},
    		"comments": {
					"name": "বার্তা",
        	"label": "বার্তা"
    		}
    	},
		"summary-submit": "Mark as under review",
		"summary-sendback": "Not ready when reviewed",
  	"summary-publish": "Publish.",
  	"summary-talk": "Review of revision " + mw.config.get("wgRevisionId"),
		"talk-header": "[সংস্করণ সংখ্যা: " + mw.config.get("wgRevisionId") + "] এর নিরীক্ষণ - ফলাফল: $result"
  	}
};

Syunmin.IBWN.langSuppot = {};
if (Syunmin.IBWN.language[mw.config.get("wgWmincTestwikiPrefix")] !== undefined) {
  for (var lang in Syunmin.IBWN.language[mw.config.get("wgWmincTestwikiPrefix")]) {
    Syunmin.IBWN.langSuppot[lang] = Syunmin.IBWN.language[mw.config.get("wgWmincTestwikiPrefix")][lang];
  }
}

Syunmin.IBWN.makeSubmitButton = function() {
  var elements = document.getElementsByClassName("wikidialog-dependent");
  var altelements = document.getElementsByClassName("wikidialog-alternative");
  for (var i = 0; i < elements.length; i++) {
    elements[i].innerHTML = "<input type='button' onclick='Syunmin.IBWN.submitForReview(" + i + ")' value='" + Syunmin.IBWN.langSuppot.text + "'>";
    elements[i].removeAttribute("style");
    altelements[i].setAttribute("style", "display:none");
  }
};
Syunmin.IBWN.submitForReview = function(num) {
  Syunmin.api.get({
    "action": "query",
    "format": "json",
    "prop": "revisions",
    "titles": mw.config.get('wgPageName'),
    "formatversion": "2",
    "rvprop": "content",
    "rvslots": "*"
  }).done(function(data) {
    var content = data.query.pages[0].revisions[0].slots.main.content;
    var regExp = new RegExp("^\\{\\{\\s*" + Syunmin.IBWN.langSuppot.develop.replace("/", "\/") + "\\s*\\}\\}$", "gim");
    newcontent = content.replace(regExp, "{{" + Syunmin.IBWN.langSuppot.review + "}}");
    if (content == newcontent) {
      if (window.confirm("No template found to replace.\r\nPlease let Syunsyunminmin know as it may use an unknown redirect template.\r\n\r\nWould you like to continue to Syunsyunminmin's talk page?")) {
    		window.open("https://incubator.wikimedia.org/wiki/User_talk:Syunsyunminmin");
    	}
      return;
    }
    Syunmin.api.postWithToken('csrf', {
      "action": "edit",
      "format": "json",
      "title": mw.config.get('wgPageName'),
      "formatversion": "2",
      "nocreate": 1,
      "text": newcontent,
      "summary": Syunmin.IBWN.langSuppot['summary-submit'] + Syunmin.IBWN.suffix
    }).done(function(data) {
      if (data.error !== undefined) {
        alert("Edit failed!\r\n\r\n\r\n" + data.error.info);
      } else {
        alert("Edit success");
        document.location.reload();
      }
    });
  });
};

Syunmin.IBWN.addReviewLink = function() {
  mw.util.addPortletLink("p-cactions", "javascript:Syunmin.IBWN.makeReviewForm();void%200;", 'Review', "ca-review", 'start reviewing');
  var formHTML = document.createElement('div');
  formHTML.setAttribute('id', 'reviewForm');
  formHTML.setAttribute('style', 'display: none');

  var steady, steadyLabel, steadyInput;
  for (var d in Syunmin.IBWN.langSuppot["peer-review-params"].disabled) {
    steady = document.createElement('div');
    steadyLabel = document.createElement('label');
    steadyLabel.setAttribute('for', "review-" + d);
    steadyLabel.setAttribute('style', "padding-right: 5%");
    steadyLabel.textContent = Syunmin.IBWN.langSuppot["peer-review-params"].disabled[d].label;
    steady.appendChild(steadyLabel);
    steadyInput = document.createElement('input');
    steadyInput.setAttribute('id', "review-" + d);
    steadyInput.setAttribute('name', d);
    steadyInput.setAttribute('class', "reviewValue");
    steadyInput.setAttribute('value', Syunmin.IBWN.langSuppot["peer-review-params"].disabled[d].value);
    steadyInput.setAttribute('disabled', true);
    steady.appendChild(steadyInput);
    formHTML.appendChild(steady);
  }

  var select,selectLabel,selectSelect, selectOption;
  for (var i in Syunmin.IBWN.langSuppot["peer-review-params"].select) {
    select = document.createElement('div');
    selectLabel = document.createElement('label');
    selectLabel.setAttribute('for', "review-" + i);
    selectLabel.setAttribute('style', "padding-right: 5%");
    selectLabel.textContent = Syunmin.IBWN.langSuppot["peer-review-params"].select[i].label;
    select.appendChild(selectLabel);
    selectSelect = document.createElement('select');
    selectSelect.setAttribute('id', "review-" + i);
    selectSelect.setAttribute('name', i);
    selectSelect.setAttribute('class', "reviewValue reviewSelect");
    for (var u in Syunmin.IBWN.langSuppot["peer-review-params"].selectOption) {
      selectOption = document.createElement('option');
      selectOption.setAttribute('value', u);
      selectOption.textContent = u;
      selectSelect.appendChild(selectOption);
    }
    select.appendChild(selectSelect);
    formHTML.appendChild(select);
  }

  formHTML.appendChild(document.createElement('hr'));

  var comments = document.createElement('div');
  var commentsLabel = document.createElement('label');
  commentsLabel.setAttribute('for', 'review-comments');
  commentsLabel.textContent = Syunmin.IBWN.langSuppot["peer-review-params"].comments.label;
  comments.appendChild(commentsLabel);
  var commentsArea = document.createElement('textarea');
  commentsArea.setAttribute('id', 'review-comments');
  commentsArea.setAttribute('name', Syunmin.IBWN.langSuppot["peer-review-params"].comments.name);
  commentsArea.setAttribute('rows', '5');
  commentsArea.setAttribute('class', "reviewValue");
  comments.appendChild(commentsArea);
  formHTML.appendChild(comments);
  document.body.appendChild(formHTML);
};

Syunmin.IBWN.makeReviewForm = function() {
  $('#reviewForm').dialog({
    title:"Easy Review",
    width:500,
    buttons: {
      "Review": function() {
        Syunmin.IBWN.publishArticle();
      },
      "Close": function() {
        $( this ).dialog( "close" );
      }
    }
  });
};

Syunmin.IBWN.publishArticle = function() {
  var temp = '{{' + Syunmin.IBWN.langSuppot['peer-review'];
  for (var i = 0; i < document.getElementsByClassName('reviewValue').length; i++) {
    document.getElementsByClassName('reviewValue')[i].disabled = true;
    temp += ('\n|' + document.getElementsByClassName('reviewValue')[i].name + '=' + document.getElementsByClassName('reviewValue')[i].value);
  }
  temp += '}}';
	var isPass = true;
	for (var p = 0; p < document.getElementsByClassName('reviewSelect').length; p++) {
		if (Syunmin.IBWN.langSuppot["peer-review-params"].selectOption[document.getElementsByClassName('reviewSelect')[p].value] == "fail") {
			isPass = false;
		}
  }
	var result;
	for (var r in Syunmin.IBWN.langSuppot["peer-review-params"].selectOption) {
		if (
			(isPass && (Syunmin.IBWN.langSuppot["peer-review-params"].selectOption[r] == "pass")) ||
			(!isPass && (Syunmin.IBWN.langSuppot["peer-review-params"].selectOption[r] == "fail"))) {
				result = r;
		}
	}
	var talkHeader = Syunmin.IBWN.langSuppot["talk-header"].replace("$result", result);
  Syunmin.api.get({
    "action": "query",
    "format": "json",
    "prop": "revisions",
    "titles": mw.config.get('wgPageName'),
    "formatversion": "2",
    "rvprop": "content",
    "rvslots": "*"
  }).done(function(data) {
    var content = data.query.pages[0].revisions[0].slots.main.content;
    var regExp = new RegExp("^\\{\\{\\s*" + Syunmin.IBWN.langSuppot.reviewRegExp.replace("/", "\/") + "\\s*\\}\\}$(\n|\r\n|\r|)", "gim");
		if (isPass) {
			newcontent = content.replace(regExp, "");
			newcontent += ("\n"  + "{{" + Syunmin.IBWN.langSuppot.publish + "}}");
		} else {
			newcontent = content.replace(regExp, "");
			newcontent = ("{{" + Syunmin.IBWN.langSuppot.develop + "}}\n" + newcontent);
		}
    if (content == newcontent) {
      if (window.confirm("No template found to replace.\r\nPlease let Syunsyunminmin know as it may use an unknown redirect template.\r\n\r\nWould you like to continue to Syunsyunminmin's talk page?")) {
    		window.open("https://incubator.wikimedia.org/wiki/User_talk:Syunsyunminmin");
    	}
      return;
    }
    Syunmin.IBWN.addInfo("Tag an article...", "blue");
    Syunmin.api.postWithToken('csrf', {
      "action": "edit",
      "format": "json",
      "title": mw.config.get('wgPageName'),
      "formatversion": "2",
      "nocreate": 1,
      "text": newcontent,
      "summary": ((isPass) ? Syunmin.IBWN.langSuppot['summary-publish'] : Syunmin.IBWN.langSuppot['summary-sendback']) + Syunmin.IBWN.suffix
    }).done(function(data) {
      if (data.error !== undefined) {
        Syunmin.IBWN.addInfo("Failed to tag!: " + data.error.info, "red");
      } else {
        Syunmin.IBWN.addInfo("Tagging success.", "green");
        Syunmin.IBWN.addInfo("Adding a template to the talk page...", "blue");
        Syunmin.api.postWithToken('csrf', {
          "action": "edit",
          "format": "json",
          "title": mw.config.get('wgFormattedNamespaces')[1] + ":" + mw.config.get('wgTitle'),
          "formatversion": "2",
          "appendtext": "== " + talkHeader + " ==\n" + temp,
          "summary": Syunmin.IBWN.langSuppot['summary-talk'] + Syunmin.IBWN.suffix
        }).done(function(data) {
          if (data.error !== undefined) {
            Syunmin.IBWN.addInfo("Failed to add!: " + data.error.info, "red");
          } else {
            Syunmin.IBWN.addInfo("Add success.", "green");
            Syunmin.IBWN.addInfo("Review done!", "green");
          }
        });
      }
    });
  });
};

Syunmin.IBWN.addInfo = function(infotext, color) {
  var newinfo = document.createElement('div');
  newinfo.setAttribute('style', 'color:' + color);
  newinfo.textContent = infotext;
  if(document.getElementById("review-process-info") !== null) {
    document.getElementById("review-process-info").appendChild(newinfo);
  } else {
    var infoarea = document.createElement('div');
    infoarea.setAttribute('id', 'review-process-info');
    infoarea.appendChild(newinfo);
    document.getElementById("reviewForm").appendChild(document.createElement('hr'));
    document.getElementById("reviewForm").appendChild(infoarea);
  }
};

mw.loader.using(["mediawiki.api", "mediawiki.util", "jquery.ui"]).then(function() {
  if (mw.config.get("wgWmincTestwikiProject") == "n" && mw.config.get("wgNamespaceNumber") == 0) {
    if (!(mw.config.get("wgWmincTestwikiPrefix") in Syunmin.IBWN.language)) {
      console.warn('Easy dialog: The language support for this test wiki is broken. Please contact User:Syunsyunminmin to request additional language support.\nhttps://incubator.wikimedia.org/wiki/User_talk:Syunsyunminmin');
    }
    if (document.getElementById("develop") !== null) {
      Syunmin.IBWN.makeSubmitButton();
    }
    if (document.getElementById("review") !== null) {
      Syunmin.IBWN.addReviewLink();
    }
  }
});
//</nowiki>