MediaWiki:Common.js:修订间差异

Ztm0929留言 | 贡献
无编辑摘要
标签已被回退
Ztm0929留言 | 贡献
无编辑摘要
标签已被回退
第33行: 第33行:
});
});


mw.hook('wikipage.content').add(function($content) {
/* 更新页脚“最后编辑时间” —— 稳定版 */
  var $lastmod = $('#footer-info-lastmod'); // 页脚里的最后修改时间
(function () {
  if (!$lastmod.length) return;
  'use strict';
  var text = $lastmod.text();
 
 
  // 仅在普通查看页生效
  var match = text.match(/(\d{4})-(\d{2})-(\d{2}) (\d{2}:\d{2})/);
  if (mw.config.get('wgAction') !== 'view') return;
  if (match) {
 
     var y = +match[1], m = +match[2]-1, d = +match[3];
  var weekdays = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'];
     var editDate = new Date(y, m, d);
  function pad(n){ return n < 10 ? '0' + n : '' + n; }
  function daysDiff(a, b) {
    var A = new Date(a.getFullYear(), a.getMonth(), a.getDate());
    var B = new Date(b.getFullYear(), b.getMonth(), b.getDate());
    return Math.round((B - A) / 86400000);
  }
 
  function updateLastmod() {
    var ts = mw.config.get('wgRevisionTimestamp'); // 形如 '20250904022639'
    var $lastmod = $('#footer-info-lastmod');
    if (!$lastmod.length || !ts) return;
 
    var = +ts.slice(0, 4);
    var mo = +ts.slice(4, 6) - 1;
    var d = +ts.slice(6, 8);
    var hh = +ts.slice(8,10);
     var mm = +ts.slice(10,12);
     var editDate = new Date(y, mo, d, hh, mm);
     var now = new Date();
     var now = new Date();
   
 
     var diffDays = Math.floor((now - editDate) / 86400000);
     var diff = daysDiff(editDate, now);
     var rel = (diffDays === 0) ? '今天' : (diffDays === 1 ? '昨天' : diffDays + '天前');
     var rel = diff === 0 ? '今天' : (diff === 1 ? '昨天' : diff + '天前');
   
     var text = '此页面最后编辑于' + rel + ',' +
     var weekdays = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'];
              y + '年' + pad(mo + 1) + '' + pad(d) +
     var weekday = weekdays[editDate.getDay()];
              '日(' + weekdays[editDate.getDay()] + '' +
      
              pad(hh) + ':' + pad(mm);
    var newText = `此页面最后编辑于${rel},${y}年${match[2]}月${match[3]}日(${weekday}) ${match[4]}`;
 
     $lastmod.text(newText);
    $lastmod.text(text);
  }
 
  function schedule() {
    // 让位于皮肤的异步更新先完成,再改文案
    setTimeout(updateLastmod, 0);
    (window.requestIdleCallback || setTimeout)(updateLastmod, 200);
  }
 
  // 首次加载
  $(schedule);
 
  // 每次内容区加载(包括 AJAX 导航)
  mw.hook('wikipage.content').add(schedule);
 
  // 前进/后退
  window.addEventListener('popstate', schedule);
 
  // 监听 pushState(Vector 内部导航)
  (function patchPushState(){
    var ps = history.pushState;
     history.pushState = function() {
      var ret = ps.apply(this, arguments);
      schedule();
      return ret;
     };
  })();
 
  // 兜底:若皮肤异步替换了页脚节点,观察到后再更新
  var footer = document.getElementById('footer');
  if (footer && window.MutationObserver) {
    new MutationObserver(function(muts){
      for (var i = 0; i < muts.length; i++) {
        var added = muts[i].addedNodes;
        for (var j = 0; j < added.length; j++) {
          var n = added[j];
          if ((n.id && n.id === 'footer-info-lastmod') ||
              (n.querySelector && n.querySelector('#footer-info-lastmod'))) {
            schedule();
            return;
          }
        }
      }
     }).observe(footer, { childList: true, subtree: true });
   }
   }
});
})();