User:Bosco/rollback-summary.js

From Test Wiki
Revision as of 08:52, 15 January 2026 by Bosco (talk | contribs) (2 revisions imported)
Jump to navigation Jump to search

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
//https://zh.wikipedia.org/wiki/MediaWiki:Gadget-rollback-summary.js
(() => {
    const messages = {
        prompt: 'Please enter a custom rollback summary (leave blank to use the default summary).',
        cancelNotify: 'Rollback canceled',
        summary: 'Reverted edit(s) by $1: $2',
        summaryUser: '[[Special:Contributions/$1|$1]]([[User talk:$1|talk]])',
        summaryNoUser: 'hidden user',
    };

    const loadedMap = new WeakMap();
    mw.hook('wikipage.content').add(() => {
        for (const link of $('.mw-rollback-link a')) {
            if (loadedMap.has(link)) {
                continue;
            }
            loadedMap.set(link, true);
            $(link)
                .on('click', (ev) => {
                    const summary = prompt(messages.prompt);
                    if (summary === null) {
                        // 取消回退
                        ev.preventDefault();
                        mw.notify(messages.cancelNotify);
                        return;
                    } else if (summary === '') {
                        // 不自訂摘要
                        return;
                    }

                    ev.preventDefault();
                    const url = new URL(link.href);
                    const username = url.searchParams.get('from');
                    url.searchParams.set('summary', mw.format(
                        messages.summary,
                        username ? mw.format(messages.summaryUser, username) : messages.summaryNoUser,
                        summary
                    ));
                    window.location.assign(url.href);
                })
                .css('color', '#099');
        }
    });
})();