Jump to content

MediaWiki:Common.js: Difference between revisions

From English Mippedia, general encyclopedia
No edit summary
Tags: Reverted Mobile edit Mobile web edit
No edit summary
Tags: Reverted Mobile edit Mobile web edit
Line 9: Line 9:
     var dataDomain = 'https://data.mippedia.org';
     var dataDomain = 'https://data.mippedia.org';
      
      
     // Alamat API Mippedia Bahasa Indonesia (Sesuaikan URL domainnya jika berbeda)
     // Alamat API Mippedia Bahasa Indonesia
     var indonesianWikiApi = 'https://id.mippedia.org/api.php';  
     var indonesianWikiApi = 'https://id.mippedia.org/api.php';  


Line 89: Line 89:
         if ($('#mippedia-data-btn').length) return;
         if ($('#mippedia-data-btn').length) return;


         // ⚠️ GANTI URL DI BAWAH INI dengan URL langsung (Direct Link) berkas ikon yang sudah lu upload
         // Otak Cerdas Baru: Panggil API MediaWiki lokal buat nyari link image SVG yang valid
         var iconUrl = 'https://en.mippedia.org/wiki/File:Locked_Data.svg';  
         var api = new mw.Api();
        api.get({
            action: 'query',
            titles: 'File:Locked_Data.svg',
            prop: 'imageinfo',
            iiprop: 'url',
            iiurlwidth: 24, // Minta server MediaWiki render ukuran lebar 24px otomatis
            format: 'json'
        }).done(function(data) {
            var imageUrl = '';
            try {
                var pages = data.query.pages;
                for (var id in pages) {
                    if (pages[id].imageinfo && pages[id].imageinfo[0]) {
                        // Dapat URL render resmi berformat PNG/SVG yang didukung browser!
                        imageUrl = pages[id].imageinfo[0].thumburl || pages[id].imageinfo[0].url;
                    }
                }
            } catch (e) {
                imageUrl = '';
            }
 
            // Jika gagal dapet gambar, pakai fallback ikon dasar murni teks atau kosongan
            if (!imageUrl) return;


        var $btn = $('<a>', {
            var $btn = $('<a>', {
            id: 'mippedia-data-btn',
                id: 'mippedia-data-btn',
            href: domain + '/wiki/' + encodeURIComponent(name),
                href: domain + '/wiki/' + encodeURIComponent(name),
            target: '_blank',
                target: '_blank',
            style: 'position: absolute; right: 10px; top: -35px; z-index: 1000; text-decoration: none; display: inline-block; transition: transform 0.2s;',
                style: 'position: absolute; right: 15px; top: -5px; z-index: 1000; text-decoration: none; display: inline-block; transition: transform 0.2s;',
            html: $('<img>', {
                html: $('<img>', {
                src: iconUrl,
                    src: imageUrl,
                alt: 'Data Icon',
                    alt: 'Data Icon',
                style: 'height: 22px; width: auto; display: block; vertical-align: middle;'
                    style: 'height: 24px; width: 24px; display: block; vertical-align: middle;'
            })
                })
        });
            });


        // Efek hover interaktif tipis-tipis biar keren saat didekati kursor
            // Efek hover interaktif
        $btn.hover(
            $btn.hover(
            function() { $(this).css('transform', 'scale(1.1)'); },
                function() { $(this).css('transform', 'scale(1.15)'); },
            function() { $(this).css('transform', 'scale(1.0)'); }
                function() { $(this).css('transform', 'scale(1.0)'); }
        );
            );


        var $target = $('.page-actions-menu, .mw-editsection-visualeditor, #ca-edit, .minerva__tab-container').first();
            // Target penempatan tombol aksi di Minerva mobile / Desktop skin
       
            var $target = $('.page-actions-menu, .mw-editsection-visualeditor, #ca-edit, .minerva__tab-container').first();
        if ($target.length) {
           
            $target.css('position', 'relative').append($btn);
            if ($target.length) {
        } else {
                $target.css('position', 'relative').append($btn);
            $('#firstHeading').css('position', 'relative').append($btn);
            } else {
         }
                // Fallback aman agar tidak nabrak teks judul halaman utama
                $('#firstHeading').css('position', 'relative').append($btn);
                $btn.css('top', '5px');
            }
         });
     }
     }
});
});

Revision as of 12:21, 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
    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;

        // Otak Cerdas Baru: Panggil API MediaWiki lokal buat nyari link image SVG yang valid
        var api = new mw.Api();
        api.get({
            action: 'query',
            titles: 'File:Locked_Data.svg',
            prop: 'imageinfo',
            iiprop: 'url',
            iiurlwidth: 24, // Minta server MediaWiki render ukuran lebar 24px otomatis
            format: 'json'
        }).done(function(data) {
            var imageUrl = '';
            try {
                var pages = data.query.pages;
                for (var id in pages) {
                    if (pages[id].imageinfo && pages[id].imageinfo[0]) {
                        // Dapat URL render resmi berformat PNG/SVG yang didukung browser!
                        imageUrl = pages[id].imageinfo[0].thumburl || pages[id].imageinfo[0].url;
                    }
                }
            } catch (e) {
                imageUrl = '';
            }

            // Jika gagal dapet gambar, pakai fallback ikon dasar murni teks atau kosongan
            if (!imageUrl) return;

            var $btn = $('<a>', {
                id: 'mippedia-data-btn',
                href: domain + '/wiki/' + encodeURIComponent(name),
                target: '_blank',
                style: 'position: absolute; right: 15px; top: -5px; z-index: 1000; text-decoration: none; display: inline-block; transition: transform 0.2s;',
                html: $('<img>', {
                    src: imageUrl,
                    alt: 'Data Icon',
                    style: 'height: 24px; width: 24px; display: block; vertical-align: middle;'
                })
            });

            // Efek hover interaktif
            $btn.hover(
                function() { $(this).css('transform', 'scale(1.15)'); },
                function() { $(this).css('transform', 'scale(1.0)'); }
            );

            // Target penempatan tombol aksi di Minerva mobile / Desktop skin
            var $target = $('.page-actions-menu, .mw-editsection-visualeditor, #ca-edit, .minerva__tab-container').first();
            
            if ($target.length) {
                $target.css('position', 'relative').append($btn);
            } else {
                // Fallback aman agar tidak nabrak teks judul halaman utama
                $('#firstHeading').css('position', 'relative').append($btn);
                $btn.css('top', '5px'); 
            }
        });
    }
});