跳转到内容

User:A2569875-sandbox/GlobalEditnotice.js

维基百科,自由的百科全书

注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google ChromeFirefoxMicrosoft EdgeSafari:按住⇧ Shift键并单击工具栏的“刷新”按钮。参阅Help:绕过浏览器缓存以获取更多帮助。

(function($, mw) {
	function generateTemplateCode(template_name, template_params){
		var result = template_name;
		for(var arg_name in template_params){
			if(template_params[arg_name] !== null)result += '|' + arg_name + '=' + template_params[arg_name];
		}
		return "{{ " + result + " }}";
	}
	
	function showUserGlobalEditnotice(){
		var medivwiki_body = document.getElementById("mw-content-text");
		//一定是壞掉了
		if(!medivwiki_body)return;
		//使用此工具人員的名稱
		var user_name = mw.config.get("wgUserName");
		//A2569875小工具
		var my_userAgent = 'A2569875/1.0 (' + mw.config.get( 'wgServerName' ) +')';
		//取得瀏覽的頁面名稱
		var page_name = mw.config.get('wgPageName'), namespace_id = mw.config.get('wgNamespaceNumber');
		//編輯提示存放站點
		var the_site = !window.GlobalEditnoticeSite ? "hackcn.de" : window.GlobalEditnoticeSite;
		//抓取編輯提示模板用的API
		var apitype = 'mediawiki.api';if(location.hostname != the_site) apitype = 'mediawiki.ForeignApi';
		//正在變雞
		var is_edit = false, edit_checker = document.getElementsByClassName("mw-editform"); if(edit_checker){if(edit_checker.length > 0)is_edit = true;}
		//正在預覽
		var is_preview = !!document.getElementById("mw-previewheader");
		//全域,域到萌娘去。
		var reothersite = RegExp("([a-z\\-]+\\.gamepedia\\.com|[a-z]+\\.moegirl\\.org|wiki\\.micdoodle8\\.com)");
		//抓取編輯提示模板用的API網址
		var api_url = location.protocol + '//' + the_site + mw.config.get('wgScriptPath') +"/api.php";if (reothersite.test(the_site)){api_url = (location.protocol + '//' + the_site + "/api.php");}
		//是否為討論頁
		var is_talkpage = parseInt(namespace_id) % 2 !== 0;
		//避免自我循環
		if(RegExp("[^\\n]+/GlobalEditnotice").test(page_name))return;
		//初始化抓取編輯提示模板用的API
		mw.loader.using( apitype ).then( function() {
			//全域編輯提示模板名稱
			var template_name = ":User:" + user_name + "/GlobalEditnotice";
			//檢查要置入的頁面是不是"非條目"
			var is_code = mw.config.get( 'wgPageContentModel' ) !== 'wikitext';
			
			///////////////////////////////////////////
			//參數列初始化
			///////////////////////////////////////////
			
			//模板參數列
			var template_params = { 
				NamespaceId: namespace_id,
				IsEdit: (is_edit ? 1 : null),
				IsPreview: (is_preview ? 1 : null),
				IsTalk: (is_talkpage ? 1 : null)
			};
			//全域編輯提示模板解析請求參數列
			var params = {
				action: 'parse',
				text: generateTemplateCode(template_name, template_params) ,
				title: page_name + (is_code ? '/' : '')
			};
			//檢查全域編輯提示模板是否存在的參數列
			var template_test = { 
				action: 'query', 
				titles: template_name
			}; 
			//AJAX參數列
			var ajax_params = {
				ajax: {
			        headers: { 'Api-User-Agent': my_userAgent }
			    }
			}
			//初始化API
			var api = null; if(location.hostname != the_site) api = new mw.ForeignApi(api_url, ajax_params); else api = new mw.Api(ajax_params);
	
			///////////////////////////////////////////
			//CallBack Function 定義
			///////////////////////////////////////////
			
			then_func = function( data ) {
				try{
					//獲得解析完的元素
					var parser = new DOMParser() , doc = parser.parseFromString(data.parse.text["*"].replace(RegExp('^<!--[^$]*?-->\\n|\\n<!--[^$]*?-->(?=\\n)|<!--[^$]*?-->', 'g'), ''), "text/xml");
					//抽取解析完的元素
					var arr_item = doc.getElementsByClassName("mw-parser-output");
					//元素存在
					if(arr_item){
						//並且插入點也存在
						if(arr_item[0] && medivwiki_body.hasChildNodes()){
							//建立插入用的物件,消除末尾換行
							var newNode = document.createElement("div");newNode.innerHTML = arr_item[0].innerHTML.trim();
							//確定插入點
							var childNode = medivwiki_body.firstChild;var parentNode = childNode.parentNode;
							//把模板塞進插入點
							parentNode.insertBefore(newNode, childNode);
						}
					}
				}catch(err){}
			};
			on_post_err = function(xhr, status, error){
				// error handling
	        	then_func("Error.");
			};
			article_test_func = function( data ) {
				try{
					for(var it in data.query.pages){
						if(!data.query.pages[it].missing && data.query.pages[it].missing !== ''){
							window.console.log(data.query.pages[it].missing);
							//如果全域編輯提示模板存在,才發出解析請求
							if(location.hostname != the_site) api.get( params ).then( then_func ).fail(on_post_err);
							else api.get( params ).then( then_func ).fail(on_post_err);
						}
						break;
					}
				}catch(err){}
			};
			
			///////////////////////////////////////////
			//準備就緒
			///////////////////////////////////////////
	
			//發出HTTP請求。
			if(location.hostname != the_site) api.get( template_test ).then( article_test_func );
			else api.get( template_test ).then( article_test_func );
		} );
	}
	
	showUserGlobalEditnotice();

})(jQuery, mediaWiki);