「MediaWiki:Common.js」の版間の差分

提供: トラwiki
軽量な最新更新読み込みスクリプトに刷新
スクリプトを元に戻す
タグ: 置換
 
1行目: 1行目:
/**
/* JSなし */
* MediaWiki:Common.js
*/
(function() {
  'use strict';
 
  function loadRecentUpdates() {
    var container = document.getElementById('tw-live-recent-updates');
    if (!container) return;
 
    fetch('/api.php?action=query&list=recentchanges&rcnamespace=0&rclimit=6&rcprop=title|timestamp|user&format=json')
      .then(function(res) { return res.json(); })
      .then(function(data) {
        if (!data || !data.query || !data.query.recentchanges) return;
        var rcs = data.query.recentchanges;
        if (rcs.length === 0) return;
 
        var html = '<ul class="tw-recent-feed">';
        for (var i = 0; i < rcs.length; i++) {
          var item = rcs[i];
          var titleEnc = encodeURIComponent(item.title);
          var dateObj = new Date(item.timestamp);
          var timeStr = formatTime(dateObj);
 
          html += '<li class="tw-recent-feed-item">';
          html += '  <span><a href="/index.php/' + titleEnc + '">' + escapeHtml(item.title) + '</a></span>';
          html += '  <span class="tw-recent-feed-time">' + timeStr + '</span>';
          html += '</li>';
        }
        html += '</ul>';
        container.innerHTML = html;
      })
      .catch(function(err) {
        console.warn('Recent changes load error:', err);
      });
  }
 
  function formatTime(d) {
    var m = (d.getMonth() + 1);
    var day = d.getDate();
    var h = ('0' + d.getHours()).slice(-2);
    var min = ('0' + d.getMinutes()).slice(-2);
    return m + '/' + day + ' ' + h + ':' + min;
  }
 
  function escapeHtml(s) {
    if (!s) return '';
    return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
  }
 
  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', loadRecentUpdates);
  } else {
    loadRecentUpdates();
  }
})();

2026年8月26日 (水) 15:55時点における最新版

/* JSなし */