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

H萌娘,万物皆可H的百科全书!
跳到导航 跳到搜索
imported>=海豚=
无编辑摘要
imported>=海豚=
无编辑摘要
(未显示同一用户的1个中间版本)
第1行: 第1行:
/**
* 侧边栏隐藏工具
* 本工具参考自维百的同功能小工具——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";
"use strict";
$(() => (async () => {
$(function () {
    await mw.loader.using(["mw.Api", "mediawiki.Uri"]);
    if (mw.config.get("skin") !== "vector" || mw.config.get("wgCanonicalSpecialPageName") === "Blankpage" || getComputedStyle(document.body).direction !== "ltr") {
    const groupsKey = ["bureaucrat", "checkuser", "suppress", "sysop", "patroller", "bot", "goodeditor"].reverse();
     return;
   const groupsStr = {
    }
     bureaucrat: " ",
   mw.loader.using(["ext.gadget.localforage"]).then(function () {
     checkuser: " ",
     var test = localforage.createInstance({
     suppress: "监",
       name: "AnnTools",
     sysop: "管",
       storeName: "IndexedDB-test",
     patroller: "巡",
       driver: [localforage.INDEXEDDB]
      bot: "机",
      });
     goodeditor: "优",
     return new Promise(function (res) {
   };
       var random = Math.random().toString().substring(2);
   let cache;
       var fired = false;
   try {
        test.setItem("test", random).then(function () {
     cache = JSON.parse(localStorage.getItem("AnnTools-usergroup"));
         return test.getItem("test");
     if (!$.isPlainObject(cache)
        }).then(function (result) {
        || typeof cache.timestamp !== "number" || cache.timestamp < new Date().getTime() - 30 * 60 * 1000
         if (!fired) {
        || !$.isPlainObject(cache.groups)) {
           fired = true;
       throw new Error();
           res(result === random);
     } else {
         }
        for (const i of groupsKey) {
       });
          if (!Array.isArray(cache.groups[i])) {
        setTimeout(function () {
            throw new Error();
          if (!fired) {
            fired = true;
           res(false);
          }
          }
        }
        }, 137);
      }
      });
    } catch {
    }).then(function (indexedDBCanRun) {
      const api = new mw.Api();
      var store = localforage.createInstance({
      const result = {};
       name: "AnnTools",
     const eol = Symbol();
       storeName: "SidebarHidden",
     let aufrom = undefined;
       driver: indexedDBCanRun ? [localforage.INDEXEDDB] : [localforage.LOCALSTORAGE]
     while (aufrom !== eol) {
     });
        const _result = await api.post({
      store.getItem("hidden").then(function (_hidden) {
         action: "query",
       var hidden = _hidden;
          list: "allusers",
       var saving = false;
          augroup: groupsKey.join("|"),
       var generateImageObject = function (svg) {
          aulimit: "max",
         return URL.createObjectURL(new Blob([svg], {
          auprop: "groups",
           type: "image/svg+xml"
         aufrom,
         }));
       };
       var logoPic = "https://www.hmoegirl.com/images/b/bc/Hmoegirl_logo.png";
       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
        });
        });
        if (_result.continue) {
        $logoLink.empty().removeAttr("class").attr("id", "sidebarHidden-logo-link").append($logo);
         aufrom = _result.continue.aufrom;
        var hide = function () {
        } else {
          if (saving) {
          aufrom = eol;
           return;
       }
         }
       _result.query.allusers.forEach(({
          hidden = true;
          name,
          saving = true;
          groups,
          $body.addClass("sidebarHidden");
       }) => {
         $arrow.attr("src", arrowRightSvg);
          groups.forEach((group) => {
         store.setItem("hidden", hidden).then(function () {
           if (groupsKey.includes(group)) {
            saving = false;
             result[group] = result[group] || [];
             if (!result[group].includes(name)) {
               result[group].push(name);
             }
            }
          });
          });
        });
        };
     }
        var show = function () {
     cache = {
         if (saving) {
        timestamp: new Date().getTime(),
           return;
       groups: result,
         }
     };
         saving = true;
   }
         hidden = false;
   localStorage.setItem("AnnTools-usergroup", JSON.stringify(cache));
          $body.removeClass("sidebarHidden");
   const hook = () => {
          $arrow.attr("src", arrowLeftSvg);
     $("a.mw-userlink:not(.markrights)").each((_, ele) => {
          store.setItem("hidden", hidden).then(function () {
       ele.classList.add("markrights");
            saving = false;
       const uri = new mw.Uri(ele.href);
       let username;
       const path = decodeURI(uri.path);
       if (/^\/User:[^/=%]+/.test(path)) {
          username = path.match(/^\/User:([^/=%]+)/)[1].replace(/_/g, " ");
       } else if (/^用户:[^/=%]+/.test(uri.query.title)) {
          username = uri.query.title.match(/^User:([^/=%]+)/)[1].replace(/_/g, " ");
       }
       if (username) {
          const self = $(ele);
         groupsKey.forEach((group) => {
            if (cache.groups[group].includes(username)) {
             self.after(`<sup class="markrights-${group}">${groupsStr[group]}<sup>`);
           }
          });
          });
       };
       $mwNavigation.append($arrow).append($logoLink);
       if (hidden) {
         hide();
        }
        }
       $arrow.on("click", function () {
         (hidden ? show : hide)();
       });
      });
      });
     for (const group of Object.keys(groupsStr)) {
    });
       $(`.markrights-${group}`).nextUntil(':not([class*="markrights-"])').filter(`.markrights-${group}`).remove();
});
     }
   };
   hook();
   mw.hook("wikipage.content").add(hook);
    $(window).on("load", hook);
   $("body").append("<style>.markrights-bureaucrat{color:black}.markrights-checkuser{color:purple}.markrights-suppress{color:purple}.markrights-sysop{color:mediumvioletred}.markrights-patroller{color:sienna}.markrights-bot{color:blue}.markrights-goodeditor{color:green}sup[class^=markrights-]+sup[class^=markrights-]{margin-left:2px}</style>");
})());

2021年3月30日 (二) 21:19的版本

/**
 * 侧边栏隐藏工具
 * 本工具参考自维百的同功能小工具——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 = "https://www.hmoegirl.com/images/b/bc/Hmoegirl_logo.png";
            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)();
            });
        });
    });
});