MediaWiki:Minerva.js
Note : après avoir publié vos modifications, il se peut que vous deviez forcer le rechargement complet du cache de votre navigateur pour voir les changements.
- Firefox / Safari : maintenez la touche Maj (Shift) en cliquant sur le bouton Actualiser ou appuyez sur Ctrl + F5 ou Ctrl + R (⌘ + R sur un Mac).
- Google Chrome : appuyez sur Ctrl + Maj + R (⌘ + Shift + R sur un Mac).
- Edge : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl + F5.
/* Chargé sur le site mobile */ (function () { 'use strict'; var MENU_SELECTOR = 'ul#p-navigation'; var ENHANCED_ATTR = 'data-enhanced-menu'; function addMenuItem(parent, itemId, linkText, url, imageUrl, insertAtStart) { if (!parent || document.getElementById(itemId)) return; var li = document.createElement('li'); li.id = itemId; li.classList.add('toggle-list-item'); // <-- classe demandée li.innerHTML = '<a href="' + url + '" class="toggle-list-item__anchor menu__item--home">' + '<span class="menu-item-text toggle-list-item__label">' + linkText + '</span>' + '</a>'; if (insertAtStart && parent.firstChild) { parent.insertBefore(li, parent.firstChild); } else { parent.appendChild(li); } var label = li.querySelector('.menu-item-text'); if (label) { label.style.setProperty('--image-url', 'url(' + imageUrl + ')'); } } function addStylesOnce() { if (document.getElementById('menu-item-styles')) return; var style = document.createElement('style'); style.id = 'menu-item-styles'; style.textContent = '#p-navigation li a .menu-item-text {' + 'position: relative; display: inline-block; padding-left: 30px;' + '}' + '#p-navigation li a .toggle-list-item__label::before {' + 'content: ""; position: absolute; left: 0; top: 0; width: 20px; height: 20px;' + 'background-size: contain; background-repeat: no-repeat; background-position: center;' + 'opacity: .65; background-image: var(--image-url);' + '}'; document.head.appendChild(style); } function enhanceMenuIfReady() { var nav = document.querySelector(MENU_SELECTOR); if (!nav || nav.getAttribute(ENHANCED_ATTR) === '1') return; // Ajouter les 3 entrées addMenuItem(nav, 'pt-all-documentaires', 'Documentaires', 'https://militotheque.org/wiki/Catégorie:Documentaire', '/w/images/8/82/Videographie_noir.svg'); addMenuItem(nav, 'pt-all-films', 'Films', 'https://militotheque.org/wiki/Catégorie:Film', '/w/images/8/82/Videographie_noir.svg'); addMenuItem(nav, 'pt-carte-videos', 'Carte des vidéos', 'https://militotheque.org/wiki/Militothèque:Carte_des_vidéos', '/w/images/6/6e/Mappemonde.svg'); // Réordonner pour placer entre "Accueil" et "Au hasard" var auHasard = nav.querySelector('li:nth-child(2)'); // après Accueil ['pt-carte-videos', 'pt-all-films', 'pt-all-documentaires'].forEach(function (id) { var li = nav.querySelector('#' + id); if (li && auHasard) nav.insertBefore(li, auHasard); }); addStylesOnce(); nav.setAttribute(ENHANCED_ATTR, '1'); // éviter doublons } function initObservers() { // 1) Essai immédiat enhanceMenuIfReady(); // 2) Observer les mutations (le menu peut être injecté après) var obs = new MutationObserver(function () { enhanceMenuIfReady(); }); obs.observe(document.documentElement, { childList: true, subtree: true }); // 3) Hook MediaWiki quand dispo if (window.mw && mw.hook) { mw.hook('wikipage.content').add(enhanceMenuIfReady); } } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initObservers); } else { initObservers(); } })(); /* Pour les utilisateurs connectés, remplace le bouton Modifier le wikicode par Modifier avec formulaire */ $(document).ready(function () { if (!$("body").hasClass("is-authenticated")) { return; } var boutonModifier = document.querySelector("#bouton-modifier"); var caEdit = document.querySelector("#ca-edit"); // Minerva: <a id="ca-edit"> if (boutonModifier && caEdit) { var lien = boutonModifier.querySelector("a"); // On récupère l'attribut "href" tel qu'il est écrit dans le HTML var nouveauHref = lien && lien.getAttribute("href"); console.log("lien bouton : " + nouveauHref); if (!nouveauHref) return; // Appliquer notre URL et titre caEdit.setAttribute("href", nouveauHref); var nouveauTitre = lien.getAttribute("title"); if (nouveauTitre) caEdit.setAttribute("title", nouveauTitre); // 1) Empêcher les handlers du skin de rediriger vers ?section=0 caEdit.addEventListener("click", function (e) { e.preventDefault(); e.stopImmediatePropagation(); window.location.assign(nouveauHref); }, true); // phase de capture // 2) Bloquer toute réécriture ultérieure de l'attribut href var mo = new MutationObserver(function (mutations) { for (var m of mutations) { if (m.type === "attributes" && m.attributeName === "href") { if (caEdit.getAttribute("href") !== nouveauHref) { caEdit.setAttribute("href", nouveauHref); } } } }); mo.observe(caEdit, { attributes: true, attributeFilter: ["href"] }); // (optionnel) Re-appliquer juste après le paint si un script a couru entre-temps setTimeout(function(){ caEdit.setAttribute("href", nouveauHref); }, 0); // Supprimer le bouton custom boutonModifier.remove(); } });