MediaWiki:Minerva.js
Appearance
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/* All JavaScript here will be loaded for users of the MinervaNeue skin */ /* likeMarioWiki: Custom menu */ $.when(mw.loader.using('mediawiki.util'), $.ready).then(function() { var menu = 'p-personal'; // Default menu location for personal links // If logged in, attempt to add to the interaction or navigation menu if (mw.config.get('wgUserId')) { menu = document.getElementById('p-interaction') ? 'p-interaction' : 'p-navigation'; // Preferences link adding code removed as requested } // --- Function to generate safe URL --- function getSafeUrl(pageName) { var url = '#error-generating-url'; // Default fallback URL try { if (typeof mw !== 'undefined' && typeof mw.util !== 'undefined' && typeof mw.util.getUrl === 'function') { url = mw.util.getUrl(pageName); } else { console.warn('[Minerva.js] mw.util.getUrl not available, using basic fallback.'); var prefix = '/wiki/'; // Default to /wiki/ if (typeof mw !== 'undefined' && typeof mw.config !== 'undefined' && typeof mw.config.get === 'function') { prefix = mw.config.get('wgArticlePath', '/wiki/$1').replace('$1', ''); } else { console.warn('[Minerva.js] mw.config.get not available for wgArticlePath.'); } url = prefix + encodeURIComponent(pageName.replace(/ /g, '_')); // Encode the page name } } catch (e) { console.error('[Minerva.js] Error within getSafeUrl for "' + pageName + '":', e); } return url; } // --- Define base icon classes --- var iconBaseClasses = ['mw-ui-icon', 'mw-ui-icon-before']; // --- Add Categories section header --- var categoriesHeader = document.createElement('li'); categoriesHeader.classList.add('menu__item', 'menu__item--category', 'menu-header'); categoriesHeader.innerHTML = '<span class="menu-header-text">— CATEGORIES —</span>'; // Keep using <span> document.getElementById(menu).appendChild(categoriesHeader); // --- Add links for Categories with icons --- var linkNodeLocation = mw.util.addPortletLink(menu, getSafeUrl('Animal_cruelty_cases_by_location'), 'By Location/地点').getElementsByTagName('a')[0]; iconBaseClasses.concat(['mw-ui-icon-minerva-mapPin']).forEach(function(cls) { linkNodeLocation.classList.add(cls); }); // Use mapPin var linkNodeSpecies = mw.util.addPortletLink(menu, getSafeUrl('Animal_cruelty_cases_by_species'), 'By Species/物种').getElementsByTagName('a')[0]; iconBaseClasses.concat(['mw-ui-icon-minerva-mapPin']).forEach(function(cls) { linkNodeSpecies.classList.add(cls); }); // Use mapPin var linkNodeYear = mw.util.addPortletLink(menu, getSafeUrl('Animal_cruelty_cases_by_year'), 'By Year/年份').getElementsByTagName('a')[0]; iconBaseClasses.concat(['mw-ui-icon-minerva-mapPin']).forEach(function(cls) { linkNodeYear.classList.add(cls); }); // Use mapPin // --- Add Resources section header --- var resourcesHeader = document.createElement('li'); resourcesHeader.classList.add('menu__item', 'menu__item--category', 'menu-header'); resourcesHeader.innerHTML = '<span class="menu-header-text">— RESOURCES —</span>'; // Keep using <span> document.getElementById(menu).appendChild(resourcesHeader); // --- Add links for Resources with icons --- var linkNodeUseful = mw.util.addPortletLink(menu, getSafeUrl('Useful_links'), 'Useful links/实用链接').getElementsByTagName('a')[0]; // Keep using 'link' icon, assuming it exists and is desired iconBaseClasses.concat(['mw-ui-icon-minerva-link']).forEach(function(cls) { linkNodeUseful.classList.add(cls); }); var linkNodeDocs = mw.util.addPortletLink(menu, getSafeUrl('Documentaries'), 'Documentaries/纪录片').getElementsByTagName('a')[0]; iconBaseClasses.concat(['mw-ui-icon-minerva-userContributions']).forEach(function(cls) { linkNodeDocs.classList.add(cls); }); // Use userContributions var linkNodeStudies = mw.util.addPortletLink(menu, getSafeUrl('Studies'), 'Studies/研究').getElementsByTagName('a')[0]; iconBaseClasses.concat(['mw-ui-icon-minerva-speechBubbles']).forEach(function(cls) { linkNodeStudies.classList.add(cls); }); // Use speechBubbles });