<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://zh.enter-politics.com/index.php?action=history&amp;feed=atom&amp;title=User%3AKomacyaN%2Fjs%2FuserStatus.js</id>
	<title>User:KomacyaN/js/userStatus.js - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://zh.enter-politics.com/index.php?action=history&amp;feed=atom&amp;title=User%3AKomacyaN%2Fjs%2FuserStatus.js"/>
	<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=User:KomacyaN/js/userStatus.js&amp;action=history"/>
	<updated>2026-07-09T13:52:09Z</updated>
	<subtitle>本wiki的该页面的版本历史</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://zh.enter-politics.com/index.php?title=User:KomacyaN/js/userStatus.js&amp;diff=10661&amp;oldid=prev</id>
		<title>白龙：建立内容为“/*   // &lt;pre&gt; &quot;use strict&quot;; $(() =&gt; (async () =&gt; {     if (location.hostname.startsWith(&quot;mzh.&quot;)) {         return;     }     try {         const builtinStatus = {…”的新页面</title>
		<link rel="alternate" type="text/html" href="https://zh.enter-politics.com/index.php?title=User:KomacyaN/js/userStatus.js&amp;diff=10661&amp;oldid=prev"/>
		<updated>2022-10-31T10:19:49Z</updated>

		<summary type="html">&lt;p&gt;建立内容为“/*   // &amp;lt;pre&amp;gt; &amp;quot;use strict&amp;quot;; $(() =&amp;gt; (async () =&amp;gt; {     if (location.hostname.startsWith(&amp;quot;mzh.&amp;quot;)) {         return;     }     try {         const builtinStatus = {…”的新页面&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/*&lt;br /&gt;
 &lt;br /&gt;
// &amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;use strict&amp;quot;;&lt;br /&gt;
$(() =&amp;gt; (async () =&amp;gt; {&lt;br /&gt;
    if (location.hostname.startsWith(&amp;quot;mzh.&amp;quot;)) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    try {&lt;br /&gt;
        const builtinStatus = {&lt;br /&gt;
            online: '&amp;lt;img class=&amp;quot;pt-userstatus-img&amp;quot; src=&amp;quot;https://img.moegirl.org.cn/common/9/94/Symbol_support_vote.svg&amp;quot;&amp;gt; &amp;lt;b style=&amp;quot;color:green;&amp;quot;&amp;gt;在线&amp;lt;/b&amp;gt;',&lt;br /&gt;
            busy: '&amp;lt;img class=&amp;quot;pt-userstatus-img&amp;quot; src=&amp;quot;https://img.moegirl.org.cn/common/c/c5/Symbol_support2_vote.svg&amp;quot;&amp;gt; &amp;lt;b style=&amp;quot;color:blue;&amp;quot;&amp;gt;正在来例假中&amp;lt;/b&amp;gt;',&lt;br /&gt;
            offline: '&amp;lt;img class=&amp;quot;pt-userstatus-img&amp;quot; src=&amp;quot;https://img.moegirl.org.cn/common/7/7f/Symbol_oppose_vote.svg&amp;quot;&amp;gt; &amp;lt;b style=&amp;quot;color:red;&amp;quot;&amp;gt;离线&amp;lt;/b&amp;gt;',&lt;br /&gt;
            away: '&amp;lt;img class=&amp;quot;pt-userstatus-img&amp;quot; src=&amp;quot;https://img.moegirl.org.cn/common/6/6c/Time2wait.svg&amp;quot;&amp;gt; &amp;lt;b style=&amp;quot;color:grey;&amp;quot;&amp;gt;已离开&amp;lt;/b&amp;gt;',&lt;br /&gt;
            sleeping: '&amp;lt;img class=&amp;quot;pt-userstatus-img&amp;quot; src=&amp;quot;https://img.moegirl.org.cn/common/5/54/Symbol_wait.svg&amp;quot;&amp;gt; &amp;lt;b style=&amp;quot;color:purple;&amp;quot;&amp;gt;在睡觉&amp;lt;/b&amp;gt;',&lt;br /&gt;
            wikibreak: '&amp;lt;img class=&amp;quot;pt-userstatus-img&amp;quot; src=&amp;quot;https://img.moegirl.org.cn/common/6/61/Symbol_abstain_vote.svg&amp;quot;&amp;gt; &amp;lt;b style=&amp;quot;color:brown;&amp;quot;&amp;gt;少女祈祷中&amp;lt;/b&amp;gt;',&lt;br /&gt;
            holiday: '&amp;lt;img class=&amp;quot;pt-userstatus-img&amp;quot; src=&amp;quot;https://img.moegirl.org.cn/common/3/30/Symbol_deferred.svg&amp;quot;&amp;gt; &amp;lt;b style=&amp;quot;color:#7B68EE;&amp;quot;&amp;gt;处于假期中&amp;lt;/b&amp;gt;',&lt;br /&gt;
            _unknown: '&amp;lt;img class=&amp;quot;pt-userstatus-img&amp;quot; src=&amp;quot;https://img.moegirl.org.cn/common/8/89/Symbol_neutral_vote.svg&amp;quot;&amp;gt; &amp;lt;i style=&amp;quot;color:gray;&amp;quot;&amp;gt;状态不详&amp;lt;/i&amp;gt;',&lt;br /&gt;
        };&lt;br /&gt;
        const originalBuiltinStatusIndex = Object.keys(builtinStatus);&lt;br /&gt;
        mw.loader.addStyleTag(&amp;quot;#pt-userstatus { margin-top: 0.75em !important; margin-bottom: 0px !important; } .pt-userstatus-img { width: 25px; margin-top: -0.25em; }&amp;quot;);&lt;br /&gt;
        builtinStatus.on = builtinStatus.online;&lt;br /&gt;
        builtinStatus.off = builtinStatus.offline;&lt;br /&gt;
        builtinStatus.break = builtinStatus.wikibreak;&lt;br /&gt;
        builtinStatus.sleep = builtinStatus.sleeping;&lt;br /&gt;
        const userName = mw.config.get(&amp;quot;wgUserName&amp;quot;);&lt;br /&gt;
        if (userName === null) {&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        const statusPage = `User:${userName}/Status`;&lt;br /&gt;
        const now = new Date().getTime();&lt;br /&gt;
        let rawStatus;&lt;br /&gt;
        try {&lt;br /&gt;
            const localStatus = JSON.parse(localStorage.getItem(&amp;quot;AnnTools-UserStatus&amp;quot;));&lt;br /&gt;
            if (mw.config.get(&amp;quot;wgPageName&amp;quot;) !== statusPage&lt;br /&gt;
                &amp;amp;&amp;amp; typeof localStatus.timestamp === &amp;quot;number&amp;quot; &amp;amp;&amp;amp; localStatus.timestamp &amp;gt; now - 10 * 60 * 1000&lt;br /&gt;
                &amp;amp;&amp;amp; localStatus.status in builtinStatus) {&lt;br /&gt;
                rawStatus = localStatus.status;&lt;br /&gt;
            } else {&lt;br /&gt;
                throw new Error();&lt;br /&gt;
            }&lt;br /&gt;
        } catch {&lt;br /&gt;
            try {&lt;br /&gt;
                rawStatus = (await $.ajax({&lt;br /&gt;
                    url: `${mw.config.get(&amp;quot;wgServer&amp;quot;)}${mw.config.get(&amp;quot;wgScriptPath&amp;quot;)}/index.php`,&lt;br /&gt;
                    type: &amp;quot;GET&amp;quot;,&lt;br /&gt;
                    data: {&lt;br /&gt;
                        title: statusPage,&lt;br /&gt;
                        action: &amp;quot;raw&amp;quot;,&lt;br /&gt;
                    },&lt;br /&gt;
                    cache: false,&lt;br /&gt;
                })).trim();&lt;br /&gt;
                if (rawStatus in builtinStatus) {&lt;br /&gt;
                    localStorage.setItem(&amp;quot;AnnTools-UserStatus&amp;quot;, JSON.stringify({&lt;br /&gt;
                        timestamp: now,&lt;br /&gt;
                        status: rawStatus,&lt;br /&gt;
                    }));&lt;br /&gt;
                }&lt;br /&gt;
            } catch {&lt;br /&gt;
                rawStatus = &amp;quot;_unknown&amp;quot;;&lt;br /&gt;
                localStorage.removeItem(&amp;quot;AnnTools-UserStatus&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        const currentStatus = rawStatus in builtinStatus ? builtinStatus[rawStatus] : (() =&amp;gt; {&lt;br /&gt;
            const div = $(&amp;quot;&amp;lt;div/&amp;gt;&amp;quot;).html(rawStatus);&lt;br /&gt;
            div.find(&amp;quot;script, style, link, iframe, frame, object, param, audio, video, base, head, meta, title, body, h1, h2, h3, h4, h5, h6, blockquote, dd, dl, dir, dt, hr, li, ul, ol, pre, a, abbr, br, cite, code, data, em, rb, rp, rt, rtc, ruby, samp, time, tt, var, wbr, area, map, track, applet, embed, noembed, picture, source, canvas, noscript, caption, col, colgroup, table, tbody, thead, tfoot, td, th, tr, button, datalist, fieldset, form, input, label, legend, meter, optgroup, option, output, progress, select, textarea, details, dialog, menu, menuitem, summary, shadow, element, content, slot, template, bgsound, blink, center, command, frameset&amp;quot;).remove();&lt;br /&gt;
            div.find(&amp;quot;img&amp;quot;).attr(&amp;quot;class&amp;quot;, &amp;quot;pt-userstatus-img&amp;quot;);&lt;br /&gt;
            return div.html();&lt;br /&gt;
        })();&lt;br /&gt;
        const pt = $(&amp;quot;&amp;lt;li id=\&amp;quot;pt-userstatus\&amp;quot;&amp;gt;&amp;lt;a id=\&amp;quot;pt-userpage-link\&amp;quot; href=\&amp;quot;javascript:void(0);\&amp;quot; dir=\&amp;quot;auto\&amp;quot; title=\&amp;quot;您的状态\&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&amp;quot;);&lt;br /&gt;
        pt.find(&amp;quot;#pt-userpage-link&amp;quot;).html(currentStatus).on(&amp;quot;click&amp;quot;, async () =&amp;gt; {&lt;br /&gt;
            await mw.loader.using([&amp;quot;oojs-ui&amp;quot;, &amp;quot;mw.Api&amp;quot;]);&lt;br /&gt;
            const messageDialog = new OO.ui.MessageDialog();&lt;br /&gt;
            const windowManager = new OO.ui.WindowManager();&lt;br /&gt;
            $(&amp;quot;body&amp;quot;).append(windowManager.$element);&lt;br /&gt;
            windowManager.addWindows([messageDialog]);&lt;br /&gt;
            messageDialog.title.$label.html(&amp;quot;修改自己的状态&amp;quot;);&lt;br /&gt;
            const container = $(&amp;quot;&amp;lt;div/&amp;gt;&amp;quot;);&lt;br /&gt;
            container.append(`&amp;lt;p&amp;gt;修改&amp;lt;a href=&amp;quot;${mw.config.get(&amp;quot;wgServer&amp;quot;)}${mw.config.get(&amp;quot;wgScriptPath&amp;quot;)}/${statusPage}&amp;quot;&amp;gt;自己的状态&amp;lt;/a&amp;gt;为：&amp;lt;/p&amp;gt;`);&lt;br /&gt;
            const builtinStatusList = originalBuiltinStatusIndex.map((data, i) =&amp;gt; data === &amp;quot;_unknown&amp;quot; ? undefined : { data, label: `${i}`, html: builtinStatus[data] }).filter(n =&amp;gt; !!n);&lt;br /&gt;
            const builtinStatusSelector = new OO.ui.RadioSelectInputWidget({&lt;br /&gt;
                value: rawStatus,&lt;br /&gt;
                options: builtinStatusList.map(({ data, label }) =&amp;gt; ({ data, label })),&lt;br /&gt;
            });&lt;br /&gt;
            builtinStatusSelector.$element.find(&amp;quot;.oo-ui-radioSelectWidget &amp;gt; .oo-ui-radioOptionWidget &amp;gt; .oo-ui-labelElement-label&amp;quot;).each((_, labelEle) =&amp;gt; {&lt;br /&gt;
                $(labelEle).css(&amp;quot;overflow&amp;quot;, &amp;quot;visible&amp;quot;).html((builtinStatusList.filter(({ label }) =&amp;gt; $(labelEle).text() === label)[0] || { html: $(labelEle).html() }).html);&lt;br /&gt;
            });&lt;br /&gt;
            container.append(builtinStatusSelector.$element);&lt;br /&gt;
            container.append(`&amp;lt;p&amp;gt;本工具在获取状态信息后有10分钟的缓存，您可以通过直接打开&amp;lt;a href=&amp;quot;${mw.config.get(&amp;quot;wgServer&amp;quot;)}${mw.config.get(&amp;quot;wgScriptPath&amp;quot;)}/${statusPage}&amp;quot;&amp;gt;自己的状态页&amp;lt;/a&amp;gt;来强制获取最新状态信息。`);&lt;br /&gt;
            messageDialog.message.$label.append(container);&lt;br /&gt;
            const action = new OO.ui.ActionWidget({&lt;br /&gt;
                action: &amp;quot;confirm&amp;quot;,&lt;br /&gt;
                label: &amp;quot;提交&amp;quot;,&lt;br /&gt;
                flags: &amp;quot;primary&amp;quot;,&lt;br /&gt;
            });&lt;br /&gt;
            const cAction = new OO.ui.ActionWidget({&lt;br /&gt;
                action: &amp;quot;cancel&amp;quot;,&lt;br /&gt;
                label: &amp;quot;取消&amp;quot;,&lt;br /&gt;
                flags: &amp;quot;primary&amp;quot;,&lt;br /&gt;
            });&lt;br /&gt;
            cAction.$element[0].addEventListener(&amp;quot;click&amp;quot;, () =&amp;gt; {&lt;br /&gt;
                windowManager.closeWindow(messageDialog);&lt;br /&gt;
            }, {&lt;br /&gt;
                capture: true,&lt;br /&gt;
            });&lt;br /&gt;
            action.$element[0].addEventListener(&amp;quot;click&amp;quot;, async () =&amp;gt; {&lt;br /&gt;
                windowManager.closeWindow(messageDialog);&lt;br /&gt;
                const fMessageDialog = new OO.ui.MessageDialog();&lt;br /&gt;
                windowManager.addWindows([fMessageDialog]);&lt;br /&gt;
                const cAction = new OO.ui.ActionWidget({&lt;br /&gt;
                    action: &amp;quot;accept&amp;quot;,&lt;br /&gt;
                    label: &amp;quot;我知道了&amp;quot;,&lt;br /&gt;
                    flags: &amp;quot;primary&amp;quot;,&lt;br /&gt;
                });&lt;br /&gt;
                cAction.$element[0].addEventListener(&amp;quot;click&amp;quot;, () =&amp;gt; {&lt;br /&gt;
                    windowManager.closeWindow(fMessageDialog);&lt;br /&gt;
                }, {&lt;br /&gt;
                    capture: true,&lt;br /&gt;
                });&lt;br /&gt;
                try {&lt;br /&gt;
                    const status = builtinStatusSelector.getValue();&lt;br /&gt;
                    await new mw.Api().postWithToken(&amp;quot;csrf&amp;quot;, {&lt;br /&gt;
                        action: &amp;quot;edit&amp;quot;,&lt;br /&gt;
                        title: statusPage,&lt;br /&gt;
                        text: status,&lt;br /&gt;
                        summary: `修改状态为 - ${status}`,&lt;br /&gt;
                        tags: &amp;quot;Automation tool&amp;quot;,&lt;br /&gt;
                        minor: true,&lt;br /&gt;
                    });&lt;br /&gt;
                    localStorage.setItem(&amp;quot;AnnTools-UserStatus&amp;quot;, JSON.stringify({&lt;br /&gt;
                        timestamp: new Date().getTime(),&lt;br /&gt;
                        status: status,&lt;br /&gt;
                    }));&lt;br /&gt;
                    pt.find(&amp;quot;#pt-userpage-link&amp;quot;).html(builtinStatus[status]);&lt;br /&gt;
                    rawStatus = status;&lt;br /&gt;
                    fMessageDialog.title.$label.html(&amp;quot;状态修改完成！&amp;quot;);&lt;br /&gt;
                    fMessageDialog.message.$label.html(`&amp;lt;p&amp;gt;你的状态已修改为：${builtinStatus[status]}&amp;lt;/p&amp;gt;`);&lt;br /&gt;
                    const action = new OO.ui.ActionWidget({&lt;br /&gt;
                        action: &amp;quot;confirm&amp;quot;,&lt;br /&gt;
                        label: &amp;quot;确定&amp;quot;,&lt;br /&gt;
                        flags: &amp;quot;primary&amp;quot;,&lt;br /&gt;
                    });&lt;br /&gt;
                    action.$element[0].addEventListener(&amp;quot;click&amp;quot;, () =&amp;gt; {&lt;br /&gt;
                        windowManager.closeWindow(fMessageDialog);&lt;br /&gt;
                    }, {&lt;br /&gt;
                        capture: true,&lt;br /&gt;
                    });&lt;br /&gt;
                    windowManager.openWindow(fMessageDialog, {&lt;br /&gt;
                        actions: [action],&lt;br /&gt;
                    });&lt;br /&gt;
                } catch (e) {&lt;br /&gt;
                    fMessageDialog.title.$label.html(&amp;quot;状态修改发生错误……&amp;quot;);&lt;br /&gt;
                    fMessageDialog.message.$label.html(`错误信息为：${e}`);&lt;br /&gt;
                    windowManager.openWindow(fMessageDialog, {&lt;br /&gt;
                        actions: [cAction],&lt;br /&gt;
                    });&lt;br /&gt;
                }&lt;br /&gt;
            }, {&lt;br /&gt;
                capture: true,&lt;br /&gt;
            });&lt;br /&gt;
            windowManager.openWindow(messageDialog, {&lt;br /&gt;
                actions: [action, cAction],&lt;br /&gt;
            });&lt;br /&gt;
            return false;&lt;br /&gt;
        });&lt;br /&gt;
        $(&amp;quot;#pt-userpage&amp;quot;).after(pt);&lt;br /&gt;
        mw.loader.using([&amp;quot;oojs-ui&amp;quot;, &amp;quot;mw.Api&amp;quot;]);&lt;br /&gt;
    } catch (reason) {&lt;br /&gt;
        console.error(reason);&lt;br /&gt;
        const lastError = sessionStorage.getItem(&amp;quot;AnnTools-userstatus-img-Error&amp;quot;);&lt;br /&gt;
        if (lastError !== reason.toString()) {&lt;br /&gt;
            alert(`显示用户状态工具发生错误：\n${reason}`);&lt;br /&gt;
            sessionStorage.setItem(&amp;quot;AnnTools-userstatus-img-Error&amp;quot;, reason);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
})());&lt;br /&gt;
// &amp;lt;/pre&amp;gt;&lt;br /&gt;
//Copy from Anna&lt;br /&gt;
 &lt;br /&gt;
*/&lt;/div&gt;</summary>
		<author><name>白龙</name></author>
	</entry>
</feed>