MediaWiki:Common.js

出自攀岩維基
Kevin​(留言 | 貢獻)2026年10月30日 (五) 02:14的修訂 (建立內容為「→此 JavaScript 會用於使用者載入的每一個頁面。:​ →首頁:從最近更新條目中隨機顯示 5 個:​ mw.loader.using(['mediawiki.api', 'mediawiki.util']).then(function () { $(function () { var box = document.getElementById('climbing-recent-pages'); if (!box) { return; } new mw.Api().get({ action: 'query', list: 'recentchanges', rcnamespace: 0,…」的新頁面)
(差異) ←上個修訂 | 最新修訂 (差異) | 下個修訂→ (差異)
跳至導覽 跳至搜尋

注意:在您發布之後,您可能需要清除瀏覽器快取才能看到變更。

  • Firefox或Safari:按住Shift時點擊重新整理,或按Ctrl-F5或Ctrl-R(Mac則為⌘-R)
  • Google Chrome:按Ctrl-Shift-R(Mac則為⌘-Shift-R)
  • Edge:按住Ctrl時點擊重新整理,或按Ctrl-F5。
/* 此 JavaScript 會用於使用者載入的每一個頁面。 */
/* 首頁:從最近更新條目中隨機顯示 5 個 */
mw.loader.using(['mediawiki.api', 'mediawiki.util']).then(function () {
    $(function () {
        var box = document.getElementById('climbing-recent-pages');
        if (!box) {
            return;
        }

        new mw.Api().get({
            action: 'query',
            list: 'recentchanges',
            rcnamespace: 0,
            rctype: 'edit|new',
            rcshow: '!bot|!redirect',
            rctoponly: true,
            rcprop: 'title|timestamp',
            rclimit: 100,
            formatversion: 2
        }).done(function (data) {
            var seen = new Set();
            var pages = [];
            var currentTitle = mw.config.get('wgPageName').replace(/_/g, ' ');

            ((data.query && data.query.recentchanges) || []).forEach(function (page) {
                if (!page.title ||
                    page.title === currentTitle ||
                    seen.has(page.title)) {
                    return;
                }

                seen.add(page.title);
                pages.push(page);
            });

            // 最近更新的 20 個不同條目作為抽選範圍。
            pages = pages.slice(0, 20);

            // Fisher–Yates 隨機排序。
            for (var i = pages.length - 1; i > 0; i--) {
                var j = Math.floor(Math.random() * (i + 1));
                var temp = pages[i];
                pages[i] = pages[j];
                pages[j] = temp;
            }

            if (!pages.length) {
                box.textContent = '目前沒有可顯示的近期更新條目。';
                return;
            }

            var list = document.createElement('ul');

            pages.slice(0, 5).forEach(function (page) {
                var item = document.createElement('li');
                var link = document.createElement('a');

                link.href = mw.util.getUrl(page.title);
                link.textContent = page.title;
                item.appendChild(link);

                var date = new Date(page.timestamp);
                if (!Number.isNaN(date.getTime())) {
                    var label = document.createElement('span');
                    label.style.color = '#666';
                    label.textContent = '(' +
                        date.toLocaleDateString('zh-TW', {
                            timeZone: 'Asia/Taipei',
                            year: 'numeric',
                            month: 'numeric',
                            day: 'numeric'
                        }) + ' 更新)';
                    item.appendChild(label);
                }

                list.appendChild(item);
            });

            box.replaceChildren(list);
        }).fail(function () {
            box.textContent = '暫時無法載入,請點選側欄的「近期變更」。';
        });
    });
});