<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://wiki.sukasuka.cn/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-ShowUserGroup.js</id>
	<title>MediaWiki:Gadget-ShowUserGroup.js - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.sukasuka.cn/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-ShowUserGroup.js"/>
	<link rel="alternate" type="text/html" href="https://wiki.sukasuka.cn/index.php?title=MediaWiki:Gadget-ShowUserGroup.js&amp;action=history"/>
	<updated>2026-10-27T18:20:34Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://wiki.sukasuka.cn/index.php?title=MediaWiki:Gadget-ShowUserGroup.js&amp;diff=18751&amp;oldid=prev</id>
		<title>RavenclawOIer：​创建页面，内容为“&quot;use strict&quot;; $(() =&gt; (async () =&gt; {     await mw.loader.using([&quot;mw.Api&quot;, &quot;mediawiki.Uri&quot;]);     const groupsKey = [&quot;bureaucrat&quot;, &quot;checkuser&quot;, &quot;sysop&quot;, &quot;patroller&quot;,…”</title>
		<link rel="alternate" type="text/html" href="https://wiki.sukasuka.cn/index.php?title=MediaWiki:Gadget-ShowUserGroup.js&amp;diff=18751&amp;oldid=prev"/>
		<updated>2020-10-19T02:55:38Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“&amp;quot;use strict&amp;quot;; $(() =&amp;gt; (async () =&amp;gt; {     await mw.loader.using([&amp;quot;mw.Api&amp;quot;, &amp;quot;mediawiki.Uri&amp;quot;]);     const groupsKey = [&amp;quot;bureaucrat&amp;quot;, &amp;quot;checkuser&amp;quot;, &amp;quot;sysop&amp;quot;, &amp;quot;patroller&amp;quot;,…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;quot;use strict&amp;quot;;&lt;br /&gt;
$(() =&amp;gt; (async () =&amp;gt; {&lt;br /&gt;
    await mw.loader.using([&amp;quot;mw.Api&amp;quot;, &amp;quot;mediawiki.Uri&amp;quot;]);&lt;br /&gt;
    const groupsKey = [&amp;quot;bureaucrat&amp;quot;, &amp;quot;checkuser&amp;quot;, &amp;quot;sysop&amp;quot;, &amp;quot;patroller&amp;quot;, &amp;quot;bot&amp;quot;].reverse();&lt;br /&gt;
    const groupsStr = {&lt;br /&gt;
        bureaucrat: &amp;quot;行&amp;quot;,&lt;br /&gt;
        checkuser: &amp;quot;查&amp;quot;,&lt;br /&gt;
        sysop: &amp;quot;管&amp;quot;,&lt;br /&gt;
        patroller: &amp;quot;巡&amp;quot;,&lt;br /&gt;
        bot: &amp;quot;机&amp;quot;,&lt;br /&gt;
    };&lt;br /&gt;
    let cache;&lt;br /&gt;
    try {&lt;br /&gt;
        cache = JSON.parse(localStorage.getItem(&amp;quot;AnnTools-usergroup&amp;quot;));&lt;br /&gt;
        if (!$.isPlainObject(cache)&lt;br /&gt;
            || typeof cache.timestamp !== &amp;quot;number&amp;quot; || cache.timestamp &amp;lt; new Date().getTime() - 30 * 60 * 1000&lt;br /&gt;
            || !$.isPlainObject(cache.groups)) {&lt;br /&gt;
            throw new Error();&lt;br /&gt;
        } else {&lt;br /&gt;
            for (const i of groupsKey) {&lt;br /&gt;
                if (!Array.isArray(cache.groups[i])) {&lt;br /&gt;
                    throw new Error();&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    } catch {&lt;br /&gt;
        const api = new mw.Api();&lt;br /&gt;
        const result = {};&lt;br /&gt;
        const eol = Symbol();&lt;br /&gt;
        let aufrom = undefined;&lt;br /&gt;
        while (aufrom !== eol) {&lt;br /&gt;
            const _result = await api.post({&lt;br /&gt;
                action: &amp;quot;query&amp;quot;,&lt;br /&gt;
                list: &amp;quot;allusers&amp;quot;,&lt;br /&gt;
                augroup: groupsKey.join(&amp;quot;|&amp;quot;),&lt;br /&gt;
                aulimit: &amp;quot;max&amp;quot;,&lt;br /&gt;
                auprop: &amp;quot;groups&amp;quot;,&lt;br /&gt;
                aufrom,&lt;br /&gt;
            });&lt;br /&gt;
            if (_result.continue) {&lt;br /&gt;
                aufrom = _result.continue.aufrom;&lt;br /&gt;
            } else {&lt;br /&gt;
                aufrom = eol;&lt;br /&gt;
            }&lt;br /&gt;
            _result.query.allusers.forEach(({&lt;br /&gt;
                name,&lt;br /&gt;
                groups,&lt;br /&gt;
            }) =&amp;gt; {&lt;br /&gt;
                groups.forEach((group) =&amp;gt; {&lt;br /&gt;
                    if (groupsKey.includes(group)) {&lt;br /&gt;
                        result[group] = result[group] || [];&lt;br /&gt;
                        if (!result[group].includes(name)) {&lt;br /&gt;
                            result[group].push(name);&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                });&lt;br /&gt;
            });&lt;br /&gt;
        }&lt;br /&gt;
        cache = {&lt;br /&gt;
            timestamp: new Date().getTime(),&lt;br /&gt;
            groups: result,&lt;br /&gt;
        };&lt;br /&gt;
    }&lt;br /&gt;
    localStorage.setItem(&amp;quot;AnnTools-usergroup&amp;quot;, JSON.stringify(cache));&lt;br /&gt;
    const hook = () =&amp;gt; {&lt;br /&gt;
        $(&amp;quot;a.mw-userlink:not(.markrights)&amp;quot;).each((_, ele) =&amp;gt; {&lt;br /&gt;
            ele.classList.add(&amp;quot;markrights&amp;quot;);&lt;br /&gt;
            const uri = new mw.Uri(ele.href);&lt;br /&gt;
            let username;&lt;br /&gt;
            const path = decodeURI(uri.path);&lt;br /&gt;
            if (/^\/User:[^/=%]+/.test(path)) {&lt;br /&gt;
                username = path.match(/^\/User:([^/=%]+)/)[1].replace(/_/g, &amp;quot; &amp;quot;);&lt;br /&gt;
            } else if (/^User:[^/=%]+/.test(uri.query.title)) {&lt;br /&gt;
                username = uri.query.title.match(/^User:([^/=%]+)/)[1].replace(/_/g, &amp;quot; &amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            if (username) {&lt;br /&gt;
                const self = $(ele);&lt;br /&gt;
                groupsKey.forEach((group) =&amp;gt; {&lt;br /&gt;
                    if (cache.groups[group].includes(username)) {&lt;br /&gt;
                        self.after(`&amp;lt;sup class=&amp;quot;markrights-${group}&amp;quot;&amp;gt;${groupsStr[group]}&amp;lt;sup&amp;gt;`);&lt;br /&gt;
                    }&lt;br /&gt;
                });&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
    };&lt;br /&gt;
    hook();&lt;br /&gt;
    mw.hook(&amp;quot;wikipage.content&amp;quot;).add(hook);&lt;br /&gt;
    $(window).on(&amp;quot;load&amp;quot;, hook);&lt;br /&gt;
    $(&amp;quot;body&amp;quot;).append(&amp;quot;&amp;lt;style&amp;gt;.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}&amp;lt;/style&amp;gt;&amp;quot;);&lt;br /&gt;
})());&lt;/div&gt;</summary>
		<author><name>RavenclawOIer</name></author>
	</entry>
</feed>