MediaWiki:Common.js: Difference between revisions
Jump to navigation
Jump to search
No edit summary Tag: Reverted |
No edit summary Tag: Manual revert |
||
| (2 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
/* Any JavaScript here will be loaded for all users on every page load. */ | /* Any JavaScript here will be loaded for all users on every page load. */ | ||
| Line 14: | Line 4: | ||
/* sliders using jquery by User:Tierrie */ | /* sliders using jquery by User:Tierrie */ | ||
/****************************************/ | /****************************************/ | ||
mw.loader.using(['jquery.cookie']); | mw.loader.using( ['jquery.cookie']); | ||
/****************************************/ | /****************************************/ | ||
/* sliders using jquery by User:Tierrie */ | /* sliders using jquery by User:Tierrie */ | ||
/****************************************/ | /****************************************/ | ||
mw.loader.using(['jquery.ui'], function () { | mw.loader.using( ['jquery.ui'], function() { | ||
$("[class^=portal_vtab]").tabs().addClass("ui-tabs-vertical ui-helper-clearfix"); | $( "[class^=portal_vtab]" ).tabs().addClass( "ui-tabs-vertical ui-helper-clearfix" ); | ||
$("[class^=portal_vtab] li").removeClass("ui-corner-top").addClass("ui-corner-left"); | $( "[class^=portal_vtab] li" ).removeClass( "ui-corner-top" ).addClass( "ui-corner-left" ); | ||
var $tabs = $("#portal_slider").tabs({ fx: { opacity: 'toggle', duration: 100 } }); | var $tabs = $("#portal_slider").tabs({ fx: {opacity:'toggle', duration:100} } ); | ||
$("[class*=portal_sliderlink]"). | $("[class*=portal_sliderlink]").click(function() { // bind click event to link | ||
$tabs.tabs('select', this.className.match(/portal_sliderlink-(\d+)/)[1]); | $tabs.tabs('select', this.className.match(/portal_sliderlink-(\d+)/)[1]); | ||
console.log("Sliding to " + this.className.match(/portal_sliderlink-(\d+)/)[1]); | |||
return false; | return false; | ||
}); | }); | ||
$('#portal_next'). | $('#portal_next').click(function() { | ||
$tabs.tabs('select', ($tabs.tabs('option', 'selected') == ($tabs.tabs('length')) - 1) ? 0 : $tabs.tabs('option', 'selected') + 1); | $tabs.tabs('select', ($tabs.tabs('option', 'selected') == ($tabs.tabs('length'))-1) ? 0 : $tabs.tabs('option', 'selected') + 1 ); // switch to next tab | ||
return false; | return false; | ||
}); | }); | ||
$('#portal_prev'). | $('#portal_prev').click(function() { // bind click event to link | ||
$tabs.tabs('select', ($tabs.tabs('option', 'selected') == 0) ? ($tabs.tabs('length') - 1) : $tabs.tabs('option', 'selected') - 1); | $tabs.tabs('select', ($tabs.tabs('option', 'selected') == 0) ? ($tabs.tabs('length')-1) : $tabs.tabs('option', 'selected') - 1 ); // switch to previous tab | ||
return false; | return false; | ||
}); | }); | ||
| Line 44: | Line 35: | ||
mw.config.set('UMFBypassLicenseCheck', true); | mw.config.set('UMFBypassLicenseCheck', true); | ||
mw.loader.using('mediawiki.util').then(function () { | mw.loader.using('mediawiki.util').then(function () { | ||
var g = mw.config.get('wgUserGroups') || []; | var g = mw.config.get('wgUserGroups')||[]; | ||
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 | 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 () { | 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'); | var box = document.getElementById('random-teaser'); | ||
if (!box) return; | if (!isMain || !box) return; | ||
var api = new mw.Api(); | var api = new mw.Api(); | ||
function | function renderCard(data) { | ||
var page = (data && data.query && data.query.pages && data.query.pages[0]) || null; | |||
if (!page) { | |||
var | 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 = | box.innerHTML = | ||
'<div class="thumb">' + | '<div class="thumb">' + | ||
( | (img ? '<img src="' + img + '" alt="">' : '<span>🡲</span>') + | ||
'</div>' + | '</div>' + | ||
'<div class="content">' + | '<div class="content">' + | ||
'<h3><a href="' + url + '">' + | '<h3><a href="' + url + '">' + mw.html.escape(title) + '</a></h3>' + | ||
'<p>' + | '<p>' + (extract || 'No description available.') + '</p>' + | ||
'<div class="actions">' + | '<div class="actions">' + | ||
'<a class="btn" href="' + url + '">Open</a>' + | '<a class="btn" href="' + url + '">Open</a>' + | ||
| Line 126: | Line 80: | ||
'</div>' + | '</div>' + | ||
'</div>'; | '</div>'; | ||
box.classList.remove('loading'); | box.classList.remove('loading'); | ||
| Line 136: | Line 91: | ||
function loadRandom() { | function loadRandom() { | ||
api.get({ | api.get({ | ||
action: 'query', | action: 'query', | ||
formatversion: 2, | 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); | |||
}); | }); | ||
} | } | ||
Latest revision as of 10:41, 5 September 2025
/* 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]").click(function() { // bind click event to link
$tabs.tabs('select', this.className.match(/portal_sliderlink-(\d+)/)[1]);
console.log("Sliding to " + this.className.match(/portal_sliderlink-(\d+)/)[1]);
return false;
});
$('#portal_next').click(function() {
$tabs.tabs('select', ($tabs.tabs('option', 'selected') == ($tabs.tabs('length'))-1) ? 0 : $tabs.tabs('option', 'selected') + 1 ); // switch to next tab
return false;
});
$('#portal_prev').click(function() { // bind click event to link
$tabs.tabs('select', ($tabs.tabs('option', 'selected') == 0) ? ($tabs.tabs('length')-1) : $tabs.tabs('option', 'selected') - 1 ); // switch to previous tab
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);
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(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();
});