MediaWiki:Common.js
Appearance
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.
/* ==========================================================
🚀 MIPPEDIA DATA BUTTON ONLY (Otomatis - Universal Bridge Version)
Hanya memunculkan tombol jika data tersedia di pusat.
Mendukung penuh tampilan Mobile (Login/Anonim) & Desktop.
========================================================== */
$(document).ready(function() {
var pageName = mw.config.get('wgPageName').replace(/_/g, ' ');
var namespace = mw.config.get('wgNamespaceNumber');
var dataDomain = 'https://data.mippedia.org';
// Alamat API Mippedia Bahasa Indonesia
var indonesianWikiApi = 'https://id.mippedia.org/api.php';
// Jalankan hanya di namespace artikel resmi
if (namespace === 0) {
// Langkah 1: Tembak API Mippedia Indonesia untuk mencari padanan halaman paling relevan
$.ajax({
url: indonesianWikiApi,
data: {
action: 'query',
list: 'search',
srsearch: pageName,
srlimit: 1,
format: 'json',
origin: '*'
},
dataType: 'json',
success: function(wikiRes) {
var targetDataPage = pageName;
if (wikiRes && wikiRes.query && wikiRes.query.search && wikiRes.query.search.length > 0) {
targetDataPage = wikiRes.query.search[0].title;
}
targetDataPage = targetDataPage.replace(/\s+/g, '_');
// Langkah 2: Cek langsung ke Mippedia Data
$.ajax({
url: dataDomain + '/api.php',
data: { action: 'query', titles: targetDataPage, format: 'json', origin: '*' },
dataType: 'jsonp',
success: function(res) {
if (res && res.query && res.query.pages) {
var pages = res.query.pages;
var isExist = false;
for (var id in pages) { if (parseInt(id) > 0) { isExist = true; break; } }
if (isExist) {
injectFloatingDataBtn(targetDataPage, dataDomain);
}
}
}
});
},
error: function() {
var nativePage = pageName.replace(/\s+/g, '_');
$.ajax({
url: dataDomain + '/api.php',
data: { action: 'query', titles: nativePage, format: 'json', origin: '*' },
dataType: 'jsonp',
success: function(res) {
var pages = res.query.pages;
var isExist = false;
for (var id in pages) { if (parseInt(id) > 0) { isExist = true; break; } }
if (isExist) { injectFloatingDataBtn(nativePage, dataDomain); }
}
});
}
});
}
function injectFloatingDataBtn(name, domain) {
if ($('#mippedia-data-btn').length) return;
var currentSkin = mw.config.get('skin');
// Tarik resolusi tinggi (128px) dari server agar di kondisi mana pun tetep Ultra HD / Tajam
var api = new mw.Api();
api.get({
action: 'query',
titles: 'File:Locked_Data.svg',
prop: 'imageinfo',
iiprop: 'url',
iiurlwidth: 128,
format: 'json'
}).done(function(data) {
var imageUrl = '';
try {
var pages = data.query.pages;
for (var id in pages) {
if (pages[id].imageinfo && pages[id].imageinfo[0]) {
imageUrl = pages[id].imageinfo[0].thumburl || pages[id].imageinfo[0].url;
}
}
} catch (e) { imageUrl = ''; }
if (!imageUrl) return;
// Inisialisasi tombol dasar
var $btn = $('<a>', {
id: 'mippedia-data-btn',
href: domain + '/wiki/' + encodeURIComponent(name),
target: '_blank',
style: 'z-index: 1000; text-decoration: none; display: inline-block; transition: transform 0.2s; position: absolute;',
html: $('<img>', {
src: imageUrl,
alt: 'Data Icon',
style: 'height: 20px; width: 20px; display: block; opacity: 0.85; vertical-align: middle;'
})
});
$btn.hover(
function() { $(this).css({ 'transform': 'scale(1.15)', 'opacity': '1' }); },
function() { $(this).css({ 'transform': 'scale(1.0)', 'opacity': '0.85' }); }
);
// 🛠️ STRATEGI DOCKING POSISI BERDASARKAN SKIN & STATUS LOGIN
if (currentSkin === 'minerva') {
// TAMPILAN MOBILE (MINERVA)
var $actionMenu = $('.page-actions-menu');
if ($actionMenu.length && $actionMenu.is(':visible')) {
// Kondisi 1: User Login (Menu Aksi Aktif Sempurna)
$actionMenu.css('position', 'relative');
$btn.css({ 'right': '12px', 'top': '2px' });
$actionMenu.append($btn);
} else {
// Kondisi 2: User Belum Login / Menu Aksi Menyusut
// Kita tempelkan langsung sejajar di sisi kanan baris Judul Utama (firstHeading)
var $heading = $('#firstHeading');
$heading.css({ 'position': 'relative', 'padding-right': '40px' });
$btn.css({ 'right': '10px', 'top': '5px' });
$heading.append($btn);
}
} else {
// TAMPILAN DESKTOP (Vector / Skin Desktop Lainnya)
// Di desktop, tempat paling rapi adalah di sebelah kiri barisan Tab Atas (Read, Edit, View History)
var $desktopTarget = $('#p-views ul, .vector-menu-content-list').first();
if ($desktopTarget.length) {
// Dibungkus `<li>` agar menyatu secara alami dengan struktur menu desktop MediaWiki
var $wrapperLi = $('<li>', {
style: 'display: inline-block; vertical-align: middle; margin-right: 12px; margin-left: 8px; position: relative; padding-top: 10px;'
});
$btn.css({ 'position': 'static', 'display': 'inline-block' });
$wrapperLi.append($btn);
$desktopTarget.prepend($wrapperLi);
} else {
// Fallback aman Desktop jika tab tidak ketemu
var $headingDesktop = $('#firstHeading');
$headingDesktop.css('position', 'relative');
$btn.css({ 'right': '20px', 'top': '10px' });
$headingDesktop.append($btn);
}
}
});
}
});