“魔物娘:海兔”与“User:Irukaza/common.js”:页面之间的差异
(页面间差异)
跳到导航
跳到搜索
imported>=海豚= |
imported>=海豚= 无编辑摘要 |
||
第1行: | 第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() | |||
= | |||
2020年6月23日 (二) 09:16的版本
//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()