MediaWiki:Mobile.js

提供:百科事典.com
ナビゲーションに移動検索に移動

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

  • Firefox / Safari: Shift を押しながら 再読み込み をクリックするか、Ctrl-F5 または Ctrl-R を押してください (Mac では ⌘-R)
  • Google Chrome: Ctrl-Shift-R を押してください (Mac では ⌘-Shift-R)
  • Internet Explorer / Microsoft Edge: Ctrl を押しながら 最新の情報に更新 をクリックするか、Ctrl-F5 を押してください
  • Opera: Ctrl-F5を押してください
/* ここにある全てのJavaScriptはモバイル版サイトの利用者に影響します */

/******************************************************
 * Timeless モバイル専用:最近の更新ウィジェット
 ******************************************************/

mw.loader.using(['mediawiki.util'], function () {

    function loadRecentChanges(container) {
        var key = 'recentchanges-cache';
        var keyTime = key + '-time';
        var ttl = 5 * 60 * 1000;
        var now = Date.now();

        var cached = localStorage.getItem(key);
        var cachedTime = localStorage.getItem(keyTime);

        if (cached && cachedTime && now - cachedTime < ttl) {
            container.innerHTML = cached;
            return;
        }

        $.getJSON(mw.util.wikiScript('api'), {
            action: 'query',
            list: 'recentchanges',
            rclimit: 7,
            rcprop: 'title|timestamp|ids',
            rcshow: '!bot',
            format: 'json'
        }, function (data) {

            var html = '<ul>';

            data.query.recentchanges.forEach(function (rc) {
                html += '<li>' +
                    '<a href="/' + rc.title + '">' + rc.title + '</a>' +
                    ' <span style="color:#666;">(' + rc.timestamp + ')</span>' +
                    '</li>';
            });

            html += '</ul>';

            localStorage.setItem(key, html);
            localStorage.setItem(keyTime, now);

            container.innerHTML = html;
        });
    }

    function initRecentChanges() {
        var container = document.getElementById('recentchanges-container');
        if (!container) return;

        if (container.dataset.loaded) return;
        container.dataset.loaded = "1";

        loadRecentChanges(container);
    }

    var observer = new MutationObserver(function () {
        initRecentChanges();
    });

    observer.observe(document.body, { childList: true, subtree: true });

    initRecentChanges();
});