MediaWiki:Common.js: Difference between revisions
No edit summary Tags: Reverted Mobile edit Mobile web edit |
No edit summary Tags: Reverted Mobile edit Mobile web edit |
||
| Line 1: | Line 1: | ||
/* ========================================================== | /* ========================================================== | ||
🚀 MIPPEDIA DATA BUTTON ONLY (Otomatis - | 🚀 MIPPEDIA DATA BUTTON ONLY (Otomatis - Universal Bridge Version) | ||
Hanya memunculkan tombol jika data tersedia di pusat. | Hanya memunculkan tombol jika data tersedia di pusat. | ||
Mendukung | Mendukung penuh tampilan Mobile (Login/Anonim) & Desktop. | ||
========================================================== */ | ========================================================== */ | ||
$(document).ready(function() { | $(document).ready(function() { | ||
| Line 21: | Line 21: | ||
action: 'query', | action: 'query', | ||
list: 'search', | list: 'search', | ||
srsearch: pageName, | srsearch: pageName, | ||
srlimit: 1, | srlimit: 1, | ||
format: 'json', | format: 'json', | ||
| Line 28: | Line 28: | ||
dataType: 'json', | dataType: 'json', | ||
success: function(wikiRes) { | success: function(wikiRes) { | ||
var targetDataPage = pageName; | var targetDataPage = pageName; | ||
if (wikiRes && wikiRes.query && wikiRes.query.search && wikiRes.query.search.length > 0) { | if (wikiRes && wikiRes.query && wikiRes.query.search && wikiRes.query.search.length > 0) { | ||
targetDataPage = wikiRes.query.search[0].title; | targetDataPage = wikiRes.query.search[0].title; | ||
} | } | ||
targetDataPage = targetDataPage.replace(/\s+/g, '_'); | targetDataPage = targetDataPage.replace(/\s+/g, '_'); | ||
// Langkah 2: Cek langsung ke Mippedia Data | // Langkah 2: Cek langsung ke Mippedia Data | ||
$.ajax({ | $.ajax({ | ||
url: dataDomain + '/api.php', | url: dataDomain + '/api.php', | ||
data: { | data: { action: 'query', titles: targetDataPage, format: 'json', origin: '*' }, | ||
dataType: 'jsonp', | dataType: 'jsonp', | ||
success: function(res) { | success: function(res) { | ||
| Line 52: | Line 45: | ||
var pages = res.query.pages; | var pages = res.query.pages; | ||
var isExist = false; | var isExist = false; | ||
for (var id in pages) { if (parseInt(id) > 0) { isExist = true; break; } } | |||
for (var id in pages) { | |||
if (isExist) { | if (isExist) { | ||
injectFloatingDataBtn(targetDataPage, dataDomain); | injectFloatingDataBtn(targetDataPage, dataDomain); | ||
| Line 69: | Line 55: | ||
}, | }, | ||
error: function() { | error: function() { | ||
var nativePage = pageName.replace(/\s+/g, '_'); | var nativePage = pageName.replace(/\s+/g, '_'); | ||
$.ajax({ | $.ajax({ | ||
| Line 89: | Line 74: | ||
if ($('#mippedia-data-btn').length) return; | 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(); | var api = new mw.Api(); | ||
api.get({ | api.get({ | ||
| Line 96: | Line 83: | ||
prop: 'imageinfo', | prop: 'imageinfo', | ||
iiprop: 'url', | iiprop: 'url', | ||
iiurlwidth: | iiurlwidth: 128, | ||
format: 'json' | format: 'json' | ||
}).done(function(data) { | }).done(function(data) { | ||
| Line 107: | Line 94: | ||
} | } | ||
} | } | ||
} catch (e) { | } catch (e) { imageUrl = ''; } | ||
if (!imageUrl) return; | if (!imageUrl) return; | ||
// Inisialisasi tombol dasar | |||
var $btn = $('<a>', { | var $btn = $('<a>', { | ||
id: 'mippedia-data-btn', | id: 'mippedia-data-btn', | ||
href: domain + '/wiki/' + encodeURIComponent(name), | href: domain + '/wiki/' + encodeURIComponent(name), | ||
target: '_blank', | target: '_blank', | ||
style: 'z-index: 1000; text-decoration: none; display: inline-block; transition: transform 0.2s; position: absolute;', | |||
style: ' | |||
html: $('<img>', { | html: $('<img>', { | ||
src: imageUrl, | src: imageUrl, | ||
alt: 'Data Icon', | alt: 'Data Icon', | ||
style: 'height: 20px; width: 20px; display: block; opacity: 0.85; vertical-align: middle;' | style: 'height: 20px; width: 20px; display: block; opacity: 0.85; vertical-align: middle;' | ||
}) | }) | ||
}); | }); | ||
$btn.hover( | $btn.hover( | ||
function() { $(this).css({ 'transform': 'scale(1. | function() { $(this).css({ 'transform': 'scale(1.15)', 'opacity': '1' }); }, | ||
function() { $(this).css({ 'transform': 'scale(1.0)', 'opacity': '0.85' }); } | function() { $(this).css({ 'transform': 'scale(1.0)', 'opacity': '0.85' }); } | ||
); | ); | ||
var $ | // 🛠️ 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 { | } else { | ||
$('# | // TAMPILAN DESKTOP (Vector / Skin Desktop Lainnya) | ||
$btn.css('top' | // 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); | |||
} | |||
} | } | ||
}); | }); | ||
} | } | ||
}); | }); | ||