User:A2569875-sandbox/GlobalEditnotice.js
注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google Chrome、Firefox、Microsoft Edge及Safari:按住⇧ 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 ? "zh.wikipedia.org" : 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);