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.262: Baris 1.262:
});
});


/* ==========================================================
  🚀 MIPPEDIA OMNI-AUTO v7 (Stable & Precision Edition)
  Fix: Image Path, Precision Button, & Bracket Link Support
  ========================================================== */
$(document).ready(function() {
$(document).ready(function() {
     var pageName = mw.config.get('wgPageName');
     var pageName = mw.config.get('wgPageName');
     var namespace = mw.config.get('wgNamespaceNumber');
     var namespace = mw.config.get('wgNamespaceNumber');
     var dataDomain = 'https://data.mippedia.org';
     var dataDomain = 'https://data.mippedia.org';
    var $container = $('#mip-infobox-container');


     if (namespace === 0) {
     if (namespace === 0 && $container.length) {
         $.ajax({
         $.ajax({
             url: dataDomain + '/api.php',
             url: dataDomain + '/api.php',
Baris 1.282: Baris 1.279:


                     if ($infobox.length) {
                     if ($infobox.length) {
                         // 1. PINDAHKAN TOMBOL DATA KE ATAS IKON PENSIL
                         // 1. TOMBOL KECIL DI ATAS PENSIL (Gak ganggu Tab)
                         injectDataButtonPrecision(pageName);
                         injectSmallDataBtn(pageName);


                         // 2. FIX GAMBAR (Ambil murni nama file saja)
                         // 2. FIX GAMBAR (Pisahin Nama File dari Deskripsi)
                         $infobox.find('img').each(function() {
                         $infobox.find('img').each(function() {
                             var rawSource = $(this).attr('alt') || "";
                             var rawAlt = $(this).attr('alt') || "";
                            // Cari ekstensi gambar untuk memisahkan nama file dari deskripsi
                             var fileMatch = rawAlt.match(/[^\|\[\]]+\.(jpg|jpeg|png|gif|svg|webp)/i);
                             var fileMatch = rawSource.match(/[^\|\[\]]+\.(jpg|jpeg|png|gif|svg|webp)/i);
                           
                             if (fileMatch) {
                             if (fileMatch) {
                                 var pureFileName = fileMatch[0].replace(/Berkas:|File:/i, '').trim();
                                 var pureName = fileMatch[0].replace(/Berkas:|File:/i, '').trim();
                                 $(this).attr('src', '/thumb.php?f=' + encodeURIComponent(pureFileName) + '&w=350');
                                 $(this).attr('src', '/thumb.php?f=' + encodeURIComponent(pureName) + '&w=350');
                                 $(this).attr('srcset', '');
                                 $(this).attr('srcset', '');
                             }
                             }
                         });
                         });


                         // 3. FIX LINK (Support [[Judul (Kurung)]] & [[A|B]])
                         // 3. FIX LINK (Support [[A|B]] & Bracket)
                         $infobox.find('a').each(function() {
                         $infobox.find('a').each(function() {
                             var href = $(this).attr('href') || '';
                             var href = $(this).attr('href') || '';
                             var text = $(this).text().trim();
                             var text = $(this).text().trim();
                             if (href.indexOf('http') !== 0 && text.length > 2) {
                             if (href.indexOf('http') !== 0 && text.length > 2) {
                                // Ambil judul asli dari title attribute jika ada (biasanya MediaWiki parse menyertakan ini)
                                 var target = $(this).attr('title') || text;
                                 var targetTitle = $(this).attr('title') || text;
                                 $(this).attr('data-real-title', target);
                                 $(this).attr('data-real-title', targetTitle);
                                // Hanya tampilkan teks setelah pipe jika ada
                                $(this).text(text.replace(/\s*\(.*?\)\s*/g, '').trim());
                             } else {
                             } else {
                                 $(this).addClass('is-safe-link');
                                 $(this).addClass('is-safe-link');
Baris 1.312: Baris 1.307:
                         });
                         });


                         // 4. PENEMPATAN INFOBOX (Hanya jika template manual sudah ada)
                         // 4. MASUKKAN DATA KE TEMPLATE
                         // Cari posisi paragraf pertama untuk kestabilan mobile
                         $('#mip-loading').hide();
                        var $target = $('#mw-content-text .mw-parser-output > p').first();
                         $container.html($infobox);
                        if ($target.length) {
                            $target.after($infobox);
                         } else {
                            $('#mw-content-text .mw-parser-output').prepend($infobox);
                        }


                         // 5. CEK STATUS LINK (Case-Insensitive)
                         // 5. CEK STATUS LINK (Case-Insensitive)
                         checkLinksFinal($infobox);
                         checkLinksFinal($infobox);
                    } else {
                        $('#mip-loading').text('Data tidak tersedia.');
                     }
                     }
                 }
                 }
             }
             },
            error: function() { $('#mip-loading').text('Gagal memuat data.'); }
         });
         });
     }
     }


     function injectDataButtonPrecision(name) {
     function injectSmallDataBtn(name) {
         if ($('#mippedia-data-btn').length) return;
         if ($('#mippedia-data-btn').length) return;
       
         var $btn = $('<a>', {
         var $btn = $('<a>', {
             id: 'mippedia-data-btn',
             id: 'mippedia-data-btn',
             href: dataDomain + '/wiki/' + encodeURIComponent(name),
             href: dataDomain + '/wiki/' + encodeURIComponent(name),
             target: '_blank',
             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;',
             style: 'display: block; background: #36c; color: #fff; padding: 4px 8px; border-radius: 4px; font-weight: bold; text-align: center; font-size: 10px; margin-bottom: 5px; text-decoration: none; width: fit-content; margin-left: auto;',
             text: 'LIHAT DI MIPPEDIA DATA'
             text: 'DATA'
         });
         });
 
         // Taruh tepat di atas menu aksi (ikon pensil)
         // Target: Tepat di atas wrapper ikon pensil (page-actions-menu di Minerva)
         var $target = $('.page-actions-menu, .mw-editsection-visualeditor, #ca-edit');
         var $editIconWrapper = $('.page-actions-menu, .mw-editsection-visualeditor, #ca-edit');
         if ($target.length) $target.first().before($btn);
         if ($editIconWrapper.length) {
            $editIconWrapper.first().before($btn);
        }
     }
     }


Baris 1.353: Baris 1.342:
             if (t) titles.push(t);
             if (t) titles.push(t);
         });
         });
         if (!titles.length) return;
         if (!titles.length) return;
         $.ajax({
         $.ajax({
             url: mw.util.wikiScript('api'),
             url: mw.util.wikiScript('api'),
Baris 1.362: Baris 1.349:
                 var pages = res.query.pages;
                 var pages = res.query.pages;
                 var map = {};
                 var map = {};
                 for (var id in pages) {
                 for (var id in pages) { if (id > 0) map[pages[id].title.toLowerCase()] = pages[id].title; }
                    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-real-title');
                     var myTitle = $(this).attr('data-real-title');