MediaWiki:Common.js
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. */
/****************************************/
/* sliders using jquery by User:Tierrie */
/****************************************/
mw.loader.using(['jquery.cookie']);
/****************************************/
/* sliders using jquery by User:Tierrie */
/****************************************/
mw.loader.using(['jquery.ui'], function () {
$("[class^=portal_vtab]").tabs().addClass("ui-tabs-vertical ui-helper-clearfix");
$("[class^=portal_vtab] li").removeClass("ui-corner-top").addClass("ui-corner-left");
var $tabs = $("#portal_slider").tabs({ fx: { opacity: 'toggle', duration: 100 } });
$("[class*=portal_sliderlink]").on('click', function () {
$tabs.tabs('select', this.className.match(/portal_sliderlink-(\d+)/)[1]);
return false;
});
$('#portal_next').on('click', function () {
$tabs.tabs('select', ($tabs.tabs('option', 'selected') == ($tabs.tabs('length')) - 1) ? 0 : $tabs.tabs('option', 'selected') + 1);
return false;
});
$('#portal_prev').on('click', function () {
$tabs.tabs('select', ($tabs.tabs('option', 'selected') == 0) ? ($tabs.tabs('length') - 1) : $tabs.tabs('option', 'selected') - 1);
return false;
});
});
/* lockdown for reference popup configuration */
((window.dev = window.dev || {}).ReferencePopups = dev.ReferencePopups || {}).lockdown = true;
/* Disable license check for multi upload */
mw.config.set('UMFBypassLicenseCheck', true);
/* Hide Admin toolbox for non-admins */
mw.loader.using('mediawiki.util').then(function () {
var g = mw.config.get('wgUserGroups') || [];
var isAdmin = g.indexOf('sysop') !== -1 || g.indexOf('interface-admin') !== -1;
if (!isAdmin) document.querySelectorAll('.only-sysop').forEach(function (el) { el.style.display = 'none'; });
});
/* ============================
RANDOM PAGE TEASER (robust)
============================ */
mw.loader.using(['mediawiki.api', 'mediawiki.util']).then(function () {
var box = document.getElementById('random-teaser');
if (!box) return; // run only if the container exists
var api = new mw.Api();
var THUMB_WIDTH = 280;
function esc(s) { return mw.html.escape(String(s || '')); }
function makeExcerptFromHTML(html, maxChars) {
var tmp = document.createElement('div');
tmp.innerHTML = html;
var p = tmp.querySelector('p');
var txt = (p ? p.innerText : tmp.innerText || '').replace(/\s+/g, ' ').trim();
if (txt.length > maxChars) txt = txt.slice(0, maxChars).replace(/\s+\S*$/, '') + '…';
return txt || 'No description available.';
}
function pickImageTitle(list) {
if (!Array.isArray(list) || !list.length) return null;
var preferred = list.find(function (t) { return /\.(jpe?g|png|gif|webp)$/i.test(t); });
return preferred || list[0] || null;
}
function getThumbUrl(fileTitle) {
if (!fileTitle) return Promise.resolve(null);
return api.get({
action: 'query',
formatversion: 2,
titles: fileTitle,
prop: 'imageinfo',
iiprop: 'url',
iiurlwidth: THUMB_WIDTH
}).then(function (res) {
var p = res.query && res.query.pages && res.query.pages[0];
var ii = p && p.imageinfo && p.imageinfo[0];
return (ii && (ii.thumburl || ii.url)) || null;
}).catch(function () { return null; });
}
function render(title, extract, imgUrl) {
var url = mw.util.getUrl(title);
box.innerHTML =
'<div class="thumb">' +
(imgUrl ? '<img src="' + esc(imgUrl) + '" alt="">' : '<span>🡲</span>') +
'</div>' +
'<div class="content">' +
'<h3><a href="' + url + '">' + esc(title) + '</a></h3>' +
'<p>' + esc(extract) + '</p>' +
'<div class="actions">' +
'<a class="btn" href="' + url + '">Open</a>' +
'<button type="button" class="btn" id="rand-refresh">Another</button>' +
'<a class="btn" href="' + mw.util.getUrl('Special:Random') + '">Special:Random</a>' +
'</div>' +
'</div>';
box.classList.remove('loading');
var refreshBtn = document.getElementById('rand-refresh');
if (refreshBtn) refreshBtn.addEventListener('click', function () {
box.classList.add('loading');
loadRandom();
});
}
function loadRandom() {
// 1) pick random title
api.get({
action: 'query',
formatversion: 2,
list: 'random',
rnnamespace: 0,
rnlimit: 1
}).then(function (r) {