“MediaWiki:Common.js”的版本间差异
跳转到导航
跳转到搜索
| 第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; | ||
| − | |||
for (var i = 0; i < items.length; i++) { | for (var i = 0; i < items.length; i++) { | ||
| − | + | 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; | ||
} | } | ||
| − | // | + | // 后续逻辑(加载中、API请求、去重显示)保持不变 |
targetItem.textContent = ''; | targetItem.textContent = ''; | ||
targetItem.innerHTML = '最近更新:<br>加载中...'; | targetItem.innerHTML = '最近更新:<br>加载中...'; | ||
| − | |||
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'; | + | apiUrl += '&rclimit=10'; |
apiUrl += '&rcdaylimit=30'; | apiUrl += '&rcdaylimit=30'; | ||
apiUrl += '&format=json'; | apiUrl += '&format=json'; | ||
| − | |||
fetch(apiUrl) | fetch(apiUrl) | ||
.then(function(response) { | .then(function(response) { | ||
| 第53行: | 第63行: | ||
} | } | ||
| − | + | 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); | + | uniqueUpdates.push(page); |
| − | uniqueUpdates.push(page); | ||
| − | |||
| − | |||
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行: | ||
}); | }); | ||
| − | }, | + | }, 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完全加载