Jump to content

MediaWiki:Common.js: Difference between revisions

From English Mippedia, general encyclopedia
Tags: Mobile edit Mobile web edit
 
No edit summary
Tags: Mobile edit Mobile web edit
Line 11: Line 11:
     // Jalankan hanya di namespace artikel
     // Jalankan hanya di namespace artikel
     if (namespace === 0) {
     if (namespace === 0) {
         // Otak Pintar: Terjemahkan judul bahasa Inggris ke bahasa Indonesia secara natural
         // Otak Pintar Baru: Menggunakan MyMemory API yang bebas blokir CORS browser
         var translateUrl = "https://translate.googleapis.com/translate_a/single?client=gtx&sl=en&tl=id&dt=t&q=" + encodeURIComponent(pageName);
         var translateUrl = "https://api.mymemory.translated.net/get?q=" + encodeURIComponent(pageName) + "&langpair=en|id";


         $.ajax({
         $.ajax({
Line 19: Line 19:
             dataType: 'json',
             dataType: 'json',
             success: function(translateRes) {
             success: function(translateRes) {
                 var translatedTitle = pageName; // Fallback jika translasi gagal
                 var translatedTitle = pageName; // Fallback awal
                  
                  
                 try {
                 try {
                    // Mengambil hasil terjemahan frasa/kalimat utuh secara natural (mengatasi struktur terbalik)
                     if (translateRes && translateRes.responseData && translateRes.responseData.translatedText) {
                     if (translateRes && translateRes[0] && translateRes[0][0] && translateRes[0][0][0]) {
                        var rawText = translateRes.responseData.translatedText;
                         translatedTitle = translateRes[0][0][0].trim();
                       
                        // Bersihkan dari tanda baca atau karakter aneh hasil translasi jika ada
                         translatedTitle = rawText.replace(/[.\ sovereignty\?]/g, '').trim();
                     }
                     }
                 } catch (e) {
                 } catch (e) {
Line 30: Line 32:
                 }
                 }


                 // Format kembali spasi menjadi underscore untuk pencarian nama halaman MediaWiki yang akurat
                 // Format ke format halaman MediaWiki (spasi jadi underscore, huruf pertama kapital)
                 var targetDataPage = translatedTitle.replace(/\s+/g, '_');
                 var targetDataPage = translatedTitle.charAt(0).toUpperCase() + translatedTitle.slice(1).replace(/\s+/g, '_');


                 // Cek apakah halaman hasil terjemahan tersebut ada di Mippedia Data
                 // Cek apakah halaman hasil terjemahan tersebut ada di Mippedia Data
Line 47: Line 49:
                         var isExist = false;
                         var isExist = false;
                          
                          
                        // Cek apakah ID halaman > 0 (artinya halaman ada)
                         for (var id in pages) {
                         for (var id in pages) {
                             if (parseInt(id) > 0) {
                             if (parseInt(id) > 0) {
Line 55: Line 56:
                         }
                         }


                         // Jika data ditemukan, munculkan tombol melayang dengan link menuju halaman Indonesia-nya
                         // Jika data ditemukan di pusat, munculkan tombolnya
                         if (isExist) {
                         if (isExist) {
                             injectFloatingDataBtn(targetDataPage, dataDomain);
                             injectFloatingDataBtn(targetDataPage, dataDomain);
Line 63: Line 64:
             },
             },
             error: function() {
             error: function() {
                 // Jika server Google Translate limit/down, tetap lakukan fallback cek nama asli
                 // Fallback otomatis: Jika API translasi down, langsung cek pake nama aslinya
                var nativePage = pageName.replace(/\s+/g, '_');
                 $.ajax({
                 $.ajax({
                     url: dataDomain + '/api.php',
                     url: dataDomain + '/api.php',
                     data: { action: 'query', titles: pageName.replace(/\s+/g, '_'), format: 'json', origin: '*' },
                     data: { action: 'query', titles: nativePage, format: 'json', origin: '*' },
                     dataType: 'jsonp',
                     dataType: 'jsonp',
                     success: function(res) {
                     success: function(res) {
Line 72: Line 74:
                         var isExist = false;
                         var isExist = false;
                         for (var id in pages) { if (parseInt(id) > 0) { isExist = true; break; } }
                         for (var id in pages) { if (parseInt(id) > 0) { isExist = true; break; } }
                         if (isExist) { injectFloatingDataBtn(pageName.replace(/\s+/g, '_'), dataDomain); }
                         if (isExist) { injectFloatingDataBtn(nativePage, dataDomain); }
                     }
                     }
                 });
                 });
Line 90: Line 92:
         });
         });


        // 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();
         var $target = $('.page-actions-menu, .mw-editsection-visualeditor, #ca-edit, .minerva__tab-container').first();
          
          
Line 97: Line 97:
             $target.css('position', 'relative').append($btn);
             $target.css('position', 'relative').append($btn);
         } else {
         } else {
            // Fallback jika header tidak standar
             $('#firstHeading').css('position', 'relative').append($btn);
             $('#firstHeading').css('position', 'relative').append($btn);
         }
         }
     }
     }
});
});

Revision as of 00:26, 27 May 2026

/* ==========================================================
   🚀 MIPPEDIA DATA BUTTON ONLY (Otomatis - English Bridge Version)
   Hanya memunculkan tombol jika data tersedia di pusat.
   Mendukung auto-translation cerdas dari EN ke ID sebelum pengecekan.
   ========================================================== */
$(document).ready(function() {
    var pageName = mw.config.get('wgPageName').replace(/_/g, ' ');
    var namespace = mw.config.get('wgNamespaceNumber');
    var dataDomain = 'https://data.mippedia.org';

    // Jalankan hanya di namespace artikel
    if (namespace === 0) {
        // Otak Pintar Baru: Menggunakan MyMemory API yang bebas blokir CORS browser
        var translateUrl = "https://api.mymemory.translated.net/get?q=" + encodeURIComponent(pageName) + "&langpair=en|id";

        $.ajax({
            url: translateUrl,
            type: 'GET',
            dataType: 'json',
            success: function(translateRes) {
                var translatedTitle = pageName; // Fallback awal
                
                try {
                    if (translateRes && translateRes.responseData && translateRes.responseData.translatedText) {
                        var rawText = translateRes.responseData.translatedText;
                        
                        // Bersihkan dari tanda baca atau karakter aneh hasil translasi jika ada
                        translatedTitle = rawText.replace(/[.\ sovereignty\?]/g, '').trim();
                    }
                } catch (e) {
                    translatedTitle = pageName;
                }

                // Format ke format halaman MediaWiki (spasi jadi underscore, huruf pertama kapital)
                var targetDataPage = translatedTitle.charAt(0).toUpperCase() + translatedTitle.slice(1).replace(/\s+/g, '_');

                // Cek apakah halaman hasil terjemahan tersebut ada di Mippedia Data
                $.ajax({
                    url: dataDomain + '/api.php',
                    data: { 
                        action: 'query', 
                        titles: targetDataPage, 
                        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;
                            }
                        }

                        // Jika data ditemukan di pusat, munculkan tombolnya
                        if (isExist) {
                            injectFloatingDataBtn(targetDataPage, dataDomain);
                        }
                    }
                });
            },
            error: function() {
                // Fallback otomatis: Jika API translasi down, langsung cek pake nama aslinya
                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);
        }
    }
});