Wiki/MediaWiki:Common.js

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

/******************************************************

* Timeless 対応:最近の更新ウィジェット(完全版)
******************************************************/

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

   // ▼ 最近の更新を読み込む関数
   function loadRecentChanges(container) {
       var key = 'recentchanges-cache';
       var keyTime = key + '-time';
       var ttl = 5 * 60 * 1000; // 5分キャッシュ
       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 = '

    '; data.query.recentchanges.forEach(function (rc) { html += '
  • ' + '<a href="/wiki/' + rc.title + '">' + rc.title + '</a>' + ' (' + rc.timestamp + ')' + '
  • '; }); html += '

';

           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);
   }
   // ▼ Timeless は DOM を後から組み替えるので監視が必須
   var observer = new MutationObserver(function () {
       initRecentChanges();
   });
   observer.observe(document.body, { childList: true, subtree: true });
   // 初回実行
   initRecentChanges();

});