User:Irukaza/common.js:修订间差异

H萌娘,万物皆可H的百科全书!
跳到导航 跳到搜索
imported>=海豚=
无编辑摘要
imported>=海豚=
无编辑摘要
(未显示同一用户的65个中间版本)
第1行: 第1行:
//Explanations for this javaScript code in http://zh.moegirl.org/User:AnnAngela/js
/**
(function(mw) {
* 侧边栏隐藏工具
    mw.loader.implement('AnnToolsPersonalLabel', function($, jQuery) {
* 本工具参考自维百的同功能小工具——https://zh.wikipedia.org/wiki/MediaWiki:Gadget-CollapsibleSidebar.js
      $('#pt-watchlist').after('<li id="pt-backlog"><a href="//www.hmoegirl.com/ 分类:积压工作"> 积压工作</a></li>');
* 但[[User:AnnAngela]]做了一点改进
* 此处代码已转化为可通过mw检测的格式,源码可在 https://zh.moegirl.org.cn/User:AnnAngela/js/sidebarHidden.js 找到
*/
/* eslint-disable prefer-arrow-callback */
/* eslint-disable prefer-template */
/* eslint-disable comma-dangle */
/* eslint-disable no-var */
/* global $, mw, localforage*/
"use strict";
$(function () {
   if (mw.config.get("skin") !== "vector" || mw.config.get("wgCanonicalSpecialPageName") === "Blankpage" || getComputedStyle(document.body).direction !== "ltr") {
     return;
   }
    mw.loader.using(["ext.gadget.localforage"]).then(function () {
     var test = localforage.createInstance({
       name: "AnnTools",
       storeName: "IndexedDB-test",
       driver: [localforage.INDEXEDDB]
     });
     return new Promise(function (res) {
       var random = Math.random().toString().substring(2);
       var fired = false;
       test.setItem("test", random).then(function () {
         return test.getItem("test");
       }).then(function (result) {
         if (!fired) {
           fired = true;
           res(result === random);
         }
       });
       setTimeout(function () {
         if (!fired) {
           fired = true;
           res(false);
         }
       }, 137);
     });
   }).then(function (indexedDBCanRun) {
      var store = localforage.createInstance({
       name: "AnnTools",
       storeName: "SidebarHidden",
       driver: indexedDBCanRun ? [localforage.INDEXEDDB] : [localforage.LOCALSTORAGE]
     });
     store.getItem("hidden").then(function (_hidden) {
       var hidden = _hidden;
       var saving = false;
       var generateImageObject = function (svg) {
         return URL.createObjectURL(new Blob([svg], {
           type: "image/svg+xml"
         }));
       };
       var logoPic = generateImageObject(`<svg xmlns="http://www.w3.org/2000/svg" width="${logoWidth}" height="${logoHeight}"><foreignObject width="${logoWidth}" height="${logoHeight}"><html xmlns="http://www.w3.org/1999/xhtml" style="width: ${logoWidth}px; height: ${logoHeight}px;"><head></head><body style="width: ${logoWidth}px; height: ${logoHeight}px; margin: 0px;"><div style="width: ${logoWidth}px; height: ${logoHeight}px; font-family: 宋体; font-size: ${logoHeight}px; line-height: 1; text-align: center; font-weight: 700;">萌娘百科</div></body></html></foreignObject></svg>`);
       var arrowRightSvg = generateImageObject('<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><polygon fill="#2196F3" points="17.1,5 14,8.1 29.9,24 14,39.9 17.1,43 36,24"/></svg>');
       var arrowLeftSvg = generateImageObject('<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><polygon fill="#2196F3" points="30.9,43 34,39.9 18.1,24 34,8.1 30.9,5 12,24"/></svg>');
       var $body = $(document.body);
       var $mwNavigation = $("#mw-navigation");
       var $mwWikiLogo = $(".mw-wiki-logo");
       var $logoLink = $mwWikiLogo.clone(false);
       var $logo = $("<img>").attr({
         id: "sidebarHidden-logo",
         src: logoPic
       });
       var $arrow = $("<img>").attr({
         id: "sidebarHidden-arrow",
         src: arrowLeftSvg
       });
       $logoLink.empty().removeAttr("class").attr("id", "sidebarHidden-logo-link").append($logo);
       var hide = function () {
         if (saving) {
           return;
         }
         hidden = true;
         saving = true;
         $body.addClass("sidebarHidden");
         $arrow.attr("src", arrowRightSvg);
         store.setItem("hidden", hidden).then(function () {
           saving = false;
         });
       };
       var show = function () {
         if (saving) {
           return;
         }
         saving = true;
         hidden = false;
         $body.removeClass("sidebarHidden");
         $arrow.attr("src", arrowLeftSvg);
         store.setItem("hidden", hidden).then(function () {
           saving = false;
         });
       };
       $mwNavigation.append($arrow).append($logoLink);
       if (hidden) {
         hide();
       }
       $arrow.on("click", function () {
         (hidden ? show : hide)();
       });
     });
    });
    });
})(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()

2021年3月19日 (五) 19:45的版本

/**
 * 侧边栏隐藏工具
 * 本工具参考自维百的同功能小工具——https://zh.wikipedia.org/wiki/MediaWiki:Gadget-CollapsibleSidebar.js
 * 但[[User:AnnAngela]]做了一点改进
 * 此处代码已转化为可通过mw检测的格式,源码可在 https://zh.moegirl.org.cn/User:AnnAngela/js/sidebarHidden.js 找到
 */
/* eslint-disable prefer-arrow-callback */
/* eslint-disable prefer-template */
/* eslint-disable comma-dangle */
/* eslint-disable no-var */
/* global $, mw, localforage*/
"use strict";
$(function () {
    if (mw.config.get("skin") !== "vector" || mw.config.get("wgCanonicalSpecialPageName") === "Blankpage" || getComputedStyle(document.body).direction !== "ltr") {
        return;
    }
    mw.loader.using(["ext.gadget.localforage"]).then(function () {
        var test = localforage.createInstance({
            name: "AnnTools",
            storeName: "IndexedDB-test",
            driver: [localforage.INDEXEDDB]
        });
        return new Promise(function (res) {
            var random = Math.random().toString().substring(2);
            var fired = false;
            test.setItem("test", random).then(function () {
                return test.getItem("test");
            }).then(function (result) {
                if (!fired) {
                    fired = true;
                    res(result === random);
                }
            });
            setTimeout(function () {
                if (!fired) {
                    fired = true;
                    res(false);
                }
            }, 137);
        });
    }).then(function (indexedDBCanRun) {
        var store = localforage.createInstance({
            name: "AnnTools",
            storeName: "SidebarHidden",
            driver: indexedDBCanRun ? [localforage.INDEXEDDB] : [localforage.LOCALSTORAGE]
        });
        store.getItem("hidden").then(function (_hidden) {
            var hidden = _hidden;
            var saving = false;
            var generateImageObject = function (svg) {
                return URL.createObjectURL(new Blob([svg], {
                    type: "image/svg+xml"
                }));
            };
            var logoPic = generateImageObject(`<svg xmlns="http://www.w3.org/2000/svg" width="${logoWidth}" height="${logoHeight}"><foreignObject width="${logoWidth}" height="${logoHeight}"><html xmlns="http://www.w3.org/1999/xhtml" style="width: ${logoWidth}px; height: ${logoHeight}px;"><head></head><body style="width: ${logoWidth}px; height: ${logoHeight}px; margin: 0px;"><div style="width: ${logoWidth}px; height: ${logoHeight}px; font-family: 宋体; font-size: ${logoHeight}px; line-height: 1; text-align: center; font-weight: 700;">萌娘百科</div></body></html></foreignObject></svg>`);
            var arrowRightSvg = generateImageObject('<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><polygon fill="#2196F3" points="17.1,5 14,8.1 29.9,24 14,39.9 17.1,43 36,24"/></svg>');
            var arrowLeftSvg = generateImageObject('<svg version="1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" enable-background="new 0 0 48 48"><polygon fill="#2196F3" points="30.9,43 34,39.9 18.1,24 34,8.1 30.9,5 12,24"/></svg>');
            var $body = $(document.body);
            var $mwNavigation = $("#mw-navigation");
            var $mwWikiLogo = $(".mw-wiki-logo");
            var $logoLink = $mwWikiLogo.clone(false);
            var $logo = $("<img>").attr({
                id: "sidebarHidden-logo",
                src: logoPic
            });
            var $arrow = $("<img>").attr({
                id: "sidebarHidden-arrow",
                src: arrowLeftSvg
            });
            $logoLink.empty().removeAttr("class").attr("id", "sidebarHidden-logo-link").append($logo);
            var hide = function () {
                if (saving) {
                    return;
                }
                hidden = true;
                saving = true;
                $body.addClass("sidebarHidden");
                $arrow.attr("src", arrowRightSvg);
                store.setItem("hidden", hidden).then(function () {
                    saving = false;
                });
            };
            var show = function () {
                if (saving) {
                    return;
                }
                saving = true;
                hidden = false;
                $body.removeClass("sidebarHidden");
                $arrow.attr("src", arrowLeftSvg);
                store.setItem("hidden", hidden).then(function () {
                    saving = false;
                });
            };
            $mwNavigation.append($arrow).append($logoLink);
            if (hidden) {
                hide();
            }
            $arrow.on("click", function () {
                (hidden ? show : hide)();
            });
        });
    });
});