Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
// ==UserScript==
// @name RNLI Medal Link Fixer
// @namespace http://en.wikipedia.org/
// @version 1.4
// @description Update RNLI medal wikilinks to specific pages
// @author Aluxosm (using ChatGPT)
// @match https://en.wikipedia.org/wiki/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
// Add the button next to the edit tab
mw.util.addPortletLink(
'p-cactions', // Portlet (action menu)
'#', // Link href
'Fix RNLI Medals', // Button text
'ca-fix-rnli-medals' // ID
);
// Define the replacements
const replacements = [
{
regex: /\[\[Awards of the Royal National Lifeboat Institution#Medal of the RNLI\|([^|\]]*gold[^|\]]*)\]\]/gi,
replacement: '[[RNLI Gold Medal|$1]]'
},
{
regex: /\[\[Awards of the Royal National Lifeboat Institution#Medal of the RNLI\|([^|\]]*silver[^|\]]*)\]\]/gi,
replacement: '[[RNLI Silver Medal|$1]]'
},
{
regex: /\[\[Awards of the Royal National Lifeboat Institution#Medal of the RNLI\|([^|\]]*bronze[^|\]]*)\]\]/gi,
replacement: '[[RNLI Bronze Medal|$1]]'
}
];
// Attach a click event to the button
document.getElementById('ca-fix-rnli-medals').addEventListener('click', function(e) {
e.preventDefault();
// Open edit mode
const editUrl = mw.util.getUrl(mw.config.get('wgPageName'), { action: 'edit' });
fetch(editUrl).then(response => response.text()).then(html => {
// Extract raw content without parsing to HTML
const match = html.match(/<textarea[^>]*id="wpTextbox1"[^>]*>([\s\S]*?)<\/textarea>/);
if (match && match[1]) {
// Decode the content safely
let content = match[1];
// Perform replacements, only modifying wikilinks
replacements.forEach(({ regex, replacement }) => {
content = content.replace(regex, replacement);
});
// Pre-fill the edit box and summary
const editForm = document.createElement('form');
editForm.method = 'POST';
editForm.action = editUrl;
editForm.innerHTML = `
<textarea name="wpTextbox1">${content}</textarea>
<input type="hidden" name="wpSummary" value="Updated RNLI medal links to direct pages." />
<input type="hidden" name="action" value="submit" />
`;
// Submit the edit form to show changes
document.body.appendChild(editForm);
editForm.submit();
} else {
alert('Unable to access the edit box!');
}
});
});
})();