コンテンツにスキップ

利用者:Bluesoul/common.js

提供: Undertale Wiki

注意: 保存後、変更を確認するにはブラウザーのキャッシュを消去する必要がある場合があります。

  • Firefox / Safari: Shift を押しながら 再読み込み をクリックするか、Ctrl-F5 または Ctrl-R を押してください (Mac では ⌘-R)
  • Google Chrome: Ctrl-Shift-R を押してください (Mac では ⌘-Shift-R)
  • Microsoft Edge: Ctrl を押しながら 最新の情報に更新 をクリックするか、Ctrl-F5 を押してください。
mw.loader.using([
    'vue',
    'mediawiki.api',
    'mediawiki.util'
]).then(() => {

    if (mw.config.get('wgArticleId') <= 0) {
        return;
    }

    const { computed, createMwApp, onMounted, ref } = mw.loader.require('vue');
    const api = new mw.Api();

    function getEditInfo(rvdir) {
        return api.get({
            titles: mw.config.get('wgPageName'),
            prop: 'revisions',
            rvprop: 'ids|timestamp|user|size|parsedcomment|flags',
            rvlimit: 2,
            rvdir,
            formatversion: 2
        }).then(data => {
            if (
                !data ||
                !data.query ||
                !data.query.pages ||
                !data.query.pages[0] ||
                !data.query.pages[0].revisions
            ) {
                return;
            }
            const revs = data.query.pages[0].revisions;
            if (revs[0] && revs[1]) {
                revs[0].diff = revs[0].size - revs[1].size;
            }
            return revs[0];
        });
    }

    const editInfo = createMwApp({
        name: 'edit-info',
        template: `
        <p v-if="lastEdit">
            <user-links :user="lastEdit.user" />

            <a :href="diffLink" class="mw-changeslist-date">
                {{ lastEditDate }}
            </a>
            修改了此页面。
        </p>
        <p v-if="lastEdit && lastEdit.parsedcomment">
            编辑摘要:<span class="comment" v-html="lastEdit.parsedcomment"></span>
        </p>
        `,
        setup() {
            const scriptPath = mw.config.get('wgScriptPath');
            const lastEdit = ref(null);

            onMounted(() => {
                getEditInfo().then(data => {
                    if (!data) {
                        return;
                    }
                    lastEdit.value = data;
                });
            });

            return {
                lastEdit,
                lastEditDate: computed(() =>
                    new Date(lastEdit.value.timestamp).toLocaleString()
                ),
                diffLink: computed(() =>
                    `${scriptPath}/?diff=${lastEdit.value.revid}`
                )
            };
        }
    });

    editInfo.component('user-links', {
        name: 'user-links',
        template: `
        <span class="history-user">
            <a :href="userpageLink" class="mw-userlink">{{user}}</a>
            <span class="mw-usertoollinks mw-changeslist-links">
                <span><a :href="talkLink">讨论</a></span>
                <span><a :href="contribsLink">贡献</a></span>
                <span><a :href="blockLink">封禁</a></span>
            </span>
        </span>
        `,
        props: {
            user: {
                type: String,
                required: true
            }
        },
        setup: ({ user }) => ({
            userpageLink: mw.util.getUrl(`User:${user}`),
            talkLink: mw.util.getUrl(`User talk:${user}`),
            contribsLink: mw.util.getUrl(`Special:Contributions/${user}`),
            blockLink: mw.util.getUrl(`Special:Block/${user}`),
            user
        })
    });

    mw.hook('wikipage.content').add(() => {
        if (document.getElementById('edit-info')) {
            return;
        }
        const root = document.createElement('div');
        root.id = 'edit-info';

        const subtitle = document.getElementById('mw-content-subtitle');
        if (!subtitle) {
            return;
        }

        subtitle.appendChild(root);
        editInfo.mount(root);
    });

});


const url = new URL(window.location.href);
url.searchParams.set('action', 'purge');
const link = mw.util.addPortletLink(
    'p-cactions',
    url.href,
    '刷新',
    'ca-purge',
    '清除本页缓存',
    'n'
);
if (link) {
    link.addEventListener('click', event => {
        event.preventDefault();
        (new mw.Api()).post({
            action: 'purge',
            titles: mw.config.get('wgPageName'),
            forcerecursivelinkupdate: true
        }).done(() =>
            window.location.reload(true))
        .fail(code =>
            mw.notify(`无法刷新缓存,错误码:${code}。`)
        );
    });
}