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 1: Line 1:
/* ==========================================================
function injectFloatingDataBtn(name, domain) {
  🚀 MIPPEDIA DATA BUTTON ONLY (Otomatis - Universal Bridge Version)
  Hanya memunculkan tombol jika data tersedia di pusat.
  Mendukung penuh tampilan Mobile (Login/Anonim) & Desktop.
  ========================================================== */
$(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,
                srlimit: 1,
                format: 'json',
                origin: '*'
            },
            dataType: 'json',
            success: function(wikiRes) {
                var targetDataPage = pageName;
               
                if (wikiRes && wikiRes.query && wikiRes.query.search && wikiRes.query.search.length > 0) {
                    targetDataPage = wikiRes.query.search[0].title;
                }
               
                targetDataPage = targetDataPage.replace(/\s+/g, '_');
 
                // Langkah 2: Cek langsung ke Mippedia Data
                $.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; } }
 
                            if (isExist) {
                                injectFloatingDataBtn(targetDataPage, dataDomain);
                            }
                        }
                    }
                });
            },
            error: function() {
                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;
         if ($('#mippedia-data-btn').length) return;


         var currentSkin = mw.config.get('skin');
         var currentSkin = mw.config.get('skin');


         // Tarik resolusi tinggi (128px) dari server agar di kondisi mana pun tetep Ultra HD / Tajam
         // Tarik resolusi tinggi dari server agar tetap tajam HD
         var api = new mw.Api();
         var api = new mw.Api();
         api.get({
         api.get({
Line 98: Line 26:
             if (!imageUrl) return;
             if (!imageUrl) return;


             // Inisialisasi tombol dasar
             // Buat elemen tombol dengan style flex yang rapi (Tanpa Absolute!)
             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: 'z-index: 1000; text-decoration: none; display: inline-block; transition: transform 0.2s; position: absolute;',
                 style: 'display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; text-decoration: none; transition: transform 0.2s; min-width: 24px;',
                 html: $('<img>', {
                 html: $('<img>', {
                     src: imageUrl,
                     src: imageUrl,
                     alt: 'Data Icon',
                     alt: 'Data Icon',
                     style: 'height: 20px; width: 20px; display: block; opacity: 0.85; vertical-align: middle;'
                     style: 'height: 22px; width: 22px; display: block; opacity: 0.85;'
                 })
                 })
             });
             });


            // Efek hover / touch
             $btn.hover(
             $btn.hover(
                 function() { $(this).css({ 'transform': 'scale(1.15)', 'opacity': '1' }); },
                 function() { $(this).css({ 'transform': 'scale(1.15)', 'opacity': '1' }); },
Line 116: Line 45:
             );
             );


             // 🛠️ STRATEGI DOCKING POSISI BERDASARKAN SKIN & STATUS LOGIN
             // 🛠️ PROSES PENEMPATAN ALAMI (ANTI TUMPUK)
             if (currentSkin === 'minerva') {
             if (currentSkin === 'minerva') {
                 // TAMPILAN MOBILE (MINERVA)
                 // TAMPILAN MOBILE (MINERVA)
                 var $actionMenu = $('.page-actions-menu');
                // Cari barisan menu aksi utama tempat tombol bahasa/pensil berada
                 var $menuBar = $('.page-actions-menu__list, .page-actions-menu');
                  
                  
                 if ($actionMenu.length && $actionMenu.is(':visible')) {
                 if ($menuBar.length) {
                     // Kondisi 1: User Login (Menu Aksi Aktif Sempurna)
                     // Bungkus dengan tag <li> agar sesuai dengan struktur asli Minerva mobile
                     $actionMenu.css('position', 'relative');
                     var $liWrapper = $('<li>', {
                    $btn.css({ 'right': '12px', 'top': '2px' });
                        class: 'page-actions-menu__list-item',
                     $actionMenu.append($btn);
                        style: 'display: inline-flex; align-items: center;'
                    }).append($btn);
 
                    // Selipkan di paling depan (sebelah kiri tombol bahasa)
                     $liWrapper.prependTo($menuBar.first());
                 } else {
                 } else {
                     // Kondisi 2: User Belum Login / Menu Aksi Menyusut
                     // Fallback jika barisan menu tidak terdeteksi (Anonim darurat)
                    // Kita tempelkan langsung sejajar di sisi kanan baris Judul Utama (firstHeading)
                     $('#firstHeading').css('position', 'relative');
                     var $heading = $('#firstHeading');
                     $btn.css({ 'position': 'absolute', 'right': '10px', 'top': '10px', 'width': 'auto', 'height': 'auto' });
                     $heading.css({ 'position': 'relative', 'padding-right': '40px' });
                     $('#firstHeading').append($btn);
                    $btn.css({ 'right': '10px', 'top': '5px' });
                     $heading.append($btn);
                 }
                 }
             } else {
             } else {
                 // TAMPILAN DESKTOP (Vector / Skin Desktop Lainnya)
                 // TAMPILAN DESKTOP (Vector / Skin lainnya)
                // Di desktop, tempat paling rapi adalah di sebelah kiri barisan Tab Atas (Read, Edit, View History)
                 var $desktopTarget = $('#p-views ul, .vector-menu-content-list').first();
                 var $desktopTarget = $('#p-views ul, .vector-menu-content-list').first();
                  
                  
                 if ($desktopTarget.length) {
                 if ($desktopTarget.length) {
                    // Dibungkus `<li>` agar menyatu secara alami dengan struktur menu desktop MediaWiki
                     var $wrapperLi = $('<li>', {  
                     var $wrapperLi = $('<li>', {  
                         style: 'display: inline-block; vertical-align: middle; margin-right: 12px; margin-left: 8px; position: relative; padding-top: 10px;'  
                         style: 'display: inline-block; vertical-align: middle; margin-right: 12px; margin-left: 8px; padding-top: 10px;'  
                     });
                     });
                    $btn.css({ 'position': 'static', 'display': 'inline-block' });
                     $wrapperLi.append($btn);
                     $wrapperLi.append($btn);
                     $desktopTarget.prepend($wrapperLi);
                     $desktopTarget.prepend($wrapperLi);
                 } else {
                 } else {
                    // Fallback aman Desktop jika tab tidak ketemu
                     var $headingDesktop = $('#firstHeading');
                     var $headingDesktop = $('#firstHeading');
                     $headingDesktop.css('position', 'relative');
                     $headingDesktop.css('position', 'relative');
                     $btn.css({ 'right': '20px', 'top': '10px' });
                     $btn.css({ 'position': 'absolute', 'right': '20px', 'top': '10px', 'width': 'auto', 'height': 'auto' });
                     $headingDesktop.append($btn);
                     $headingDesktop.append($btn);
                 }
                 }
Line 157: Line 85:
         });
         });
     }
     }
});

