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 DATA BUTTON ONLY (Otomatis)
  Hanya memunculkan tombol jika data tersedia di pusat.
  ========================================================== */
$(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 && $container.length) {
    // Jalankan hanya di namespace artikel
     if (namespace === 0) {
        // Cek apakah halaman tersebut ada di Mippedia Data
         $.ajax({
         $.ajax({
             url: dataDomain + '/api.php',
             url: dataDomain + '/api.php',
             data: { action: 'parse', page: pageName, prop: 'text', format: 'json', origin: '*' },
             data: {  
                action: 'query',  
                titles: pageName,  
                format: 'json',  
                origin: '*'  
            },
             dataType: 'jsonp',
             dataType: 'jsonp',
             success: function(data) {
             success: function(res) {
                 if (data.parse && data.parse.text) {
                 var pages = res.query.pages;
                    var $html = $(data.parse.text['*']);
                var isExist = false;
                    var $infobox = $html.find('table.infobox');
               
 
                // Cek apakah ID halaman > 0 (artinya halaman ada)
                    if ($infobox.length) {
                for (var id in pages) {
                        // 1. TOMBOL DATA MELAYANG (Gak ganggu Tab)
                    if (parseInt(id) > 0) {
                        injectFloatingDataBtn(pageName);
                         isExist = true;
 
                         break;
                        // 2. FIX GAMBAR (UKURAN ASLI DARI DATA)
                    }
                        $infobox.find('img').each(function() {
                }
                            var rawAlt = $(this).attr('alt') || "";
                            var fileMatch = rawAlt.match(/[^\|\[\]]+\.(jpg|jpeg|png|gif|svg|webp)/i);
                            if (fileMatch) {
                                var pureName = fileMatch[0].replace(/Berkas:|File:/i, '').trim();
                                // Pakai URL asli tanpa paksa lebar 350px
                                $(this).attr('src', '/thumb.php?f=' + encodeURIComponent(pureName) + '&w=500');
                                $(this).attr('srcset', '');
                                $(this).css({'width': '100%', 'height': 'auto'}); // Biar pas di kotak infobox
                            }
                         });
 
                         // 3. FIX LINK (BIAR GAK MERAH - JANGAN BUANG KURUNG)
                        $infobox.find('a').each(function() {
                            var href = $(this).attr('href') || '';
                            var fullText = $(this).text().trim();
                           
                            // Ambil judul asli dari attribute title (ini yang paling akurat dari MediaWiki)
                            var realTarget = $(this).attr('title') || fullText;
 
                            if (href.indexOf('http') !== 0 && fullText.length > 2) {
                                $(this).attr('data-real-title', realTarget);
                                // Tampilan teks tetep apa adanya (biar pipe link [[A|B]] tetep muncul B)
                            } else {
                                $(this).addClass('is-safe-link');
                            }
                        });
 
                        // 4. MASUKKAN KE CONTAINER
                        $('#mip-loading').hide();
                        $container.html($infobox);


                        // 5. JALANKAN CEK LINK (CASE-INSENSITIVE)
                // Jika data ditemukan, munculkan tombol melayang
                        checkLinksPerfect($infobox);
                if (isExist) {
                     } else {
                     injectFloatingDataBtn(pageName, dataDomain);
                        $('#mip-loading').text('Data tidak tersedia.');
                    }
                 }
                 }
             }
             }
Baris 1.325: Baris 1.303:
     }
     }


     function injectFloatingDataBtn(name) {
     function injectFloatingDataBtn(name, domain) {
         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: domain + '/wiki/' + encodeURIComponent(name),
             target: '_blank',
             target: '_blank',
             style: 'position: absolute; right: 10px; top: -30px; background: #36c; color: #fff; padding: 4px 10px; border-radius: 4px; font-weight: bold; font-size: 10px; text-decoration: none; z-index: 1000;',
             style: 'position: absolute; right: 10px; top: -32px; background: #36c; color: #fff; padding: 4px 10px; border-radius: 4px; font-weight: bold; font-size: 10px; text-decoration: none; z-index: 1000; box-shadow: 0 2px 4px rgba(0,0,0,0.1);',
             text: 'DATA'
             text: 'DATA'
         });
         });
         var $target = $('.page-actions-menu, .mw-editsection-visualeditor, #ca-edit');
 
        // Target: Area menu aksi (dekat ikon pensil)
        // Mendukung skin Mobile (Minerva) dan Desktop
         var $target = $('.page-actions-menu, .mw-editsection-visualeditor, #ca-edit, .minerva__tab-container').first();
       
         if ($target.length) {
         if ($target.length) {
             $target.first().css('position', 'relative').append($btn);
             $target.css('position', 'relative').append($btn);
        } else {
            // Fallback jika header tidak standar
            $('#firstHeading').css('position', 'relative').append($btn);
         }
         }
    }
    function checkLinksPerfect($container) {
        var titles = [];
        $container.find('a:not(.is-safe-link)').each(function() {
            var t = $(this).attr('data-real-title');
            if (t) titles.push(t);
        });
        if (!titles.length) return;
        $.ajax({
            url: mw.util.wikiScript('api'),
            data: { action: 'query', titles: titles.join('|'), format: 'json' },
            success: function(res) {
                var pages = res.query.pages;
                var existMap = {};
                // Mapping judul yang beneran ada di wiki lokal (Lowercase)
                for (var id in pages) {
                    if (parseInt(id) > 0) existMap[pages[id].title.toLowerCase()] = pages[id].title;
                }
                $container.find('a:not(.is-safe-link)').each(function() {
                    var myTitle = $(this).attr('data-real-title');
                    var lower = myTitle.toLowerCase();
                   
                    if (existMap[lower]) {
                        // KETEMU: Jadi Biru (Pakai judul resmi dari database)
                        $(this).removeClass('new').attr('href', mw.util.getUrl(existMap[lower]));
                    } else {
                        // GAK KETEMU: Tetep Merah
                        $(this).addClass('new').attr('href', mw.util.getUrl(myTitle, { action: 'edit', redlink: '1' }));
                    }
                });
            }
        });
     }
     }
});
});