MediaWiki:Common.js: Perbedaan antara revisi

Tidak ada ringkasan suntingan
Tanda: Suntingan perangkat seluler Suntingan peramban seluler
Tidak ada ringkasan suntingan
Tanda: Dikembalikan Suntingan perangkat seluler Suntingan peramban seluler
Baris 1.309: Baris 1.309:
});
});


/* * Skrip Penarik Infobox Otomatis Mippedia (Fix Gambar & Repo)
/* * Skrip Mippedia Auto-Infobox & Smart Link Fixer
  * Fungsi: Menarik tabel infobox dan memastikan gambar ditarik dari Mippedia Data.
  * Fungsi:  
* 1. Otomatis cek & tarik data dari Mippedia Data berdasarkan judul halaman.
* 2. Memperbaiki link merah menjadi biru jika artikel lokal tersedia.
* 3. Memperbaiki URL gambar agar sinkron dengan ForeignAPIRepo.
  */
  */
$(document).ready(function() {
$(document).ready(function() {
     var pageName = mw.config.get('wgPageName');
     var pageName = mw.config.get('wgPageName');
     var container = $('#mip-infobox-container');
     var namespace = mw.config.get('wgNamespaceNumber');
     var dataDomain = 'https://data.mippedia.org'; // Domain pusat data
     var dataDomain = 'https://data.mippedia.org'; // Domain pusat data lo


     if (container.length) {
    // HANYA JALAN DI NAMESPACE UTAMA (ARTIKEL)
     if (namespace === 0) {
       
        // 1. BUAT PENAMPUNG INFOBOX OTOMATIS (Tanpa perlu edit manual)
        // Kita taruh di paling atas konten artikel
        var $autoContainer = $('<div id="mip-auto-infobox"></div>');
        $('#mw-content-text').prepend($autoContainer);
 
        // 2. CEK DATA KE PUSAT
         $.ajax({
         $.ajax({
             url: dataDomain + '/api.php',
             url: dataDomain + '/api.php',
Baris 1.332: Baris 1.344:
                     var html = data.parse.text['*'];
                     var html = data.parse.text['*'];
                     var $html = $(html);
                     var $html = $(html);
                   
                     var $infobox = $html.find('table.infobox');
                     var infobox = $html.find('table.infobox');
 
                    if (infobox.length) {
                        // 1. HAPUS BAGIAN DESKRIPSI (Agar tidak double)
                        infobox.find('#mip-desc-section').remove();
 
                        // 2. FIX URL GAMBAR DI DALAM INFOBOX
                        // Ini bagian yang tadi terhapus, buat nampilin gambar yang ditarik AJAX
                        infobox.find('img').each(function() {
                            var $img = $(this);
                            var oldSrc = $img.attr('src');


                            if (oldSrc && !oldSrc.startsWith('http')) {
                    if ($infobox.length) {
                                $img.attr('src', dataDomain + oldSrc);
                        // Bersihkan Deskripsi Otomatis (biar gak double)
                            }
                        $infobox.find('#mip-desc-section').remove();  


                            // Fix srcset agar gambar tajam di HP
                        // Fix Gambar (biar muncul di infobox)
                            var oldSrcset = $img.attr('srcset');
                        $infobox.find('img').each(function() {
                            if (oldSrcset) {
                            var src = $(this).attr('src');
                                var newSrcset = oldSrcset.split(',').map(function(part) {
                            if (src && !src.startsWith('http')) {
                                    part = part.trim();
                                 $(this).attr('src', dataDomain + src);
                                    return (part.startsWith('/') && !part.startsWith('//')) ? dataDomain + part : part;
                                 }).join(', ');
                                $img.attr('srcset', newSrcset);
                             }
                             }
                         });
                         });


                         // 3. BERSIHKAN BARIS KOSONG
                         // Tempelkan ke artikel
                         infobox.find('tr').filter(function() {
                         $autoContainer.html($infobox);
                            return $(this).text().trim() === '' && $(this).find('img').length === 0;
                        }).remove();


                         // TAMPILKAN
                         // 3. SMART LINK FIXER (Biar link jadi biru)
                        $('#mip-loading').hide();
                         fixInfoboxLinks($autoContainer);
                         container.html(infobox);
                    } else {
                        container.html('<div style="color:#d33; font-weight:bold;">Data tidak ditemukan di pusat Mippedia Data.</div>');
                     }
                     }
                 }
                 }
            }
        });
    }
    // FUNGSI UNTUK CEK APAKAH ARTIKEL LOKAL ADA (BIAR GAK MERAH)
    function fixInfoboxLinks($container) {
        var titlesToCheck = [];
        var linkMap = {};
        // Kumpulkan semua link di dalam infobox
        $container.find('a').each(function() {
            var $a = $(this);
            var title = $a.attr('title');
            if (title) {
                titlesToCheck.push(title);
                // Tandai link ini sementara sebagai 'new' (merah)
                $a.addClass('new');
            }
        });
        if (titlesToCheck.length === 0) return;
        // Cek ke API Lokal (id.mippedia.org) apakah halaman-halaman ini ada
        $.ajax({
            url: mw.util.wikiScript('api'),
            data: {
                action: 'query',
                titles: titlesToCheck.join('|'),
                format: 'json'
             },
             },
             error: function() {
             success: function(res) {
                 container.html('<div style="color:#d33; font-weight:bold;">Gagal terhubung ke server Mippedia Data.</div>');
                 var pages = res.query.pages;
                var existingPages = {};
 
                for (var id in pages) {
                    if (id > 0) { // Jika ID > 0, artinya halaman ada (biru)
                        existingPages[pages[id].title] = true;
                    }
                }
 
                // Update tampilan link
                $container.find('a').each(function() {
                    var $a = $(this);
                    var title = $a.attr('title');
                   
                    if (existingPages[title]) {
                        // JIKA ADA: Hapus class 'new' (jadi biru) dan arahkan link ke lokal
                        $a.removeClass('new');
                        $a.attr('href', mw.util.getUrl(title));
                    } else {
                        // JIKA TIDAK ADA: Arahkan link ke halaman edit lokal (tetap merah)
                        $a.attr('href', mw.util.getUrl(title, { action: 'edit', redlink: '1' }));
                    }
                });
             }
             }
         });
         });
     }
     }
});
});