MediaWiki:Common.js: Difference between revisions
No edit summary |
No edit summary Tag: Manual revert |
||
| (10 intermediate revisions by the same user not shown) | |||
| Line 39: | Line 39: | ||
var isAdmin = g.indexOf('sysop')!==-1 || g.indexOf('interface-admin')!==-1; | var isAdmin = g.indexOf('sysop')!==-1 || g.indexOf('interface-admin')!==-1; | ||
if (!isAdmin) document.querySelectorAll('.only-sysop').forEach(el=>el.style.display='none'); | if (!isAdmin) document.querySelectorAll('.only-sysop').forEach(el=>el.style.display='none'); | ||
}); | |||
/* Random Page Teaser on Main Page | |||
* Fetches a random page (namespace 0), shows title, extract and thumbnail. | |||
*/ | |||
mw.loader.using(['mediawiki.api', 'mediawiki.util']).then(function () { | |||
// Run only on main page (adjust if your main page title differs) | |||
var isMain = mw.config.get('wgIsMainPage') || mw.config.get('wgPageName') === 'Main_Page'; | |||
var box = document.getElementById('random-teaser'); | |||
if (!isMain || !box) return; | |||
var api = new mw.Api(); | |||
function renderCard(data) { | |||
var page = (data && data.query && data.query.pages && data.query.pages[0]) || null; | |||
if (!page) { | |||
box.innerHTML = '<div class="content"><h3>Random page</h3><p>Could not load a page.</p></div>'; | |||
box.classList.remove('loading'); | |||
return; | |||
} | |||
var title = page.title; | |||
var url = mw.util.getUrl(title); | |||
var extract = (page.extract || '').replace(/\n+/g, ' ').trim(); | |||
if (extract.length > 420) extract = extract.slice(0, 420).replace(/\s+\S*$/, '') + '…'; | |||
var img = (page.thumbnail && page.thumbnail.source) ? page.thumbnail.source : null; | |||
box.innerHTML = | |||
'<div class="thumb">' + | |||
(img ? '<img src="' + img + '" alt="">' : '<span>🡲</span>') + | |||
'</div>' + | |||
'<div class="content">' + | |||
'<h3><a href="' + url + '">' + mw.html.escape(title) + '</a></h3>' + | |||
'<p>' + (extract || 'No description available.') + '</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() { | |||
api.get({ | |||
action: 'query', | |||
formatversion: 2, | |||
generator: 'random', | |||
grnnamespace: 0, // only main/article namespace | |||
grnlimit: 1, | |||
prop: 'extracts|pageimages', | |||
exintro: 1, | |||
explaintext: 1, // plain text extract | |||
exchars: 600, // server-side clamp | |||
pithumbsize: 280, // thumbnail width | |||
pilicense: 'any' | |||
}).then(renderCard).catch(function () { | |||
renderCard(null); | |||
}); | |||
} | |||
loadRandom(); | |||
}); | }); | ||