“MediaWiki:Common.js”的版本间差异

来自RMzas&SMS_Knowledge_Base_Wiki
跳转到导航 跳转到搜索
(导入1个版本)
 
(未显示同一用户的11个中间版本)
第1行: 第1行:
 
/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */
 
/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */
  
 
+
// 显示最近更新的页面列表(带时间)
// 显示最近更新页面(无复杂运算符,纯基础语法)
+
setTimeout(function() {
function loadRecentChanges() {
+
   //console.log('开始加载最近更新页面列表');
   // 查找容器
+
    
   var container = null;
+
  var sidebar = document.getElementById('mw-panel');
var sidebarItems = document.querySelectorAll('#mw-panel li a');
+
   if (!sidebar) {
for (var i = 0; i < sidebarItems.length; i++) {
+
    console.log('未找到侧边栏');
   if (sidebarItems[i].textContent.includes('最近更新:')) {
+
     return;
  console.log('找到了“最近更新”列表项');
 
     container = sidebarItems[i].parentNode; // 获取列表项作为容器
 
    break;
 
 
   }
 
   }
}
+
 
if (!container) {
+
  var items = sidebar.getElementsByTagName('li');
  console.log('未找到“最近更新”列表项');
+
  var targetItem = null;
  return;
+
  for (var i = 0; i < items.length; i++) {
}
+
    if (items[i].textContent.indexOf('最近更新') !== -1) {
 
+
      targetItem = items[i];
   // 直接拼接完整API地址(不使用+=
+
      break;
   var apiParams = 'action=query&list=recentchanges&rcprop=title&rclimit=5&rcdaylimit=7&format=json';
+
    }
   var apiUrl = mw.util.wikiScript('api') + '?' + apiParams;
+
  }
 
+
 
   // 原生XMLHttpRequest(避免fetch可能的兼容问题)
+
  if (!targetItem) {
   var xhr = new XMLHttpRequest();
+
    console.log('未找到目标容器');
   xhr.open('GET', apiUrl, true);
+
    return;
   xhr.onreadystatechange = function() {
+
  }
    if (xhr.readyState === 4) {
+
 
       if (xhr.status === 200) {
+
   targetItem.textContent = '';
        try {
+
   targetItem.innerHTML = '最近更新:<br>加载中...';
          var data = JSON.parse(xhr.responseText);
+
 
          if (data.query && data.query.recentchanges && data.query.recentchanges.length > 0) {
+
  // API请求添加timestamp参数,获取更新时间
            var list = document.createElement('ul');
+
   var apiUrl = mw.util.wikiScript('api') + '?';
            list.style.listStyle = 'none';
+
  apiUrl += 'action=query';
            list.style.paddingLeft = '10px';
+
  apiUrl += '&list=recentchanges';
 
+
   apiUrl += '&rcprop=title|timestamp'; // 同时获取标题和时间戳
            for (var i = 0; i < data.query.recentchanges.length; i++) {
+
   apiUrl += '&rclimit=10';
              var rc = data.query.recentchanges[i];
+
   apiUrl += '&rcdaylimit=30';
              var item = document.createElement('li');
+
  apiUrl += '&format=json';
              var link = document.createElement('a');
+
    
              link.href = mw.util.getUrl(rc.title);
+
  fetch(apiUrl)
              link.textContent = rc.title;
+
    .then(function(response) {
              item.appendChild(link);
+
      if (!response.ok) throw new Error('API请求失败:' + response.status);
              list.appendChild(item);
+
       return response.json();
            }
+
    })
            container.innerHTML = '';
+
    .then(function(data) {
            container.appendChild(list);
+
      targetItem.innerHTML = '最近更新:<br>';
           } else {
+
     
            container.textContent = '暂无更新';
+
      if (!data.query || !data.query.recentchanges || data.query.recentchanges.length === 0) {
          }
+
        targetItem.innerHTML += '暂无更新';
        } catch (e) {
+
        return;
          container.textContent = '解析失败';
+
      }
          console.error('JSON解析错误:', e);
+
     
 +
      var seenTitles = new Set();
 +
      var uniqueUpdates = [];
 +
      for (var i = 0; i < data.query.recentchanges.length; i++) {
 +
        var page = data.query.recentchanges[i];
 +
        var title = page.title;
 +
        if (!seenTitles.has(title)) {
 +
          seenTitles.add(title);
 +
          uniqueUpdates.push(page); // 包含title和timestamp
 +
           if (uniqueUpdates.length >= 6) break;
 
         }
 
         }
      } else {
 
        container.textContent = '请求失败';
 
        console.error('HTTP错误:', xhr.status);
 
 
       }
 
       }
     }
+
     
   };
+
      var list = document.createElement('ul');
  xhr.send();
+
      list.style.listStyle = 'none';
}
+
      list.style.paddingLeft = '10px';
 
+
      list.style.margin = '5px 0';
// 页面加载完成后执行
+
     
if (window.addEventListener) {
+
      uniqueUpdates.forEach(function(page) {
  window.addEventListener('load', loadRecentChanges, false);
+
        // 处理时间戳:转换为本地时间(年-月-日 时:分)
} else if (window.attachEvent) { // 兼容IE旧版本
+
        var date = new Date(page.timestamp);
  window.attachEvent('onload', loadRecentChanges);
+
        var timeStr = date.toLocaleString('zh-CN', {
}
+
          month: '2-digit',    // 月份(2位)
 +
          day: '2-digit',      // 日期(2位)
 +
          hour: '2-digit',     // 小时(2位)
 +
          minute: '2-digit',  // 分钟(2位)
 +
          second: '2-digit',   // 新增:显示秒(2位)
 +
          hour12: false        // 强制24小时制(避免上午/下午)
 +
        }).replace(',', '');   // 移除可能的逗号分隔符
 +
       
 +
        var listItem = document.createElement('li');
 +
        listItem.style.margin = '3px 0'; // 每条间距
 +
       
 +
        var link = document.createElement('a');
 +
        link.href = mw.util.getUrl(page.title);
 +
        link.textContent = page.title;
 +
        link.style.color = '#0645ad';
 +
       
 +
        // 时间显示(灰色小字)
 +
        var timeSpan = document.createElement('span');
 +
        timeSpan.textContent = ' (' + timeStr + ')';
 +
        timeSpan.style.color = '#666'; // 灰色
 +
        timeSpan.style.fontSize = '0.8em'; // 小字
 +
        timeSpan.style.marginLeft = '5px';
 +
       
 +
        listItem.appendChild(link);
 +
        listItem.appendChild(timeSpan);
 +
        list.appendChild(listItem);
 +
      });
 +
     
 +
      targetItem.appendChild(list);
 +
    })
 +
    .catch(function(error) {
 +
      console.error('加载失败:', error);
 +
      targetItem.innerHTML = '最近更新:<br>加载失败';
 +
    });
 +
 
 +
}, 1000);

