MediaWiki:Common.js: Difference between revisions

No edit summary
Tags: Mobile edit Mobile web edit
No edit summary
Tags: Manual revert Mobile edit Mobile web edit
 
(9 intermediate revisions by the same user not shown)
Line 2: Line 2:
   🚀 MIPPEDIA DATA BUTTON ONLY (Otomatis - English Bridge Version)
   🚀 MIPPEDIA DATA BUTTON ONLY (Otomatis - English Bridge Version)
   Hanya memunculkan tombol jika data tersedia di pusat.
   Hanya memunculkan tombol jika data tersedia di pusat.
   Mendukung pencarian pintar berbasis Interlanguage Links (EN -> ID).
   Mendukung pencarian otomatis ke Mippedia ID secara mandiri tanpa interwiki manual.
   ========================================================== */
   ========================================================== */
$(document).ready(function() {
$(document).ready(function() {
     var pageName = mw.config.get('wgPageName');
     var pageName = mw.config.get('wgPageName').replace(/_/g, ' ');
     var namespace = mw.config.get('wgNamespaceNumber');
     var namespace = mw.config.get('wgNamespaceNumber');
     var dataDomain = 'https://data.mippedia.org';
     var dataDomain = 'https://data.mippedia.org';
   
    // Alamat API Mippedia Bahasa Indonesia (Sesuaikan URL domainnya jika berbeda)
    var indonesianWikiApi = 'https://id.mippedia.org/api.php';


     // Jalankan hanya di namespace artikel resmi
     // Jalankan hanya di namespace artikel resmi
     if (namespace === 0) {
     if (namespace === 0) {
         // Otak Pintar: Ambil daftar link bahasa lain yang ada di artikel ini
       
         var langLinks = mw.config.get('wgLanguageLinks');
         // Langkah 1: Tembak API Mippedia Indonesia untuk mencari padanan halaman paling relevan
        var targetDataPage = '';
         $.ajax({
 
            url: indonesianWikiApi,
        if (langLinks && langLinks.length > 0) {
            data: {
             // Cari apakah ada link yang mengarah ke bahasa Indonesia (id)
                action: 'query',
            for (var i = 0; i < langLinks.length; i++) {
                list: 'search',
                 if (langLinks[i].lang === 'id') {
                srsearch: pageName, // Mencari padanan berdasarkan judul Inggris
                     // Ketemu! Ambil judul artikel versi Bahasa Indonesianya
                srlimit: 1,
                     targetDataPage = langLinks[i].title.replace(/\s+/g, '_');
                format: 'json',
                    break;
                origin: '*'
            },
            dataType: 'json',
             success: function(wikiRes) {
                var targetDataPage = pageName; // Fallback jika tidak ditemukan
               
                 if (wikiRes && wikiRes.query && wikiRes.query.search && wikiRes.query.search.length > 0) {
                     // Ketemu judul bahasa Indonesianya secara otomatis dari sistem search internal
                     targetDataPage = wikiRes.query.search[0].title;
                 }
                 }
            }
               
        }
                // Format spasi menjadi underscore untuk validasi nama halaman MediaWiki
                targetDataPage = targetDataPage.replace(/\s+/g, '_');


        // Fallback: Jika artikel belum dihubungkan ke bahasa Indonesia, pakai nama aslinya
                // Langkah 2: Cek langsung ke Mippedia Data menggunakan nama halaman Indonesia hasil pelacakan
        if (!targetDataPage) {
                $.ajax({
            targetDataPage = pageName;
                    url: dataDomain + '/api.php',
        }
                    data: {
                        action: 'query',
                        titles: targetDataPage,
                        format: 'json',
                        origin: '*'
                    },
                    dataType: 'jsonp',
                    success: function(res) {
                        if (res && res.query && res.query.pages) {
                            var pages = res.query.pages;
                            var isExist = false;
                           
                            for (var id in pages) {
                                if (parseInt(id) > 0) {
                                    isExist = true;
                                    break;
                                }
                            }


        // Cek langsung ke Mippedia Data menggunakan nama halaman Indonesia/aslinya
                            // Jika data valid ditemukan di pusat, munculkan tombol melayang
        $.ajax({
                            if (isExist) {
            url: dataDomain + '/api.php',
                                injectFloatingDataBtn(targetDataPage, dataDomain);
            data: {
                             }
                action: 'query',  
                titles: targetDataPage,
                format: 'json',
                origin: '*'
            },
            dataType: 'jsonp',
            success: function(res) {
                if (res && res.query && res.query.pages) {
                    var pages = res.query.pages;
                    var isExist = false;
                   
                    for (var id in pages) {
                        if (parseInt(id) > 0) {
                            isExist = true;
                             break;
                         }
                         }
                     }
                     }
 
                });
                    // Jika data valid ditemukan di pusat, munculkan tombol melayang
            },
                     if (isExist) {
            error: function() {
                         injectFloatingDataBtn(targetDataPage, dataDomain);
                // Jika server Wiki Indonesia down, langsung pakai nama asli Inggris-nya sebagai fallback akhir
                var nativePage = pageName.replace(/\s+/g, '_');
                $.ajax({
                    url: dataDomain + '/api.php',
                    data: { action: 'query', titles: nativePage, format: 'json', origin: '*' },
                    dataType: 'jsonp',
                     success: function(res) {
                        var pages = res.query.pages;
                        var isExist = false;
                        for (var id in pages) { if (parseInt(id) > 0) { isExist = true; break; } }
                         if (isExist) { injectFloatingDataBtn(nativePage, dataDomain); }
                     }
                     }
                 }
                 });
             }
             }
         });
         });