MediaWiki:Gadget-WantedPagesMainspace.js: Difference between revisions
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('..." |
No edit summary |
||
| Line 1: | Line 1: | ||
// Gadget: WantedPagesMainspace | // Gadget: WantedPagesMainspace | ||
// Filters a transcluded Special:WantedPages list down to mainspace-only, | // Filters a transcluded Special:WantedPages list down to mainspace-only, | ||
// with a | // with a blacklist of prefixes for admin/help/template/internal stuff. | ||
mw.loader.using(['mediawiki.Title', 'mediawiki.util'], function () { | mw.loader.using(['mediawiki.Title', 'mediawiki.util'], function () { | ||
// Only run on the specific portal (adjust if you want | // Only run on the specific portal (adjust if you want a different page) | ||
if (mw.config.get('wgPageName') !== 'Portal:WantedPages') { | if (mw.config.get('wgPageName') !== 'Portal:WantedPages') { | ||
return; | return; | ||
| Line 14: | Line 14: | ||
} | } | ||
// Prefixes we never want to show here | // Prefixes we never want to show here (text check) | ||
var bannedPrefixes = [ | var bannedPrefixes = [ | ||
'Help:', | 'Help:', | ||
| Line 20: | Line 20: | ||
'The Deep Tech Wiki:', | 'The Deep Tech Wiki:', | ||
'Wikipedia:', | 'Wikipedia:', | ||
'Wikipedia talk:', | |||
'WP:', | 'WP:', | ||
'Wp:', | 'Wp:', | ||
| Line 54: | Line 55: | ||
var links = container.querySelectorAll('a'); | var links = container.querySelectorAll('a'); | ||
var mainspaceLinks = []; | var mainspaceLinks = []; | ||
var seen = Object.create(null); // for deduping by title key | |||
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 the "222 links" type entries, which point to Special:WhatLinksHere | |||
if (href.indexOf('Special:WhatLinksHere') !== -1) { | |||
return; | return; | ||
} | } | ||
| Line 66: | Line 74: | ||
} | } | ||
// | // Determine the target title; prefer the title attribute if present | ||
var titleObj = mw.Title.newFromText( | var titleText = link.getAttribute('title') || text; | ||
var titleObj = mw.Title.newFromText(titleText); | |||
if (!titleObj) { | if (!titleObj) { | ||
return; | return; | ||
| Line 76: | Line 85: | ||
return; | return; | ||
} | } | ||
// Deduplicate based on normalized DB key | |||
var key = titleObj.getPrefixedDb(); | |||
if (seen[key]) { | |||
return; | |||
} | |||
seen[key] = true; | |||
// Passed all filters; keep a clone of the link | // Passed all filters; keep a clone of the link | ||