2025年10月9日 (四) 03:08:54的最新版本

/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */

// 显示最近更新的页面列表(带时间)
setTimeout(function() {
  //console.log('开始加载最近更新页面列表');
  
  var sidebar = document.getElementById('mw-panel');
  if (!sidebar) {
    console.log('未找到侧边栏');
    return;
  }
  
  var items = sidebar.getElementsByTagName('li');
  var targetItem = null;
  for (var i = 0; i < items.length; i++) {
    if (items[i].textContent.indexOf('最近更新') !== -1) {
      targetItem = items[i];
      break;
    }
  }
  
  if (!targetItem) {
    console.log('未找到目标容器');
    return;
  }
  
  targetItem.textContent = '';
  targetItem.innerHTML = '最近更新:<br>加载中...';
  
  // API请求添加timestamp参数,获取更新时间
  var apiUrl = mw.util.wikiScript('api') + '?';
  apiUrl += 'action=query';
  apiUrl += '&list=recentchanges';
  apiUrl += '&rcprop=title|timestamp'; // 同时获取标题和时间戳
  apiUrl += '&rclimit=10';
  apiUrl += '&rcdaylimit=30';
  apiUrl += '&format=json';
  
  fetch(apiUrl)
    .then(function(response) {
      if (!response.ok) throw new Error('API请求失败:' + response.status);
      return response.json();
    })
    .then(function(data) {
      targetItem.innerHTML = '最近更新:<br>';
      
      if (!data.query || !data.query.recentchanges || data.query.recentchanges.length === 0) {
        targetItem.innerHTML += '暂无更新';
        return;
      }
      
      var seenTitles = new Set();
      var uniqueUpdates = [];
      for (var i = 0; i < data.query.recentchanges.length; i++) {
        var page = data.query.recentchanges[i];
        var title = page.title;
        if (!seenTitles.has(title)) {
          seenTitles.add(title);
          uniqueUpdates.push(page); // 包含title和timestamp
          if (uniqueUpdates.length >= 6) break;
        }
      }
      
      var list = document.createElement('ul');
      list.style.listStyle = 'none';
      list.style.paddingLeft = '10px';
      list.style.margin = '5px 0';
      
      uniqueUpdates.forEach(function(page) {
        // 处理时间戳:转换为本地时间(年-月-日 时:分)
        var date = new Date(page.timestamp);
        var timeStr = date.toLocaleString('zh-CN', {
          month: '2-digit',    // 月份(2位)
          day: '2-digit',      // 日期(2位)
          hour: '2-digit',     // 小时(2位)
          minute: '2-digit',   // 分钟(2位)
          second: '2-digit',   // 新增:显示秒(2位)
          hour12: false        // 强制24小时制(避免上午/下午)
        }).replace(',', '');   // 移除可能的逗号分隔符
        
        var listItem = document.createElement('li');
        listItem.style.margin = '3px 0'; // 每条间距
        
        var link = document.createElement('a');
        link.href = mw.util.getUrl(page.title);
        link.textContent = page.title;
        link.style.color = '#0645ad';
        
        // 时间显示(灰色小字)
        var timeSpan = document.createElement('span');
        timeSpan.textContent = ' (' + timeStr + ')';
        timeSpan.style.color = '#666'; // 灰色
        timeSpan.style.fontSize = '0.8em'; // 小字
        timeSpan.style.marginLeft = '5px';
        
        listItem.appendChild(link);
        listItem.appendChild(timeSpan);
        list.appendChild(listItem);
      });
      
      targetItem.appendChild(list);
    })
    .catch(function(error) {
      console.error('加载失败:', error);
      targetItem.innerHTML = '最近更新:<br>加载失败';
    });
  
}, 1000);