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

来自RMzas&SMS_Knowledge_Base_Wiki
跳转到导航 跳转到搜索
第1行: 第1行:
 
/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */
 
/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */
  
// 直接执行,用短延迟确保DOM已加载
+
// 显示最近更新的页面列表
 
setTimeout(function() {
 
setTimeout(function() {
   console.log('开始查找“最近更新:”');
+
   console.log('开始加载最近更新列表');
 
    
 
    
   // 定位侧边栏(MediaWiki默认侧边栏ID是mw-panel,内部列表项是li)
+
   // 1. 定位侧边栏中的“最近更新”容器
 
   var sidebar = document.getElementById('mw-panel');
 
   var sidebar = document.getElementById('mw-panel');
 
   if (!sidebar) {
 
   if (!sidebar) {
     console.log('未找到侧边栏(#mw-panel)');
+
     console.log('未找到侧边栏');
 
     return;
 
     return;
 
   }
 
   }
 
    
 
    
   // 获取侧边栏所有列表项
+
   var targetItem = null;
 
   var items = sidebar.getElementsByTagName('li');
 
   var items = sidebar.getElementsByTagName('li');
  console.log('侧边栏列表项总数:', items.length);
 
 
 
  // 遍历查找包含“最近更新:”的项
 
 
   for (var i = 0; i < items.length; i++) {
 
   for (var i = 0; i < items.length; i++) {
     var itemText = items[i].textContent; // 获取文本(保留原始空格)
+
     // 改回匹配“最近更新:”)
    console.log('第' + i + '个列表项文本:', itemText); // 打印每个项的文本,方便核对
+
    if (items[i].textContent.includes('最近更新:')) {
   
+
       targetItem = items[i];
    if (itemText.indexOf('最近更新:') !== -1) { // 用indexOf精准匹配
+
       break;
      console.log('找到目标项,开始替换文本');
 
       items[i].textContent = '123'; // 替换为123
 
       return; // 找到后退出
 
 
     }
 
     }
 
   }
 
   }
 
    
 
    
   // 遍历完仍未找到
+
  if (!targetItem) {
   console.log('未在侧边栏列表项中找到“最近更新:”');
+
    console.log('未找到目标容器');
}, 500); // 延迟500毫秒执行,确保DOM已渲染
+
    return;
 +
  }
 +
 
 +
   // 2. 清空容器,显示“加载中...”
 +
   targetItem.textContent = ''; // 清空原有内容
 +
  targetItem.innerHTML = '最近更新:<br>加载中...'; // 临时显示加载状态
 +
 
 +
  // 3. 调用MediaWiki API获取最近更新
 +
  var apiUrl = mw.util.wikiScript('api') + '?';
 +
  apiUrl += 'action=query';
 +
  apiUrl += '&list=recentchanges';
 +
  apiUrl += '&rcprop=title'; // 只获取页面标题
 +
  apiUrl += '&rclimit=5'; // 显示5条
 +
  apiUrl += '&rcdaylimit=30'; // 30天内的更新
 +
  apiUrl += '&format=json';
 +
 
 +
  // 4. 发送请求并处理数据
 +
  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;
 +
      }
 +
     
 +
      // 5. 生成链接列表并插入容器
 +
      var list = document.createElement('ul');
 +
      list.style.listStyle = 'none'; // 去除默认列表样式
 +
      list.style.paddingLeft = '10px'; // 缩进一点更美观
 +
      list.style.margin = '5px 0'; // 调整间距
 +
     
 +
      for (var i = 0; i < data.query.recentchanges.length; i++) {
 +
        var page = data.query.recentchanges[i];
 +
        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'; // 用MediaWiki默认链接蓝色(可选)
 +
       
 +
        listItem.appendChild(link);
 +
        list.appendChild(listItem);
 +
      }
 +
     
 +
      targetItem.appendChild(list);
 +
      console.log('最近更新列表加载完成');
 +
    })
 +
    .catch(function(error) {
 +
      console.error('加载失败:', error);
 +
      targetItem.innerHTML = '最近更新:<br>加载失败';
 +
    });
 +
 
 +
}, 500); // 延迟500毫秒,确保DOM加载完成

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

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

// 显示最近更新的页面列表
setTimeout(function() {
  console.log('开始加载最近更新列表');
  
  // 1. 定位侧边栏中的“最近更新”容器
  var sidebar = document.getElementById('mw-panel');
  if (!sidebar) {
    console.log('未找到侧边栏');
    return;
  }
  
  var targetItem = null;
  var items = sidebar.getElementsByTagName('li');
  for (var i = 0; i < items.length; i++) {
    // 改回匹配“最近更新:”)
    if (items[i].textContent.includes('最近更新:')) {
      targetItem = items[i];
      break;
    }
  }
  
  if (!targetItem) {
    console.log('未找到目标容器');
    return;
  }
  
  // 2. 清空容器,显示“加载中...”
  targetItem.textContent = ''; // 清空原有内容
  targetItem.innerHTML = '最近更新:<br>加载中...'; // 临时显示加载状态
  
  // 3. 调用MediaWiki API获取最近更新
  var apiUrl = mw.util.wikiScript('api') + '?';
  apiUrl += 'action=query';
  apiUrl += '&list=recentchanges';
  apiUrl += '&rcprop=title'; // 只获取页面标题
  apiUrl += '&rclimit=5'; // 显示5条
  apiUrl += '&rcdaylimit=30'; // 30天内的更新
  apiUrl += '&format=json';
  
  // 4. 发送请求并处理数据
  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;
      }
      
      // 5. 生成链接列表并插入容器
      var list = document.createElement('ul');
      list.style.listStyle = 'none'; // 去除默认列表样式
      list.style.paddingLeft = '10px'; // 缩进一点更美观
      list.style.margin = '5px 0'; // 调整间距
      
      for (var i = 0; i < data.query.recentchanges.length; i++) {
        var page = data.query.recentchanges[i];
        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'; // 用MediaWiki默认链接蓝色(可选)
        
        listItem.appendChild(link);
        list.appendChild(listItem);
      }
      
      targetItem.appendChild(list);
      console.log('最近更新列表加载完成');
    })
    .catch(function(error) {
      console.error('加载失败:', error);
      targetItem.innerHTML = '最近更新:<br>加载失败';
    });
  
}, 500); // 延迟500毫秒,确保DOM加载完成