Usuaria:Lana del Reno/links.js
Apariencia
(Redirigido desde «Usuario:Milkout/links.js»)
Nota: Después de guardar, debes refrescar la caché de tu navegador para ver los cambios. Internet Explorer: mantén presionada Ctrl mientras pulsas Actualizar. Firefox: mientras presionas Mayús pulsas el botón Actualizar, (o presiona Ctrl-Shift-R). Los usuarios de Google Chrome y Safari pueden simplemente pulsar el botón Recargar. Para más detalles e instrucciones acerca de otros exploradores, véase Ayuda:Cómo limpiar la caché.
//<nowiki>
const dateLinkRemover = (() => {
const skin = mw.config.get('skin');
// Estos deben ser cargados para asegurar que todo funciona correctamente, la función de devolución de llamada que carga la secuencia de comandos sólo se llamará una vez DOM se ha cargado
const loadDependencies = (callback) => {
mw.loader.using('mediawiki.api', 'mediawiki.util', 'mediawiki.user');
if (document.readyState !== 'loading') {
callback();
} else {
document.addEventListener('DOMContentLoaded', callback());
}
}
// Función que obtiene el contenido de una página
function getContent(pageName) {
let params = {
action: 'query',
prop: 'revisions',
titles: pageName,
rvprop: 'content',
rvslots: 'main',
formatversion: '2',
format: 'json'
};
let apiPromise = new mw.Api().get(params).then(
((data) => {
return data.query.pages[0].revisions[0].slots?.main?.content
})
);
return apiPromise;
}
function makeRegexGlobal(expression) {
return new RegExp(expression, "gi");
}
// Regexes variables
let regex = /\[\[\s*((?:(?:0?[1-9]|[12]\d|3[01])º?\sde\s)?(?:(?:enero|febrero|marzo|abril|mayo|junio|julio|agosto|sep?tiembre|octubre|noviembre|diciembre)(?:\sde\s[1-9]\d{0,3})?)|(?:lunes|martes|miércoles|jueves|viernes|sábado|domingo)|(?:(?:años?|década de)\s)?(?:[1-9]\d{0,3}|los\s[1-9]0|(?:[1-2]\d{0,2}0s|[1-9]0s)|siglo(?:\s| )*\w+|[IVXLCDM0-9]+º?\smilenio)(?:(?:\s| )*(?:a|d)\.(?:\s| )*C\.)?)\s*\]\]/i;
let pipeRegex = /\[\[\s*((?:(?:0?[1-9]|[12]\d|3[01])º?\sde\s)?(?:(?:enero|febrero|marzo|abril|mayo|junio|julio|agosto|sep?tiembre|octubre|noviembre|diciembre)(?:\sde\s[1-9]\d{0,3})?)|(?:lunes|martes|miércoles|jueves|viernes|sábado|domingo)|(?:(?:años?|década de)\s)?(?:[1-9]\d{0,3}|los\s[1-9]0|(?:[1-2]\d{0,2}0s|[1-9]0s)|siglo(?:\s| )*\w+|[IVXLCDM0-9]+º?\smilenio)(?:(?:\s| )*(?:a|d)\.(?:\s| )*C\.)?)(?:\s*\|([^\]]*))\s*\]\]/i;
let templateRegex = /(\{\{(?:siglo|(?:Julgreg)?fecha)[^\}]+)(?:\|1|\|Link\s*=\s*(?:\"true\"|(?:s[ií]|pt)))\s*(\}\})/i;
function textReplacer(articleText, applyRegex, applyPipeRegex, applyTemplateRegex) {
let newText = articleText;
if (applyRegex) {
regex = makeRegexGlobal(regex);
newText = newText.replace(regex, "$1");
}
if (applyPipeRegex) {
pipeRegex = makeRegexGlobal(pipeRegex);
newText = newText.replace(pipeRegex, "$2");
}
if (applyTemplateRegex) {
templateRegex = makeRegexGlobal(templateRegex);
newText = newText.replace(templateRegex, "$1$2");
}
return newText;
}
// Función principal del script
const initializeScript = () => {
// Buscar el nombre de la página actual y asignarlo a una variable
const page = mw.config.get('wgPageName');
getContent(page).then((content) => {
const useRegex = regex.test(content);
const usePipeRegex = pipeRegex.test(content);
const useTemplateRegex = templateRegex.test(content);
if (useRegex || usePipeRegex || useTemplateRegex) {
console.log("found at least one date with brackets");
// Esto añadirá el botón para eliminar los corchetes de las fechas si encuentra tal ocurrencia en un artículo
const portletLink = mw.util.addPortletLink('p-views', '#', 'WP:ENLACESFECHAS', 'enlaces-fechas', 'Links have been detected on dates, click here to remove them.');
if (skin == 'minerva') {
const icon = document.getElementsByClassName('minerva-icon minerva-icon-portletlink-enlaces-fechas mw-ui-icon-portletlink-enlaces-fechas');
icon[0].style.backgroundImage = "url(https://upload.wikimedia.org/wikipedia/commons/2/2c/Tabler-icons_letter-f.svg)";
}
// Almacenemos las evaluaciones en constantes mientras el usuario se toma su tiempo para pulsar el botón
if (portletLink) {
portletLink.addEventListener("click", () => {
// Llamar a la API mw para realizar la edición
new mw.Api().edit(
page,
(revision) => {
return {
text: textReplacer(revision.content, useRegex, usePipeRegex, useTemplateRegex),
summary: '[[WP:ENLACESFECHAS]] + mejoras cosméticas',
minor: false
}
}
// Reload the page
).then(() => {
setTimeout(() => {
location.reload();
}, 500);
// Detección de errores de ejecución
}).catch((error) => {
alert(`Se ha producido un error: ${error}`);
})
})
}
}
})
}
(async () => {
// El script no debería cargarse si el usuario no está en el espacio de nombres correcto
const namespace = await mw.config.get('wgNamespaceNumber');
if (namespace == 0 || namespace == 104 || namespace == 2) {
loadDependencies(initializeScript);
}
})();
})();
//</nowiki>