Revision as of 12:38, 29 May 2026

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

        var currentSkin = mw.config.get('skin');

        // Tarik resolusi tinggi dari server agar tetap tajam HD
        var api = new mw.Api();
        api.get({
            action: 'query',
            titles: 'File:Locked_Data.svg',
            prop: 'imageinfo',
            iiprop: 'url',
            iiurlwidth: 128, 
            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]) {
                        imageUrl = pages[id].imageinfo[0].thumburl || pages[id].imageinfo[0].url;
                    }
                }
            } catch (e) { imageUrl = ''; }

            if (!imageUrl) return;

            // Buat elemen tombol dengan style flex yang rapi (Tanpa Absolute!)
            var $btn = $('<a>', {
                id: 'mippedia-data-btn',
                href: domain + '/wiki/' + encodeURIComponent(name),
                target: '_blank',
                style: 'display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; text-decoration: none; transition: transform 0.2s; min-width: 24px;',
                html: $('<img>', {
                    src: imageUrl,
                    alt: 'Data Icon',
                    style: 'height: 22px; width: 22px; display: block; opacity: 0.85;'
                })
            });

            // Efek hover / touch
            $btn.hover(
                function() { $(this).css({ 'transform': 'scale(1.15)', 'opacity': '1' }); },
                function() { $(this).css({ 'transform': 'scale(1.0)', 'opacity': '0.85' }); }
            );

            // 🛠️ PROSES PENEMPATAN ALAMI (ANTI TUMPUK)
            if (currentSkin === 'minerva') {
                // TAMPILAN MOBILE (MINERVA)
                // Cari barisan menu aksi utama tempat tombol bahasa/pensil berada
                var $menuBar = $('.page-actions-menu__list, .page-actions-menu');
                
                if ($menuBar.length) {
                    // Bungkus dengan tag <li> agar sesuai dengan struktur asli Minerva mobile
                    var $liWrapper = $('<li>', {
                        class: 'page-actions-menu__list-item',
                        style: 'display: inline-flex; align-items: center;'
                    }).append($btn);

                    // Selipkan di paling depan (sebelah kiri tombol bahasa)
                    $liWrapper.prependTo($menuBar.first());
                } else {
                    // Fallback jika barisan menu tidak terdeteksi (Anonim darurat)
                    $('#firstHeading').css('position', 'relative');
                    $btn.css({ 'position': 'absolute', 'right': '10px', 'top': '10px', 'width': 'auto', 'height': 'auto' });
                    $('#firstHeading').append($btn);
                }
            } else {
                // TAMPILAN DESKTOP (Vector / Skin lainnya)
                var $desktopTarget = $('#p-views ul, .vector-menu-content-list').first();
                
                if ($desktopTarget.length) {
                    var $wrapperLi = $('<li>', { 
                        style: 'display: inline-block; vertical-align: middle; margin-right: 12px; margin-left: 8px; padding-top: 10px;' 
                    });
                    $wrapperLi.append($btn);
                    $desktopTarget.prepend($wrapperLi);
                } else {
                    var $headingDesktop = $('#firstHeading');
                    $headingDesktop.css('position', 'relative');
                    $btn.css({ 'position': 'absolute', 'right': '20px', 'top': '10px', 'width': 'auto', 'height': 'auto' });
                    $headingDesktop.append($btn);
                }
            }
        });
    }