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

来自RMzas&SMS_Knowledge_Base_Wiki
跳转到导航 跳转到搜索
第2行: 第2行:
  
 
// 显示最近更新的页面列表(去重版)
 
// 显示最近更新的页面列表(去重版)
 +
// 显示最近更新的页面列表(增强容器定位)
 
setTimeout(function() {
 
setTimeout(function() {
   console.log('开始加载最近更新列表(去重版)');
+
   console.log('开始加载最近更新列表(增强定位版)');
 
    
 
    
   // 1. 定位侧边栏中的“最近更新”容器
+
   // 1. 定位侧边栏
 
   var sidebar = document.getElementById('mw-panel');
 
   var sidebar = document.getElementById('mw-panel');
 
   if (!sidebar) {
 
   if (!sidebar) {
     console.log('未找到侧边栏');
+
     console.log('未找到侧边栏(#mw-panel)');
 
     return;
 
     return;
 
   }
 
   }
 
    
 
    
 +
  // 2. 获取所有列表项并打印文本(方便核对)
 +
  var items = sidebar.getElementsByTagName('li');
 +
  console.log('侧边栏列表项总数:', items.length);
 +
  for (var i = 0; i < items.length; i++) {
 +
    var itemText = items[i].textContent.trim(); // 去除前后空格
 +
    console.log('第' + i + '个列表项文本:[' + itemText + ']'); // 用[]包裹,清晰显示空格
 +
  }
 +
 
 +
  // 3. 灵活匹配容器(忽略标点和空格差异)
 
   var targetItem = null;
 
   var targetItem = null;
  var items = sidebar.getElementsByTagName('li');
 
 
   for (var i = 0; i < items.length; i++) {
 
   for (var i = 0; i < items.length; i++) {
     if (items[i].textContent.includes('最近更新:')) {
+
     var itemText = items[i].textContent.trim();
 +
    // 匹配包含“最近更新”四个字的项(不管后面是什么标点/空格)
 +
    if (itemText.indexOf('最近更新') !== -1) {
 
       targetItem = items[i];
 
       targetItem = items[i];
 +
      console.log('找到目标容器,文本为:[' + itemText + ']');
 
       break;
 
       break;
 
     }
 
     }
第22行: 第34行:
 
    
 
    
 
   if (!targetItem) {
 
   if (!targetItem) {
     console.log('未找到目标容器');
+
     console.log('未找到包含“最近更新”的列表项,请检查侧边栏文本');
 
     return;
 
     return;
 
   }
 
   }
 
    
 
    
   // 2. 清空容器,显示“加载中...”
+
   // 后续逻辑(加载中、API请求、去重显示)保持不变
 
   targetItem.textContent = '';
 
   targetItem.textContent = '';
 
   targetItem.innerHTML = '最近更新:<br>加载中...';
 
   targetItem.innerHTML = '最近更新:<br>加载中...';
 
    
 
    
  // 3. 调用API(适当增大rclimit,避免去重后数量不足)
 
 
   var apiUrl = mw.util.wikiScript('api') + '?';
 
   var apiUrl = mw.util.wikiScript('api') + '?';
 
   apiUrl += 'action=query';
 
   apiUrl += 'action=query';
 
   apiUrl += '&list=recentchanges';
 
   apiUrl += '&list=recentchanges';
 
   apiUrl += '&rcprop=title';
 
   apiUrl += '&rcprop=title';
   apiUrl += '&rclimit=10'; // 先获取10条(去重后可能少于10)
+
   apiUrl += '&rclimit=10';
 
   apiUrl += '&rcdaylimit=30';
 
   apiUrl += '&rcdaylimit=30';
 
   apiUrl += '&format=json';
 
   apiUrl += '&format=json';
 
    
 
    
  // 4. 发送请求并处理数据(添加去重逻辑)
 
 
   fetch(apiUrl)
 
   fetch(apiUrl)
 
     .then(function(response) {
 
     .then(function(response) {
第53行: 第63行:
 
       }
 
       }
 
        
 
        
      // 去重逻辑:用Set记录已出现的标题,只保留首次出现的(即最新的)
+
       var seenTitles = new Set();
       var seenTitles = new Set(); // 存储已出现的标题
+
       var uniqueUpdates = [];
       var uniqueUpdates = []; // 去重后的结果
 
     
 
 
       for (var i = 0; i < data.query.recentchanges.length; i++) {
 
       for (var i = 0; i < data.query.recentchanges.length; i++) {
 
         var page = data.query.recentchanges[i];
 
         var page = data.query.recentchanges[i];
 
         var title = page.title;
 
         var title = page.title;
       
+
         if (!seenTitles.has(title)) {
         if (!seenTitles.has(title)) { // 如果标题未出现过
+
           seenTitles.add(title);
           seenTitles.add(title); // 记录到Set
+
           uniqueUpdates.push(page);
           uniqueUpdates.push(page); // 加入去重结果
 
         
 
          // 最多保留5个不重复的页面(可调整)
 
 
           if (uniqueUpdates.length >= 5) break;
 
           if (uniqueUpdates.length >= 5) break;
 
         }
 
         }
 
       }
 
       }
 
        
 
        
      // 生成去重后的列表
 
 
       var list = document.createElement('ul');
 
       var list = document.createElement('ul');
 
       list.style.listStyle = 'none';
 
       list.style.listStyle = 'none';
第99行: 第103行:
 
     });
 
     });
 
    
 
    
}, 500);
+
}, 1000); // 延长延迟到1秒,确保DOM完全加载

