MediaWiki:Common.js: Difference between revisions
Appearance
No edit summary Tags: Reverted Mobile edit Mobile web edit |
No edit summary Tags: Reverted Mobile edit Mobile web edit |
||
| Line 89: | Line 89: | ||
if ($('#mippedia-data-btn').length) return; | if ($('#mippedia-data-btn').length) return; | ||
// Otak Cerdas | // Otak Cerdas: Ambil link render resolusi tinggi (64px) dari server agar tidak buram | ||
var api = new mw.Api(); | var api = new mw.Api(); | ||
api.get({ | api.get({ | ||
| Line 96: | Line 96: | ||
prop: 'imageinfo', | prop: 'imageinfo', | ||
iiprop: 'url', | iiprop: 'url', | ||
iiurlwidth: | iiurlwidth: 64, | ||
format: 'json' | format: 'json' | ||
}).done(function(data) { | }).done(function(data) { | ||
| Line 104: | Line 104: | ||
for (var id in pages) { | for (var id in pages) { | ||
if (pages[id].imageinfo && pages[id].imageinfo[0]) { | if (pages[id].imageinfo && pages[id].imageinfo[0]) { | ||
imageUrl = pages[id].imageinfo[0].thumburl || pages[id].imageinfo[0].url; | imageUrl = pages[id].imageinfo[0].thumburl || pages[id].imageinfo[0].url; | ||
} | } | ||
| Line 112: | Line 111: | ||
} | } | ||
if (!imageUrl) return; | if (!imageUrl) return; | ||
| Line 119: | Line 117: | ||
href: domain + '/wiki/' + encodeURIComponent(name), | href: domain + '/wiki/' + encodeURIComponent(name), | ||
target: '_blank', | target: '_blank', | ||
style: 'position: absolute; right: | // top: 2px dan right: 12px disesuaikan agar pas di barisan menu mobile minerva | ||
style: 'position: absolute; right: 12px; top: 2px; z-index: 1000; text-decoration: none; display: inline-block; transition: transform 0.2s;', | |||
html: $('<img>', { | html: $('<img>', { | ||
src: imageUrl, | src: imageUrl, | ||
alt: 'Data Icon', | alt: 'Data Icon', | ||
style: 'height: | // Memaksa dimensi tampilan ke 20px agar seukuran dengan tombol bintang/edit bawaan | ||
style: 'height: 20px; width: 20px; display: block; opacity: 0.85; vertical-align: middle;' | |||
}) | }) | ||
}); | }); | ||
// Efek hover | // Efek interaksi hover/touch tipis | ||
$btn.hover( | $btn.hover( | ||
function() { $(this).css('transform' | function() { $(this).css({ 'transform': 'scale(1.1)', 'opacity': '1' }); }, | ||
function() { $(this).css('transform' | function() { $(this).css({ 'transform': 'scale(1.0)', 'opacity': '0.85' }); } | ||
); | ); | ||
var $target = $('.page-actions-menu, .mw-editsection-visualeditor, #ca-edit, .minerva__tab-container').first(); | var $target = $('.page-actions-menu, .mw-editsection-visualeditor, #ca-edit, .minerva__tab-container').first(); | ||
| Line 139: | Line 138: | ||
$target.css('position', 'relative').append($btn); | $target.css('position', 'relative').append($btn); | ||
} else { | } else { | ||
$('#firstHeading').css('position', 'relative').append($btn); | $('#firstHeading').css('position', 'relative').append($btn); | ||
$btn.css('top', ' | $btn.css('top', '8px'); | ||
} | } | ||
}); | }); | ||
} | } | ||
}); | }); | ||
Revision as of 12:27, 29 May 2026
/* ==========================================================
🚀 MIPPEDIA DATA BUTTON ONLY (Otomatis - English Bridge Version)
Hanya memunculkan tombol jika data tersedia di pusat.
Mendukung pencarian otomatis ke Mippedia ID secara mandiri tanpa interwiki manual.
========================================================== */
$(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, // Mencari padanan berdasarkan judul Inggris
srlimit: 1,
format: 'json',
origin: '*'
},
dataType: 'json',
success: function(wikiRes) {
var targetDataPage = pageName; // Fallback jika tidak ditemukan
if (wikiRes && wikiRes.query && wikiRes.query.search && wikiRes.query.search.length > 0) {
// Ketemu judul bahasa Indonesianya secara otomatis dari sistem search internal
targetDataPage = wikiRes.query.search[0].title;
}
// Format spasi menjadi underscore untuk validasi nama halaman MediaWiki
targetDataPage = targetDataPage.replace(/\s+/g, '_');
// Langkah 2: Cek langsung ke Mippedia Data menggunakan nama halaman Indonesia hasil pelacakan
$.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;
}
}
// Jika data valid ditemukan di pusat, munculkan tombol melayang
if (isExist) {
injectFloatingDataBtn(targetDataPage, dataDomain);
}
}
}
});
},
error: function() {
// Jika server Wiki Indonesia down, langsung pakai nama asli Inggris-nya sebagai fallback akhir
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;
// Otak Cerdas: Ambil link render resolusi tinggi (64px) dari server agar tidak buram
var api = new mw.Api();
api.get({
action: 'query',
titles: 'File:Locked_Data.svg',
prop: 'imageinfo',
iiprop: 'url',
iiurlwidth: 64,
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;
var $btn = $('<a>', {
id: 'mippedia-data-btn',
href: domain + '/wiki/' + encodeURIComponent(name),
target: '_blank',
// top: 2px dan right: 12px disesuaikan agar pas di barisan menu mobile minerva
style: 'position: absolute; right: 12px; top: 2px; z-index: 1000; text-decoration: none; display: inline-block; transition: transform 0.2s;',
html: $('<img>', {
src: imageUrl,
alt: 'Data Icon',
// Memaksa dimensi tampilan ke 20px agar seukuran dengan tombol bintang/edit bawaan
style: 'height: 20px; width: 20px; display: block; opacity: 0.85; vertical-align: middle;'
})
});
// Efek interaksi hover/touch tipis
$btn.hover(
function() { $(this).css({ 'transform': 'scale(1.1)', 'opacity': '1' }); },
function() { $(this).css({ 'transform': 'scale(1.0)', 'opacity': '0.85' }); }
);
var $target = $('.page-actions-menu, .mw-editsection-visualeditor, #ca-edit, .minerva__tab-container').first();
if ($target.length) {
$target.css('position', 'relative').append($btn);
} else {
$('#firstHeading').css('position', 'relative').append($btn);
$btn.css('top', '8px');
}
});
}
});