User:Daniel Quinlan/Scripts/RangeHelper.js: Difference between revisions

Content deleted Content added
remove Twinkle menu items last
fetch user talk pages without using usercontribs API
Line 284:
// display talk pages for IP range
async function displayRangeTalk(ip) {
async function getUserTalkPages(ip) {
const url = `/wiki/Special:Contributions/${ip}`;
const userTalk = new Set();
const abortController = new AbortController();
try {
const html = await fetch(url, { signal: abortController.signal }).then(res => res.text());
const parser = new DOMParser();
const doc = parser.parseFromString(html, 'text/html');
const talkLinks = doc.querySelectorAll('a.mw-usertoollinks-talk:not(.new)');
for (const link of talkLinks) {
const title = link.title;
if (title) userTalk.add(title);
}
} catch (error) {
console.error('Error fetching usertalk pages:', error);
}
return userTalk;
});
function timeAgo(timestamp) {
const delta = (Date.now() - new Date(timestamp)) / 1000;
Line 338 ⟶ 356:
blockUser.href = `/wiki/Special:Block/${ip}`;
}
const responseuserTalk = await api.getgetUserTalkPages({ip);
if (!ipsuserTalk.lengthsize) {
action: 'query',
list: 'usercontribs',
uciprange: `${ip}`,
uclimit: 100,
format: 'json'
});
const ips = [];
for (const contrib of response.query.usercontribs) {
const contribIP = IPAddress.from(contrib.user);
if (contribIP) {
ipListAdd(ips, contribIP);
}
}
if (!ips.length) {
const noContributionsMessage = document.createElement('p');
noContributionsMessage.innerHTML = '<span style="color:red;">No contributionsuser talk pages found for recent contributions from this IP range.</span>';
contentContainer.appendChild(noContributionsMessage);
return;
}
const titles = ips.slice(0, 50).map(ip => `User talk:${ip}`);
const infoResponse = await api.get({
action: 'query',
titles: titlesArray.from(userTalk).slice(0, 50).join('|'),
prop: 'info',
format: 'json',
Line 375 ⟶ 379:
if (!pages.length) {
const noTalkPagesMessage = document.createElement('p');
noTalkPagesMessage.innerHTML = '<span style="color:red;">NoAn error occurred while retrieving timestamps for user talk pages found forin this IP range.</span>';
contentContainer.appendChild(noTalkPagesMessage);
return;