MediaWiki:Common.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.
/* Any JavaScript here will be loaded for all users on every page load. */
function ModifySidebar( action, section, name, link ) {
try {
switch ( section ) {
case 'languages':
var target = 'p-lang';
break;
case 'toolbox':
var target = 'p-tb';
break;
case 'navigation':
var target = 'p-navigation';
break;
default:
var target = 'p-' + section;
break;
}
if ( action == 'add' ) {
var node = document.getElementById( target )
.getElementsByTagName( 'div' )[0]
.getElementsByTagName( 'ul' )[0];
var aNode = document.createElement( 'a' );
var liNode = document.createElement( 'li' );
aNode.appendChild( document.createTextNode( name ) );
aNode.setAttribute( 'href', link );
liNode.appendChild( aNode );
liNode.className = 'plainlinks';
node.appendChild( liNode );
}
if ( action == 'remove' ) {
var list = document.getElementById( target )
.getElementsByTagName( 'div' )[0]
.getElementsByTagName( 'ul' )[0];
var listelements = list.getElementsByTagName( 'li' );
for ( var i = 0; i < listelements.length; i++ ) {
if (
listelements[i].getElementsByTagName( 'a' )[0].innerHTML == name ||
listelements[i].getElementsByTagName( 'a' )[0].href == link
)
{
list.removeChild( listelements[i] );
}
}
}
} catch( e ) {
// let's just ignore what's happened
return;
}
}
function CustomizeModificationsOfSidebar() {
// Adds [[Special:CategoryTree|Special:CategoryTree]] to toolbox
// ModifySidebar( 'add', 'toolbox', 'CategoryTree', 'https://asist.a2hosted.com/index.php/Special:CategoryTree' );
// Removes [[Special:Upload|Special:Upload]] from toolbox
ModifySidebar( 'remove', 'toolbox', 'Upload file', 'https://asist.a2hosted.com/index.php/Special:Upload' );
// Removes [[Special:Specialpages|Special:Special pages]] from toolbox
ModifySidebar( 'remove', 'toolbox', 'Special pages', 'https://asist.a2hosted.com/index.php/Special:SpecialPages' );
}
jQuery( CustomizeModificationsOfSidebar );
/* People directory filtering */
mw.hook('wikipage.content').add(function($content) {
var $container = $('#people-cards');
if (!$container.length) return; // not this page
var $cards = $container.find('.person-card');
var $q = $('#people-filter-input');
var $letter = $('#people-filter-letter');
var $clear = $('#people-filter-clear');
var $count = $('#people-filter-count');
var $nores = $('#people-no-results');
var $more = $('#people-show-more');
var SAMPLE_SIZE = 8; // how many to show by default on initial load
var PAGE_SIZE = 24; // "Show more" chunk size
function norm(s){ return (s||'').toString().toLowerCase().normalize('NFKD')
.replace(/[\u0300-\u036f]/g,''); }
var idx = $cards.map(function(){
var $c = $(this);
return {
el: this,
first: norm($c.data('first')),
last: norm($c.data('last')),
bio: norm($c.data('bio')),
};
}).get();
idx.sort(function(){ return Math.random() - 0.5; });
var shownCount = 0;
function currentFiltered() {
var q = norm($q.val());
var letter = ($letter.val() || '').toLowerCase();
return idx.filter(function(r){
var matchesQ = !q || (r.first.includes(q) || r.last.includes(q) || r.bio.includes(q));
var matchesLetter = !letter || (r.last.startsWith(letter) || r.first.startsWith(letter));
return matchesQ && matchesLetter;
});
}
function hideAll(){ idx.forEach(function(r){ r.el.style.display = 'none'; }); }
function applyFilter() {
var filtered = currentFiltered();
hideAll();
var qActive = !!$q.val();
var lActive = !!$letter.val();
var limit = (qActive || lActive) ? filtered.length : Math.min(SAMPLE_SIZE, filtered.length);
filtered.slice(0, limit).forEach(function(r){ r.el.style.display = ''; });
shownCount = limit;
$count.text(filtered.length ? (qActive || lActive ? filtered.length + ' match' + (filtered.length===1?'':'es') : 'Showing ' + limit + ' of ' + filtered.length) : '');
$nores.toggle(filtered.length === 0);
$more.toggle((qActive || lActive) && shownCount < filtered.length);
}
function showMore() {
var filtered = currentFiltered();
var next = filtered.slice(shownCount, shownCount + PAGE_SIZE);
next.forEach(function(r){ r.el.style.display = ''; });
shownCount += next.length;
$more.toggle(shownCount < filtered.length);
}
var timer = null;
function debouncedFilter(){
clearTimeout(timer);
timer = setTimeout(applyFilter, 120);
}
$q.on('input', debouncedFilter);
$letter.on('change', applyFilter);
$clear.on('click', function(){
$q.val('');
$letter.val('');
applyFilter();
$q.trigger('focus');
});
$more.on('click', showMore);
applyFilter();
});
/// === Google Website Translator: mount next to the search box (Vector 2022) ===
(function () {
var targetId = 'google_translate_element';
function placeInHeader() {
// Vector 2022 search container (try p-search first, then the class)
var search = document.getElementById('p-search') ||
document.querySelector('.vector-search-box');
// Fallback: insert before personal tools if search isn't found yet
var userLinks = document.getElementById('p-personal') ||
document.getElementById('vector-user-links');
var container = document.getElementById(targetId);
if (!container) {
container = document.createElement('div');
container.id = targetId;
container.className = 'gt-header-slot';
}
if (search && search.parentNode) {
// place immediately after the search box
search.parentNode.insertBefore(container, search.nextElementSibling);
} else if (userLinks && userLinks.parentNode) {
userLinks.parentNode.insertBefore(container, userLinks);
} else {
// last resort
document.body.appendChild(container);
}
}
// Google callback
window.googleTranslateElementInit = function () {
/* global google */
new google.translate.TranslateElement({
pageLanguage: (mw.config && mw.config.get('wgContentLanguage')) || 'en',
includedLanguages: 'fr,es,de,it,pt,ru,zh,ja,ko,ar,hi',
layout: google.translate.TranslateElement.InlineLayout.SIMPLE,
autoDisplay: false
}, targetId);
};
// Run once the MediaWiki loader is ready
mw.loader.using('mediawiki.util').then(function () {
placeInHeader();
var s = document.createElement('script');
s.src = 'https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit';
document.head.appendChild(s);
});
// Vector sometimes re-renders parts of the header; re-place if it moves
mw.hook('skin.vector.updated').add(placeInHeader);
})();