MediaWiki:Common.js
Jump to navigation
Jump to search
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)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Press Ctrl-F5.
/* Any JavaScript here will be loaded for all users on every page load. */
mw.loader.load("https://commons.wiki.gg/wiki/MediaWiki:DiscordIntegrator.js?action=raw\u0026ctype=text/javascript");
/* DRUID */
$(function () {
$(".druid-main-images-label").off("click");
$(".druid-main-images-label").click(function () {
var $parent = $(this).closest(".druid-container");
$parent.find(".druid-toggleable").removeClass("focused");
var i = $(this).attr("data-druid");
$parent.find(".druid-toggleable[data-druid=" + i + "]").addClass("focused");
});
$(".druid-collapsible").off("click");
$(".druid-collapsible").click(function () {
var kind = $(this).attr("data-druid-section");
$(this).toggleClass("druid-collapsible-collapsed");
$(this)
.closest(".druid-container")
.find("[data-druid-section-row=" + kind + "]")
.toggleClass("druid-collapsed");
});
});
$(function () {
$(".druid-title-tab").off("click")
.on('click', function () {
var $parent = $(this).closest(".druid-container");
$parent.find(".druid-toggleable").removeClass("focused");
var i = $(this).attr("data-druid");
$parent.find(".druid-toggleable[data-druid=" + i + "]").addClass("focused");
});
$(".druid-section-tab").off("click")
.on('click', function () {
var $parent = $(this).closest(".druid-section-container");
$parent.find(".druid-toggleable").removeClass("focused");
var i = $(this).attr("data-druid");
$parent.find(".druid-toggleable[data-druid=" + i + "]").addClass("focused");
});
$(".druid-collapsible").off("click")
.on('click', function () {
var kind = $(this).attr("data-druid-section");
$(this).toggleClass("druid-collapsible-collapsed");
$(this)
.closest(".druid-container")
.find("[data-druid-section-row=" + kind + "]")
.toggleClass("druid-collapsed");
});
});
/* End DRUID */
/* [[Template:Spoiler]] */
$(function () {
$('.spoiler-content')
.off('click') // in case this code is loaded twice
.on('click', function(e){
$(this).toggleClass('show');
}).find('a').on('click', function(e){
e.stopPropagation();
});
});
/* Timestamp Format */
function formatTimestamp(element) {
var timestamp = element.dataset.timestamp;
if (timestamp) {
var date = new Date(parseInt(timestamp) * 1000);
var formattedDate = new Intl.DateTimeFormat('en-US', {
month: '2-digit',
day: '2-digit',
year: 'numeric',
hour: '2-digit',
minute: '2-digit',
hour12: true
}).format(date);
element.innerText = formattedDate;
}
}
mw.hook("wikipage.content").add(function ($content) {
var page = $content[0];
/* Check if timestamps need to be formatted */
if (!page.querySelector('.timestamp')) { return; }
/* Format each timestamp */
page.querySelectorAll('.timestamp').forEach(formatTimestamp);
});
function loadLatestPages(id, category) {
var baseURL = 'https://minehut.wiki.gg/api.php';
// Step 1: Fetch pages in the "Notable Servers" category
var categoryParams = new URLSearchParams({
action: 'query',
list: 'categorymembers',
cmtitle: 'Category:' + category,
cmlimit: '50', // Fetch more pages to ensure we have enough for sorting
format: 'json'
});
fetch(baseURL + '?' + categoryParams.toString())
.then(function(response) {
return response.json();
})
.then(function(categoryData) {
var pages = categoryData.query.categorymembers;
// Step 2: Fetch the last revision for each page
var revisionPromises = pages.map(function(page) {
var revisionParams = new URLSearchParams({
action: 'query',
prop: 'revisions',
titles: page.title,
rvprop: 'timestamp',
rvlimit: '1',
format: 'json'
});
return fetch(baseURL + '?' + revisionParams.toString())
.then(function(response) {
return response.json();
})
.then(function(revisionData) {
var pageId = Object.keys(revisionData.query.pages)[0];
var lastRevision = revisionData.query.pages[pageId].revisions[0];
return {
title: page.title,
timestamp: lastRevision.timestamp
};
});
});
return Promise.all(revisionPromises);
})
.then(function(pageRevisions) {
// Step 3: Sort pages by last updated timestamp (descending order)
pageRevisions.sort(function(a, b) {
return new Date(b.timestamp) - new Date(a.timestamp);
});
// Step 4: Generate the list format with MediaWiki-style links
var listItems = pageRevisions.slice(0, 5).map(function(page) {
//return '<li>' + '[[' + page.title + ']]' + '</li>';
return "<li>" + mw.html.element('a', {href: page.title}, page.title) + "</li>";
}).join('\n');
// Step 5: Replace the content of the div with class "notable_servers"
$('.' + id).html('<ul>' + listItems + '</ul>');
})
.catch(function(error) {
console.error('Error fetching pages:', error);
});
}
$(document).ready(function() {
if (mw.config.get('wgIsMainPage')) {
loadLatestPages("notable_servers", "Notable_Servers");
loadLatestPages("server_types", "Server_Types");
}
});