Jump to content

MediaWiki:Common.js: Difference between revisions

From English Mippedia, general encyclopedia
No edit summary
Tags: Mobile edit Mobile web edit
No edit summary
Tags: Manual revert Mobile edit Mobile web edit
 
(10 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 auto-translation cerdas dari EN ke ID sebelum pengecekan.
   Mendukung pencarian otomatis ke Mippedia ID secara mandiri tanpa interwiki manual.
   ========================================================== */
   ========================================================== */
$(document).ready(function() {
$(document).ready(function() {
Line 8: Line 8:
     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) {
         var translateUrl = "https://api.mymemory.translated.net/get?q=" + encodeURIComponent(pageName) + "&langpair=en|id";
          
 
         // Langkah 1: Tembak API Mippedia Indonesia untuk mencari padanan halaman paling relevan
         // Tembak API translasi terlebih dahulu secara independen
         $.ajax({
         $.ajax({
             url: translateUrl,
             url: indonesianWikiApi,
             type: 'GET',
             data: {
             dataType: 'json'
                action: 'query',
        }).done(function(translateRes) {
                list: 'search',
            var translatedTitle = pageName;
                srsearch: pageName, // Mencari padanan berdasarkan judul Inggris
           
                srlimit: 1,
            if (translateRes && translateRes.responseData && translateRes.responseData.translatedText) {
                format: 'json',
                var rawText = translateRes.responseData.translatedText;
                origin: '*'
                // Bersihkan karakter tak diinginkan dan rapikan kapitalisasi kata
            },
                translatedTitle = rawText.replace(/[.\ sovereignty\?]/g, '').trim();
             dataType: 'json',
            }
            success: function(wikiRes) {
           
                var targetDataPage = pageName; // Fallback jika tidak ditemukan
            // Format teks hasil translasi agar sesuai standar nama halaman MediaWiki
               
            var targetDataPage = translatedTitle.charAt(0).toUpperCase() + translatedTitle.slice(1).replace(/\s+/g, '_');
                if (wikiRes && wikiRes.query && wikiRes.query.search && wikiRes.query.search.length > 0) {
           
                    // Ketemu judul bahasa Indonesianya secara otomatis dari sistem search internal
            // Oper hasil translasi ke mesin pengecek data utama
                    targetDataPage = wikiRes.query.search[0].title;
            checkAndInject(targetDataPage);
                }
               
                // Format spasi menjadi underscore untuk validasi nama halaman MediaWiki
                targetDataPage = targetDataPage.replace(/\s+/g, '_');


        }).fail(function() {
                // Langkah 2: Cek langsung ke Mippedia Data menggunakan nama halaman Indonesia hasil pelacakan
            // Jika API translasi down/limit, langsung paksa cek pakai nama asli (Fallback)
                $.ajax({
            checkAndInject(pageName.replace(/\s+/g, '_'));
                    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;
                                }
                            }


    // Fungsi Utama: Cek ketersediaan data di pusat & eksekusi pembuatan tombol
                            // Jika data valid ditemukan di pusat, munculkan tombol melayang
    function checkAndInject(targetPage) {
                            if (isExist) {
        $.ajax({
                                injectFloatingDataBtn(targetDataPage, dataDomain);
            url: dataDomain + '/api.php',
                             }
            data: {
                action: 'query',
                titles: targetPage,
                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 halaman ber-ID valid (ada di pusat), langsung buat tombolnya
            },
                     if (isExist) {
            error: function() {
                         injectFloatingDataBtn(targetPage, 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); }
                     }
                     }
                 }
                 });
             }
             }
         });
         });

Latest revision as of 18:04, 29 May 2026

/* ==========================================================
   🚀 MIPPEDIA DATA BUTTON ONLY (Otomatis - English Bridge Version)
   Hanya memunculkan tombol jika data tersedia di pusat.
   Mendukung pencarian otomatis ke Mippedia ID secara mandiri tanpa interwiki manual.
   ========================================================== */
$(document).ready(function() {
    var pageName = mw.config.get('wgPageName').replace(/_/g, ' ');
    var namespace = mw.config.get('wgNamespaceNumber');
    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
    if (namespace === 0) {
        
        // Langkah 1: Tembak API Mippedia Indonesia untuk mencari padanan halaman paling relevan
        $.ajax({
            url: indonesianWikiApi,
            data: {
                action: 'query',
                list: 'search',
                srsearch: pageName, // Mencari padanan berdasarkan judul Inggris
                srlimit: 1,
                format: 'json',
                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, '_');

                // Langkah 2: Cek langsung ke Mippedia Data menggunakan nama halaman Indonesia hasil pelacakan
                $.ajax({
                    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;
                                }
                            }

                            // Jika data valid ditemukan di pusat, munculkan tombol melayang
                            if (isExist) {
                                injectFloatingDataBtn(targetDataPage, dataDomain);
                            }
                        }
                    }
                });
            },
            error: function() {
                // 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); }
                    }
                });
            }
        });
    }

    function injectFloatingDataBtn(name, domain) {
        if ($('#mippedia-data-btn').length) return;

        var $btn = $('<a>', {
            id: 'mippedia-data-btn',
            href: domain + '/wiki/' + encodeURIComponent(name),
            target: '_blank',
            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'
        });

        var $target = $('.page-actions-menu, .mw-editsection-visualeditor, #ca-edit, .minerva__tab-container').first();
        
        if ($target.length) {
            $target.css('position', 'relative').append($btn);
        } else {
            $('#firstHeading').css('position', 'relative').append($btn);
        }
    }
});