User:Irukaza/common.js

H萌娘,万物皆可H的百科全书!
< User:Irukaza
imported>=海豚=2020年6月23日 (二) 09:18的版本
跳到导航 跳到搜索

注意:这类代码页面在保存之后,您可能需要清除浏览器缓存才能看到所作出的变更的影响。

  • 按住CTRL+SHIFT+DEL 或 ⌘-Shift-R来清除缓存!
  • 或尝试在地址栏的地址最后添加代码?_=1来访问最新页面。
    添加代码后的本页地址如下:-{R|https://hmoegirl.com/User:Irukaza/common.js?_=1}-
  • 你还可以在设置中勾选小工具在页面右上角添加清除缓存按钮!
//Explanations for this javaScript code in http://zh.moegirl.org/User:AnnAngela/js
(function(mw) {
    mw.loader.implement('AnnToolsPersonalLabel', function($, jQuery) {
        $('#pt-watchlist').after('<li id="pt-backlog"><a href="//www.hmoegirl.com/分类:积压工作">积压工作</a></li>');
    });
})(mediaWiki);
mw.loader.load('https://www.hmoegirl.com/index.php?title=User:=海豚=/js/userStatus.js&action=raw&ctype=text/javascript');

/** 连线错误时的讯息*/
function getAjaxErrorText(jqXHR, exception){
if (jqXHR.status === 0) {
return '网路未连线';
} else if (jqXHR.status === 404) {
return '找不到页面 [404]';
} else if (jqXHR.status === 500) {
return '伺服器内部错误 [500]';
} else if (exception === 'parsererror') {
return '解析失败';
} else if (exception === 'timeout') {
return '已逾时';
} else if (exception === 'abort') {
return '程序被中止';
} else {
return '' + jqXHR.responseText;
}
}

/** 读取所有最近变更的 js code */
function showRecentChanges(){
if($("#p-recentchanges").length == 0){
return;
}
var NAMESPACES = { // 所有 namespace (命名空间)清单
"":"0", // 主命名空间
"讨论":"1",
"使用者":"2",
"使用者讨论":"3",
"Komica wiki":"4",
"Komica wiki讨论":"5",
"档案":"6",
"档案讨论":"7",
"MediaWiki":"8",
"MediaWiki讨论":"9",
"模板":"10",
"模板讨论":"11",
"使用说明":"12",
"使用说明讨论":"13",
"分类":"14",
"分类讨论":"15",
"Gadget":"2300",
"Gadget talk":"2301",
"Gadget definition":"2302",
"Gadget definition talk":"2303"
};
var NAMESPACES_ID = {}; // 所有 namespace (命名空间)清单,用以从 namespace id 取得 namespace
for(var i in NAMESPACES){
NAMESPACES_ID[NAMESPACES[i]] = i;
}

var storage = localStorage || {};

var frequency = 20; // 更新频率,以秒为单位
// 设为 20 表示每 20 秒更新一次 sidebar 清单
// 由于会用在数学除法上,所以请不要设置为 0 或数字以外的值

var numOfPageLoad = 20 ; // 要读取多少最新变更
var wikiURL = location.origin; // Wiki 的 URL
var apiURL = location.origin + "/api.php"; // Wiki 的 api 的 url
// 详见 特殊:版本#入口 URL

var namespaceUsed = [ // 所有使用的 namespace (命名空间)
NAMESPACES[""],
NAMESPACES["讨论"],
NAMESPACES["使用者讨论"],
NAMESPACES["档案讨论"],
NAMESPACES["模板"],
NAMESPACES["模板讨论"],
NAMESPACES["Komica wiki"],
NAMESPACES["Komica wiki讨论"],
NAMESPACES["分类讨论"],
NAMESPACES["MediaWiki讨论"],
];


function loadCallback(data){

var list = $("<ul>")
$($("#p-recentchanges").find(".body, .pBody")[0])
.after(
$("<div class='body'>").append(list)
)
.after(
$("<h3></h3>")
.css({"font-style": "italic"})
.html("最新 " + numOfPageLoad + " 笔变动")
);

for(var i in data){
var rc = data[i];

var linkList = $("<li>"); // 清单 list
if(rc.ns % 2 == 1){
// namespace 为奇数,讨论页面

var orignalPageNameSpace = NAMESPACES_ID[rc.ns - 1];
var talkPageNameSpace = NAMESPACES_ID[rc.ns];
var pageTitle = (rc.ns == 1? "": orignalPageNameSpace + ":") + rc.title.replace(talkPageNameSpace + ":", ""); // 条目页,前面的动作是处理条目标题的namespace
// 如果条目是普通条目,则仅显示条目名,例如「(范例用)新条目(留言)」
// 如果条目是其他条目,则显示内容条目的 namespace + 条目名,例如「Komica wiki:Sandbox(留言)」
// 所有href属性都必须将页面名称中的半形问号「?」取代成「%3F」,否则无法正常连结
// 取代必须使用regex方法(/\?/g),不可用字串("?")比对,否则会只取代到第一项
linkList.append(
$("<a>")
.attr("href", wikiURL + "/" + pageTitle.replace(/\?/g,"%3F"))
.html(pageTitle)
)
.append("(")
.append(
$("<a>")
.attr("href", wikiURL + "/" + rc.title.replace(/\?/g,"%3F"))
.html("留言")
)
.append(")");


}else if(rc.title.indexOf("/投票") > 0){
// 投票页
var pageTitle = rc.title.replace("/投票", ""); // 条目页

linkList.append(
$("<a>")
.attr("href", wikiURL + "/" + pageTitle.replace(/\?/g,"%3F"))
.html(pageTitle)
)
.append("(")
.append(
$("<a>")
.attr("href", wikiURL + "/" + rc.title.replace(/\?/g,"%3F"))
.html("投票")
)
.append(")");


}else{
linkList.append(
$("<a>")
.attr("href", wikiURL + "/" + rc.title.replace(/\?/g,"%3F"))
.html(rc.title)
);

}


list.append(linkList);
}
}

var lastUpdateTime = parseInt(new Date().getTime() / 1000 / frequency) * 1000 * frequency

if(storage.lastUpdateTime && storage.lastUpdateTime >= lastUpdateTime){
loadCallback(JSON.parse(storage.recentchanges));
return;
}

$.ajax({
url: apiURL,
data: {
action: "query",
list: "recentchanges",
format: "json",
rcshow: "!redirect",
rcnamespace: namespaceUsed.join("|"),
rclimit: numOfPageLoad,
rctoponly: true // 只列出最新编辑

},
dataType: "json",
success: function(data){
storage.lastUpdateTime = lastUpdateTime;
storage.recentchanges = JSON.stringify(data.query.recentchanges);
loadCallback(data.query.recentchanges);

},
error: function(jqXHR, exception) {
var msg = getAjaxErrorText(jqXHR, exception);
$($("#p-recentchanges").find(".body, .pBody")[0]).append(
$('<span style="color:red">').append("变更纪录读取失败:"+msg)
);
},
});
}
showRecentChanges()