MediaWiki:Common.js: Difference between revisions
Appearance
No edit summary |
No edit summary |
||
| Line 159: | Line 159: | ||
applyFilter(); | applyFilter(); | ||
}); | }); | ||
// === Google Website Translator: mount in | |||
// === Google Website Translator: mount in Vector 2022 sidebar === | |||
(function () { | (function () { | ||
var targetId = 'google_translate_element'; | var targetId = 'google_translate_element'; | ||
function | function insertIntoSidebar() { | ||
// | // Prefer the sidebar portlet id used by Vector 2022; fall back to 'p-tb' | ||
var sidebarId = document.getElementById('vector-sidebar') ? 'vector-page-tools' : 'p-tb'; | |||
var li = mw.util.addPortletLink( | var li = mw.util.addPortletLink( | ||
sidebarId, '#', 'Translate', 'pt-google-translate', 'Translate this page' | |||
); | ); | ||
var container = document.createElement('div'); | var container = document.createElement('div'); | ||
container.id = targetId; | container.id = targetId; | ||
li.textContent = ''; | |||
li.textContent = ''; | |||
li.appendChild(container); | li.appendChild(container); | ||
} | } | ||
window.googleTranslateElementInit = function () { | window.googleTranslateElementInit = function () { | ||
/* global google */ | /* global google */ | ||
new google.translate.TranslateElement({ | new google.translate.TranslateElement({ | ||
pageLanguage: (mw.config && mw.config.get('wgContentLanguage')) || 'en', | pageLanguage: (mw.config && mw.config.get('wgContentLanguage')) || 'en', | ||
includedLanguages: 'fr,es,de,ru,zh', | includedLanguages: 'fr,es,de,ru,zh', | ||
layout: google.translate.TranslateElement.InlineLayout.SIMPLE | layout: google.translate.TranslateElement.InlineLayout.SIMPLE | ||
}, targetId); | }, targetId); | ||
| Line 191: | Line 187: | ||
mw.loader.using('mediawiki.util').then(function () { | mw.loader.using('mediawiki.util').then(function () { | ||
insertIntoSidebar(); | |||
var s = document.createElement('script'); | var s = document.createElement('script'); | ||
s.src = 'https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit'; | s.src = 'https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit'; | ||
Revision as of 15:12, 17 October 2025
/* 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 in Vector 2022 sidebar ===
(function () {
var targetId = 'google_translate_element';
function insertIntoSidebar() {
// Prefer the sidebar portlet id used by Vector 2022; fall back to 'p-tb'
var sidebarId = document.getElementById('vector-sidebar') ? 'vector-page-tools' : 'p-tb';
var li = mw.util.addPortletLink(
sidebarId, '#', 'Translate', 'pt-google-translate', 'Translate this page'
);
var container = document.createElement('div');
container.id = targetId;
li.textContent = '';
li.appendChild(container);
}
window.googleTranslateElementInit = function () {
/* global google */
new google.translate.TranslateElement({
pageLanguage: (mw.config && mw.config.get('wgContentLanguage')) || 'en',
includedLanguages: 'fr,es,de,ru,zh',
layout: google.translate.TranslateElement.InlineLayout.SIMPLE
}, targetId);
};
mw.loader.using('mediawiki.util').then(function () {
insertIntoSidebar();
var s = document.createElement('script');
s.src = 'https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit';
document.head.appendChild(s);
});
})();