MediaWiki:Common.js: Perbedaan antara revisi
Tidak ada ringkasan suntingan Tanda: Suntingan perangkat seluler Suntingan peramban seluler |
Tidak ada ringkasan suntingan Tanda: Suntingan perangkat seluler Suntingan peramban seluler |
||
| Baris 1.263: | Baris 1.263: | ||
/* ========================================================== | /* ========================================================== | ||
🚀 MIPPEDIA OMNI-AUTO | 🚀 MIPPEDIA OMNI-AUTO v7 (Stable & Precision Edition) | ||
Fix: | Fix: Image Path, Precision Button, & Bracket Link Support | ||
========================================================== */ | ========================================================== */ | ||
$(document).ready(function() { | $(document).ready(function() { | ||
| Baris 1.282: | Baris 1.282: | ||
if ($infobox.length) { | if ($infobox.length) { | ||
// 1. | // 1. PINDAHKAN TOMBOL DATA KE ATAS IKON PENSIL | ||
injectDataButtonPrecision(pageName); | |||
// 2. FIX GAMBAR ( | // 2. FIX GAMBAR (Ambil murni nama file saja) | ||
$infobox.find('img').each(function() { | $infobox.find('img').each(function() { | ||
var | var rawSource = $(this).attr('alt') || ""; | ||
// | // Cari ekstensi gambar untuk memisahkan nama file dari deskripsi | ||
var | var fileMatch = rawSource.match(/[^\|\[\]]+\.(jpg|jpeg|png|gif|svg|webp)/i); | ||
if ( | if (fileMatch) { | ||
$(this).attr('src', '/thumb.php?f=' + encodeURIComponent( | var pureFileName = fileMatch[0].replace(/Berkas:|File:/i, '').trim(); | ||
$(this).attr('src', '/thumb.php?f=' + encodeURIComponent(pureFileName) + '&w=350'); | |||
$(this).attr('srcset', ''); | $(this).attr('srcset', ''); | ||
} | } | ||
}); | }); | ||
// 3. | // 3. FIX LINK (Support [[Judul (Kurung)]] & [[A|B]]) | ||
$infobox.find('a').each(function() { | $infobox.find('a').each(function() { | ||
var href = $(this).attr('href') || ''; | var href = $(this).attr('href') || ''; | ||
var | var text = $(this).text().trim(); | ||
if (href.indexOf('http') !== 0 && text.length > 2) { | |||
if (href.indexOf('http') !== 0 && | // Ambil judul asli dari title attribute jika ada (biasanya MediaWiki parse menyertakan ini) | ||
var targetTitle = $(this).attr('title') || text; | |||
$(this).attr(' | $(this).attr('data-real-title', targetTitle); | ||
$(this). | |||
} else { | } else { | ||
$(this).addClass('is-safe-link'); | $(this).addClass('is-safe-link'); | ||
| Baris 1.312: | Baris 1.312: | ||
}); | }); | ||
// 4. PENEMPATAN | // 4. PENEMPATAN INFOBOX (Hanya jika template manual sudah ada) | ||
var $ | // Cari posisi paragraf pertama untuk kestabilan mobile | ||
var $target = $('#mw-content-text .mw-parser-output > p').first(); | |||
if ($target.length) { | |||
$target.after($infobox); | |||
if ($ | |||
$ | |||
} else { | } else { | ||
$ | $('#mw-content-text .mw-parser-output').prepend($infobox); | ||
} | } | ||
// 5. CEK STATUS LINK ( | // 5. CEK STATUS LINK (Case-Insensitive) | ||
checkLinksFinal($infobox); | |||
} | } | ||
} | } | ||
| Baris 1.332: | Baris 1.329: | ||
} | } | ||
function | function injectDataButtonPrecision(name) { | ||
if ($('#mippedia-data-btn').length) return; | if ($('#mippedia-data-btn').length) return; | ||
var $btn = $('< | |||
var $btn = $('<a>', { | |||
id: 'mippedia-data-btn', | |||
href: dataDomain + '/wiki/' + encodeURIComponent(name), | |||
target: '_blank', | |||
style: 'display: block; background: #36c; color: #fff; padding: 6px; border-radius: 4px; font-weight: bold; text-align: center; font-size: 10px; margin-bottom: 8px; text-decoration: none;', | |||
text: 'LIHAT DI MIPPEDIA DATA' | |||
var $ | }); | ||
if ($ | |||
// Target: Tepat di atas wrapper ikon pensil (page-actions-menu di Minerva) | |||
var $editIconWrapper = $('.page-actions-menu, .mw-editsection-visualeditor, #ca-edit'); | |||
if ($editIconWrapper.length) { | |||
$editIconWrapper.first().before($btn); | |||
} | |||
} | } | ||
function | function checkLinksFinal($container) { | ||
var | var titles = []; | ||
$container.find('a:not(.is-safe-link)').each(function() { | $container.find('a:not(.is-safe-link)').each(function() { | ||
var t = $(this).attr('data- | var t = $(this).attr('data-real-title'); | ||
if (t) | if (t) titles.push(t); | ||
}); | }); | ||
if (! | if (!titles.length) return; | ||
$.ajax({ | $.ajax({ | ||
url: mw.util.wikiScript('api'), | url: mw.util.wikiScript('api'), | ||
data: { action: 'query', titles: | data: { action: 'query', titles: titles.join('|'), format: 'json' }, | ||
success: function(res) { | success: function(res) { | ||
var pages = res.query.pages; | var pages = res.query.pages; | ||
var | var map = {}; | ||
for (var id in pages) { | for (var id in pages) { | ||
if (parseInt(id) > 0) | if (parseInt(id) > 0) map[pages[id].title.toLowerCase()] = pages[id].title; | ||
} | } | ||
$container.find('a:not(.is-safe-link)').each(function() { | $container.find('a:not(.is-safe-link)').each(function() { | ||
var myTitle = $(this).attr('data- | var myTitle = $(this).attr('data-real-title'); | ||
var | var lower = myTitle.toLowerCase(); | ||
if (map[lower]) { | |||
if ( | $(this).removeClass('new').attr('href', mw.util.getUrl(map[lower])); | ||
$(this).removeClass('new').attr('href', mw.util.getUrl( | |||
} else { | } else { | ||
$(this).addClass('new').attr('href', mw.util.getUrl(myTitle, { action: 'edit', redlink: '1' })); | $(this).addClass('new').attr('href', mw.util.getUrl(myTitle, { action: 'edit', redlink: '1' })); | ||
} | } | ||