2025年10月8日 (三) 18:21:10的版本

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

// 显示最近更新的页面列表(去重版)
// 显示最近更新的页面列表(增强容器定位)
setTimeout(function() {
  console.log('开始加载最近更新列表(增强定位版)');
  
  // 1. 定位侧边栏
  var sidebar = document.getElementById('mw-panel');
  if (!sidebar) {
    console.log('未找到侧边栏(#mw-panel)');
    return;
  }
  
  // 2. 获取所有列表项并打印文本(方便核对)
  var items = sidebar.getElementsByTagName('li');
  console.log('侧边栏列表项总数:', items.length);
  for (var i = 0; i < items.length; i++) {
    var itemText = items[i].textContent.trim(); // 去除前后空格
    console.log('第' + i + '个列表项文本:[' + itemText + ']'); // 用[]包裹,清晰显示空格
  }
  
  // 3. 灵活匹配容器(忽略标点和空格差异)
  var targetItem = null;
  for (var i = 0; i < items.length; i++) {
    var itemText = items[i].textContent.trim();
    // 匹配包含“最近更新”四个字的项(不管后面是什么标点/空格)
    if (itemText.indexOf('最近更新') !== -1) {
      targetItem = items[i];
      console.log('找到目标容器,文本为:[' + itemText + ']');
      break;
    }
  }
  
  if (!targetItem) {
    console.log('未找到包含“最近更新”的列表项,请检查侧边栏文本');
    return;
  }
  
  // 后续逻辑(加载中、API请求、去重显示)保持不变
  targetItem.textContent = '';
  targetItem.innerHTML = '最近更新:<br>加载中...';
  
  var apiUrl = mw.util.wikiScript('api') + '?';
  apiUrl += 'action=query';
  apiUrl += '&list=recentchanges';
  apiUrl += '&rcprop=title';
  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);
          if (uniqueUpdates.length >= 5) break;
        }
      }
      
      var list = document.createElement('ul');
      list.style.listStyle = 'none';
      list.style.paddingLeft = '10px';
      list.style.margin = '5px 0';
      
      if (uniqueUpdates.length === 0) {
        targetItem.innerHTML += '暂无更新';
        return;
      }
      
      uniqueUpdates.forEach(function(page) {
        var listItem = document.createElement('li');
        var link = document.createElement('a');
        link.href = mw.util.getUrl(page.title);
        link.textContent = page.title;
        link.style.color = '#0645ad';
        listItem.appendChild(link);
        list.appendChild(listItem);
      });
      
      targetItem.appendChild(list);
      console.log('去重后显示 ' + uniqueUpdates.length + ' 个页面');
    })
    .catch(function(error) {
      console.error('加载失败:', error);
      targetItem.innerHTML = '最近更新:<br>加载失败';
    });
  
}, 1000); // 延长延迟到1秒,确保DOM完全加载