MediaWiki:Gadget-ProofreadHelper.js

維基文庫,自由的圖書館

注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的变更的影响。

  • Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5Ctrl-R(Mac为⌘-R
  • Google Chrome:Ctrl-Shift-R(Mac为⌘-Shift-R
  • Internet Explorer或Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5
  • Opera:Ctrl-F5
//<nowiki>
// 这个工具是由Midleading制作的,并参考了一下HotCat.js。该工具使用GPLv3授权。
( function($, mw){
	// Don't use mw.config.get() as that takes a copy of the config, and so doesn't
	// account for values changing, e.g. wgCurRevisionId after a VE edit
	var conf = mw.config.values;

	if(conf.wgNamespaceNumber != 104) //非Page页面
		return;
	if(conf.wgAction != "view") //仅编辑页面可用此工具
		return;
	if(!conf.wgIsArticle) //特殊页面无需此工具
		return;
	if(!conf.wgIsProbablyEditable) //已保护页面不可编辑
		return;
	if(conf.prpPageQuality===undefined || conf.prpPageQualityUser===undefined) //非Page页面
		return;
	if(conf.prpPageQualityUser===conf.wgUserName && conf.prpPageQuality===3 || !(conf.prpPageQuality===1 || conf.prpPageQuality===2))
		return;
	
	function run() {
		
		var url = conf.wgServer + conf.wgScriptPath + "/api.php?format=json&formatversion=2&callback=proofreadHelper.start&action=query&titles=" + encodeURIComponent(conf.wgPageName) + "&prop=info%7Crevisions&rvprop=content%7Ctimestamp%7Cids&rvslots=main&rvlimit=1&rvstartid="+conf.wgCurRevisionId;
		var s=document.createElement("script");
		s.src=url;
		s.type="text/javascript";
		
		window.proofreadHelper = {
			msg: {
				"s_checked":"改为已校对",
				"s_verified":"改为已核对",
				"s_checked_s":"用[[Wikisource:校对助手|校对助手]]将页面的[[Wikisource:正文品质|校对状态]]改为已校对",
				"s_verified_s":"用[[Wikisource:校对助手|校对助手]]将页面的[[Wikisource:正文品质|校对状态]]改为已核对",
				"s_e":"发生了错误,因此没有保存您的编辑",
				"t_checked":"改爲已校對",
				"t_verified":"改爲已認證",
				"t_checked_s":"用[[Wikisource:校对助手|校對助手]]將頁面的[[Wikisource:正文品质|校對狀態]]改爲已校對",
				"t_verified_s":"用[[Wikisource:校对助手|校對助手]]將頁面的[[Wikisource:正文品质|校對狀態]]改爲已認證",
				"t_e":"發生了錯誤,因此没有保存您的編輯"
			},
			t: function(m){
			    if(conf.wgUserLanguage=="zh-hant"||conf.wgUserLanguage=="zh-tw"||conf.wgUserLanguage=="zh-hk"){
			    	return window.proofreadHelper.msg["t_"+m];
			    }else{
			    	return window.proofreadHelper.msg["s_"+m];
			    }
			},
			go: function(){
				var request = null;
				try {
					request = new window.XMLHttpRequest();
				}catch(anything){
					if(window.ActiveXObject){
						try{
							request=new window.ActiveXObject('Microsoft.XMLHTTP');
						}catch(any){}
					}
				}
				if(!request){
					proofreadHelper.error();
					return;
				}
				request.open("POST", conf.wgServer + conf.wgScriptPath + "/api.php", true);
				request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				request.onreadystatechange=function(){
					if(request.readyState!==4) return;
					if(request.status!==200 || !request.responseText){
						proofreadHelper.error();
						return;
					}
					window.location.reload();
				};
				var args="format=json&action=edit&pageid=" + conf.wgArticleId + "&minor=1&bot=1&summary=" + encodeURIComponent(proofreadHelper.summary) + "&text=" + encodeURIComponent(proofreadHelper.wikitext) + "&token=" + encodeURIComponent(mw.user.tokens.values.csrfToken);
				request.send(args);
			},
			
			error: function() {
				alert(window.proofreadHelper.t("e"));
				window.location.reload();
			},
			
			start: function(json){
				var page1 = json.query.pages[0];
				var page = page1.revisions[0];
				if(page.slots.main.contentmodel!="proofread-page") //不是页面页面
					return;
				proofreadHelper.wikitext = page.slots.main.content;
				var pagequalitymatch = /<noinclude><pagequality level="(\d)" user="(.+?)" ?\/>/;
				var pagequality = pagequalitymatch.exec(proofreadHelper.wikitext);
				if(pagequality===null)
					return;
				var atext;
				var newquality;
				switch(pagequality[1])
				{
					case "1": //未校对
					case "2": //有问题
					atext=window.proofreadHelper.t("checked");
					newquality = "3";
					proofreadHelper.summary=window.proofreadHelper.t("checked_s");
					break;
					case "3": //已校对
					if(pagequality[2]!=conf.wgUserName){
						atext=window.proofreadHelper.t("verified");
					    proofreadHelper.summary=window.proofreadHelper.t("verified_s");
						newquality = "4";
					}else{ //自己不能将页面改为已核对
						return;
					}
					break;
					default: //已核对、没有文字
					return;
				}
				proofreadHelper.wikitext = proofreadHelper.wikitext.replace(pagequalitymatch, "<noinclude><pagequality level=\"" + newquality + "\" user=\"" + mw.util.wikiUrlencode(conf.wgUserName) + "\" />");
				if(page.timestamp)
					proofreadHelper.pageTime = page.timestamp.replace(/\D/g,'');
				var submitbtn = document.createElement("input");
				submitbtn.type="button";
				submitbtn.value=atext;
				submitbtn.onclick=proofreadHelper.go;
				submitbtn.style.float="right";
				document.getElementById("mw-content-text").firstChild.firstChild.firstChild.appendChild(submitbtn);
		    },
			wikitext:"",
			summary:"",
			pageTime: ""
		};
		
		document.head.appendChild(s); //启动
	}
	
	var start = function() {
	    $(run);
	};
	
	mw.loader.using('user', start, start);
} (jQuery, mediaWiki) );
//</nowiki>