MediaWiki:Gadget-WantedPagesMainspace.js: Difference between revisions
Appearance
Created page with "// Gadget: WantedPagesMainspace // Filters a transcluded Special:WantedPages list down to mainspace-only, // with a simple blacklist of prefixes for admin/help/template/internal stuff. mw.loader.using(['mediawiki.Title', 'mediawiki.util'], function () { // Only run on the specific portal (adjust if you want Special:WantedPages instead) if (mw.config.get('wgPageName') !== 'Portal:WantedPages') { return; } var container = document.getElementById('..." |
Tag: Undo |
||
| (3 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
// Gadget: WantedPagesMainspace | // Gadget: WantedPagesMainspace | ||
mw.loader.using(['mediawiki.Title', 'mediawiki.util'], function () { | mw.loader.using(['mediawiki.Title', 'mediawiki.util'], function () { | ||
if (mw.config.get('wgPageName') !== 'Portal:WantedPages') { | if (mw.config.get('wgPageName') !== 'Portal:WantedPages') { | ||
return; | return; | ||
| Line 14: | Line 10: | ||
} | } | ||
var bannedPrefixes = [ | var bannedPrefixes = [ | ||
'Help:', | 'Help:', | ||
| Line 20: | Line 15: | ||
'The Deep Tech Wiki:', | 'The Deep Tech Wiki:', | ||
'Wikipedia:', | 'Wikipedia:', | ||
'Wikipedia talk:', | |||
'WP:', | 'WP:', | ||
'Wp:', | 'Wp:', | ||
| Line 33: | Line 29: | ||
function isBannedPrefix(text) { | function isBannedPrefix(text) { | ||
return bannedPrefixes.some(function (p) { | |||
return text.startsWith(p); | |||
}); | |||
} | |||
} | } | ||
var bannedExactTitles = []; | |||
var bannedExactTitles = [ | |||
function isBannedExact(text) { | function isBannedExact(text) { | ||
| Line 51: | Line 40: | ||
} | } | ||
var links = container.querySelectorAll('a'); | var links = container.querySelectorAll('a'); | ||
var | var seen = Object.create(null); | ||
var cleanedItems = []; | |||
links.forEach(function (link) { | links.forEach(function (link) { | ||
var href = link.getAttribute('href') || ''; | |||
var text = (link.textContent || '').trim(); | var text = (link.textContent || '').trim(); | ||
if (!text) | if (!text) return; | ||
// | // Skip "### links" (they always point to Special:WhatLinksHere) | ||
if ( | if (href.includes('Special:WhatLinksHere')) return; | ||
if (isBannedPrefix(text) || isBannedExact(text)) return; | |||
var titleText = link.getAttribute('title') || text; | |||
var titleObj = mw.Title.newFromText(titleText); | |||
if (!titleObj) return; | |||
if (titleObj.getNamespaceId() !== 0) return; | |||
var key = titleObj.getPrefixedDb(); | |||
if (seen[key]) return; | |||
seen[key] = true; | |||
cleanedItems.push(link.cloneNode(true)); | |||
}); | }); | ||
// Build a new | // Build a new <ul> only with real content | ||
var ul = document.createElement('ul'); | var ul = document.createElement('ul'); | ||
cleanedItems.forEach(function (l) { | |||
var li = document.createElement('li'); | var li = document.createElement('li'); | ||
li.appendChild(l); | li.appendChild(l); | ||
| Line 89: | Line 76: | ||
}); | }); | ||
// Replace | // Replace old messy HTML | ||
container.innerHTML = ''; | container.innerHTML = ''; | ||
container.appendChild(ul); | container.appendChild(ul); | ||
}); | }); | ||
Latest revision as of 09:50, 16 November 2025
// Gadget: WantedPagesMainspace
mw.loader.using(['mediawiki.Title', 'mediawiki.util'], function () {
if (mw.config.get('wgPageName') !== 'Portal:WantedPages') {
return;
}
var container = document.getElementById('wantedpages-mainonly');
if (!container) {
return;
}
var bannedPrefixes = [
'Help:',
'Template:',
'The Deep Tech Wiki:',
'Wikipedia:',
'Wikipedia talk:',
'WP:',
'Wp:',
'Project:',
'Category:',
'File:',
'Module:',
'MediaWiki:',
'User:',
'User talk:',
'Talk:'
];
function isBannedPrefix(text) {
return bannedPrefixes.some(function (p) {
return text.startsWith(p);
});
}
var bannedExactTitles = [];
function isBannedExact(text) {
return bannedExactTitles.indexOf(text) !== -1;
}
var links = container.querySelectorAll('a');
var seen = Object.create(null);
var cleanedItems = [];
links.forEach(function (link) {
var href = link.getAttribute('href') || '';
var text = (link.textContent || '').trim();
if (!text) return;
// Skip "### links" (they always point to Special:WhatLinksHere)
if (href.includes('Special:WhatLinksHere')) return;
if (isBannedPrefix(text) || isBannedExact(text)) return;
var titleText = link.getAttribute('title') || text;
var titleObj = mw.Title.newFromText(titleText);
if (!titleObj) return;
if (titleObj.getNamespaceId() !== 0) return;
var key = titleObj.getPrefixedDb();
if (seen[key]) return;
seen[key] = true;
cleanedItems.push(link.cloneNode(true));
});
// Build a new <ul> only with real content
var ul = document.createElement('ul');
cleanedItems.forEach(function (l) {
var li = document.createElement('li');
li.appendChild(l);
ul.appendChild(li);
});
// Replace old messy HTML
container.innerHTML = '';
container.appendChild(ul);
});