User:顶呱呱的阿杰/citizen.js

来自有兽档案馆
var LIBdictionary = {
  "steward": {
    id: "2",
    aimgsrc: "https://youshou.wiki/images/a/a4/%E6%A1%A3%E6%A1%88%E7%90%86%E4%BA%8B%E5%91%98%E6%9D%83%E9%99%90%E6%A0%87%E8%AF%86.svg",
    src: "https://youshou.wiki/wiki/%E6%9C%89%E5%85%BD%E6%A1%A3%E6%A1%88%E9%A6%86:%E6%A1%A3%E6%A1%88%E7%90%86%E4%BA%8B%E5%9B%A2%E9%98%9F"
  },
  "sysop": {
    id: "3",
    aimgsrc: "https://youshou.wiki/images/3/3e/%E7%AE%A1%E7%90%86%E5%91%98%E6%9D%83%E9%99%90%E6%A0%87%E8%AF%86.svg",
    src: "https://youshou.wiki/wiki/%E6%9C%89%E5%85%BD%E6%A1%A3%E6%A1%88%E9%A6%86:%E7%AE%A1%E7%90%86%E5%91%98"
  },
  "templateeditor": {
    id: "4",
    aimgsrc: "https://youshou.wiki/images/4/47/%E6%A8%A1%E6%9D%BF%E7%BC%96%E8%BE%91%E5%91%98%E6%9D%83%E9%99%90%E6%A0%87%E8%AF%86.svg",
    src: "https://youshou.wiki/wiki/%E6%9C%89%E5%85%BD%E6%A1%A3%E6%A1%88%E9%A6%86:%E6%A8%A1%E6%9D%BF%E7%BC%96%E8%BE%91%E5%91%98"
  },
  "interface-admin": {
    id: "5",
    aimgsrc: "https://youshou.wiki/images/e/ea/%E7%95%8C%E9%9D%A2%E7%AE%A1%E7%90%86%E5%91%98%E6%9D%83%E9%99%90%E6%A0%87%E8%AF%86.svg",
    src: "https://youshou.wiki/wiki/%E6%9C%89%E5%85%BD%E6%A1%A3%E6%A1%88%E9%A6%86:%E7%95%8C%E9%9D%A2%E7%AE%A1%E7%90%86%E5%91%98"
  },
  "patroller": {
    id: "6",
    aimgsrc: "https://youshou.wiki/images/6/67/%E5%B7%A1%E6%9F%A5%E5%91%98%E6%9D%83%E9%99%90%E6%A0%87%E8%AF%86.svg",
    src: "https://youshou.wiki/wiki/%E6%9C%89%E5%85%BD%E6%A1%A3%E6%A1%88%E9%A6%86:%E5%B7%A1%E6%9F%A5%E6%9D%A1%E4%BE%8B#%E5%B7%A1%E6%9F%A5%E5%91%98"
  },
  "suppress": {
    id: "7",
    aimgsrc: "https://youshou.wiki/images/3/3d/%E7%9B%91%E7%9D%A3%E5%91%98%E6%9D%83%E9%99%90%E6%A0%87%E8%AF%86.svg",
    src: "https://youshou.wiki/wiki/%E6%9C%89%E5%85%BD%E6%A1%A3%E6%A1%88%E9%A6%86:%E7%9B%91%E7%9D%A3%E6%9D%A1%E4%BE%8B#%E7%9B%91%E7%9D%A3%E5%91%98"
  },
  "bot": {
    id: "8",
    aimgsrc: "https://youshou.wiki/images/f/f0/%E6%9C%BA%E5%99%A8%E4%BA%BA%E6%9D%83%E9%99%90%E6%A0%87%E8%AF%86.svg",
    src: "https://youshou.wiki/wiki/%E6%9C%89%E5%85%BD%E6%A1%A3%E6%A1%88%E9%A6%86:%E6%9C%BA%E5%99%A8%E4%BA%BA"
  },
  "autopatrolled": {
    id: "9",
    aimgsrc: "https://youshou.wiki/images/1/1e/%E4%BC%98%E8%B4%A8%E7%BC%96%E8%BE%91%E8%80%85%E6%9D%83%E9%99%90%E6%A0%87%E8%AF%86.svg",
    src: "https://youshou.wiki/wiki/%E6%9C%89%E5%85%BD%E6%A1%A3%E6%A1%88%E9%A6%86:%E4%BC%98%E8%B4%A8%E7%BC%96%E8%BE%91%E8%80%85"
  },
  "massmessage-sender": {
    id: "10",
    aimgsrc: "https://youshou.wiki/images/c/cd/大量消息发送者权限标识.svg",
    src: "https://youshou.wiki/wiki/有兽档案馆:大量消息发送者"
  },
  "autoconfirmed": {
    id: "11",
    aimgsrc: "https://youshou.wiki/images/4/49/确认用户权限标识.svg",
    src: "https://youshou.wiki/wiki/有兽档案馆:用户权限#自动确认用户"
  }
};
//! src/USerQX/cs.ts
$(function() {
  let WikiURLName = window.location.pathname;
  let matchResult = /^\/wiki\/User:[^\/]*$/.test(WikiURLName);
  if (!matchResult) {
    return;
  }
  let userNameMatch = (WikiURLName.match(/User:(.*)$/) || [])[1];
  let UserMessage = "".concat(mw.config.get("wgServer"), "/api.php?action=query&list=users&usprop=groups&format=json&ususers=").concat(userNameMatch);
  function createVirtualLinkImg(href, aimgsrc) {
    return {
      tag: "a",
      props: {
        href,
        style: "display: inline-block;"
      },
      children: [{
        tag: "img",
        props: {
          src: aimgsrc,
          style: "width: 39px; margin: 0 3px;"
        }
      }]
    };
  }
  function renderVirtualDOM(virtualDOM, container) {
    if (!(container instanceof jQuery)) {
      container = $(container);
    }
    function createRealNode(virtualNode) {
      const {
        tag,
        props,
        children
      } = virtualNode;
      const realNode = $("<" + tag + ">");
      Object.keys(props).forEach((propName) => {
        realNode.attr(propName, String(props[propName]));
      });
      if (children) {
        children.forEach((childVirtualNode) => {
          const childRealNode = createRealNode(childVirtualNode);
          realNode.append(childRealNode);
        });
      }
      return realNode;
    }
    const realNodes = virtualDOM.map((virtualNode) => createRealNode(virtualNode));
    realNodes.forEach((node) => {
      container.append(node);
    });
  }
  function ArrayDataSort(dataArray) {
    dataArray.sort((a, b) => a.id - b.id);
    if (dataArray.length > 3) {
      return dataArray.slice(0, 3);
    }
    return dataArray;
  }
  function fetchUserData() {
    return new Promise((resolve, reject) => {
      if (!UserMessage) {
        return reject(new Error("UserMessage is not defined"));
      }
      $.get(UserMessage, function(data) {
        const userData = data.query.users[0].groups;
        resolve(userData);
      }, "json").fail(reject);
    });
  }
  let retryCount = 0;
  function fetchUserDataWithRetry() {
    return fetchUserData().catch((error) => {
      retryCount++;
      if (retryCount <= 3) {
        console.warn("请求失败,正在进行第".concat(retryCount, "次重试..."));
        return fetchUserDataWithRetry();
      } else {
        console.error("请求失败,已达到最大重试次数:", error);
        throw error;
      }
    });
  }
  fetchUserDataWithRetry().then((UserData) => {
    if (!UserData || !Array.isArray(UserData)) {
      console.error("谢特", UserData);
      return;
    }
    let matchedGroups = UserData.filter((group) => LIBdictionary.hasOwnProperty(group)).map((group) => LIBdictionary[group]);
    let firstThreeItems = ArrayDataSort(matchedGroups);
    const virtualDOM = firstThreeItems.map((imgData) => imgData !== null && imgData !== void 0 && imgData.src && imgData !== null && imgData !== void 0 && imgData.aimgsrc ? createVirtualLinkImg(imgData.src, imgData.aimgsrc) : null);
    let dommountpoint = $("#content header.mw-body-header .page-heading .mw-indicators");
    renderVirtualDOM(virtualDOM, dommountpoint);
  }).catch((error) => {
    console.error("最终请求失败,不再重试:", error);
  });
});