MediaWiki:Common.js: Perbedaan antara revisi

Tidak ada ringkasan suntingan
Tanda: Suntingan perangkat seluler Suntingan peramban seluler
Tidak ada ringkasan suntingan
Tanda: Suntingan perangkat seluler Suntingan peramban seluler
Baris 1.263: Baris 1.263:


/* ==========================================================
/* ==========================================================
   🚀 MIPPEDIA OMNI-AUTO v6 (Final Intelligent System)
   🚀 MIPPEDIA OMNI-AUTO v7 (Stable & Precision Edition)
   Fix: Auto-Template, Case-Insensitive, & Pipe Links
   Fix: Image Path, Precision Button, & Bracket Link Support
   ========================================================== */
   ========================================================== */
$(document).ready(function() {
$(document).ready(function() {
Baris 1.282: Baris 1.282:


                     if ($infobox.length) {
                     if ($infobox.length) {
                         // 1. SUNTIK TOMBOL DATA (Otomatis)
                         // 1. PINDAHKAN TOMBOL DATA KE ATAS IKON PENSIL
                         injectDataButton(pageName);
                         injectDataButtonPrecision(pageName);


                         // 2. FIX GAMBAR (Jangan campur nama file dengan deskripsi)
                         // 2. FIX GAMBAR (Ambil murni nama file saja)
                         $infobox.find('img').each(function() {
                         $infobox.find('img').each(function() {
                             var altText = $(this).attr('alt') || "";
                             var rawSource = $(this).attr('alt') || "";
                             // Ambil nama file asli, biasanya ada di alt atau data-file-name
                             // Cari ekstensi gambar untuk memisahkan nama file dari deskripsi
                             var fileName = altText.split('|')[0].replace('Berkas:', '').replace('File:', '').trim();
                             var fileMatch = rawSource.match(/[^\|\[\]]+\.(jpg|jpeg|png|gif|svg|webp)/i);
                              
                              
                             if (fileName) {
                             if (fileMatch) {
                                 $(this).attr('src', '/thumb.php?f=' + encodeURIComponent(fileName) + '&w=350');
                                var pureFileName = fileMatch[0].replace(/Berkas:|File:/i, '').trim();
                                 $(this).attr('src', '/thumb.php?f=' + encodeURIComponent(pureFileName) + '&w=350');
                                 $(this).attr('srcset', '');
                                 $(this).attr('srcset', '');
                             }
                             }
                         });
                         });


                         // 3. PROSES LINK (Support Pipe [[A|B]] & Case-Insensitive)
                         // 3. FIX LINK (Support [[Judul (Kurung)]] & [[A|B]])
                         $infobox.find('a').each(function() {
                         $infobox.find('a').each(function() {
                             var href = $(this).attr('href') || '';
                             var href = $(this).attr('href') || '';
                             var originalText = $(this).text().trim();
                             var text = $(this).text().trim();
                           
 
                            // Jika bukan link medsos/luar
                             if (href.indexOf('http') !== 0 && text.length > 2) {
                             if (href.indexOf('http') !== 0 && originalText.length > 4) {
                                 // Ambil judul asli dari title attribute jika ada (biasanya MediaWiki parse menyertakan ini)
                                 var cleanTitle = originalText.replace(/\s*\(.*?\)\s*/g, '').trim();
                                 var targetTitle = $(this).attr('title') || text;
                                 $(this).attr('data-target-title', cleanTitle);
                                 $(this).attr('data-real-title', targetTitle);
                                 $(this).text(cleanTitle);  
                             } else {
                             } else {
                                 $(this).addClass('is-safe-link');
                                 $(this).addClass('is-safe-link');
Baris 1.312: Baris 1.312:
                         });
                         });


                         // 4. PENEMPATAN: SUNTIK SEOLAH-OLAH PAKE TEMPLATE (SETELAH P1)
                         // 4. PENEMPATAN INFOBOX (Hanya jika template manual sudah ada)
                         var $parserOutput = $('#mw-content-text .mw-parser-output');
                        // Cari posisi paragraf pertama untuk kestabilan mobile
                        var $firstP = $parserOutput.find('> p').filter(function() {
                         var $target = $('#mw-content-text .mw-parser-output > p').first();
                            return $(this).text().trim().length > 15;
                         if ($target.length) {
                        }).first();
                             $target.after($infobox);
 
                         if ($firstP.length) {
                             $firstP.after($infobox);
                         } else {
                         } else {
                             $parserOutput.prepend($infobox);
                             $('#mw-content-text .mw-parser-output').prepend($infobox);
                         }
                         }


                         // 5. CEK STATUS LINK (TIDAK PEKA HURUF BESAR/KECIL)
                         // 5. CEK STATUS LINK (Case-Insensitive)
                         checkLinksIntelligent($infobox);
                         checkLinksFinal($infobox);
                     }
                     }
                 }
                 }
Baris 1.332: Baris 1.329:
     }
     }


     function injectDataButton(name) {
     function injectDataButtonPrecision(name) {
         if ($('#mippedia-data-btn').length) return;
         if ($('#mippedia-data-btn').length) return;
         var $btn = $('<div id="mippedia-data-btn" style="margin:12px 0;">')
       
             .append($('<a>', {
         var $btn = $('<a>', {
                href: dataDomain + '/wiki/' + encodeURIComponent(name),
            id: 'mippedia-data-btn',
                target: '_blank',
             href: dataDomain + '/wiki/' + encodeURIComponent(name),
                style: 'background:#36c; color:#fff; padding:8px 14px; border-radius:6px; font-weight:bold; text-decoration:none; display:inline-block; font-size:12px;',
            target: '_blank',
                text: 'LIHAT DI MIPPEDIA DATA'
            style: 'display: block; background: #36c; color: #fff; padding: 6px; border-radius: 4px; font-weight: bold; text-align: center; font-size: 10px; margin-bottom: 8px; text-decoration: none;',
            }));
            text: 'LIHAT DI MIPPEDIA DATA'
         var $header = $('.estimasi-baca-container, .minerva__subtitle, #siteSub').last();
        });
         if ($header.length) $header.after($btn);
 
        else $('#firstHeading').after($btn);
        // Target: Tepat di atas wrapper ikon pensil (page-actions-menu di Minerva)
         var $editIconWrapper = $('.page-actions-menu, .mw-editsection-visualeditor, #ca-edit');
         if ($editIconWrapper.length) {
            $editIconWrapper.first().before($btn);
        }
     }
     }


     function checkLinksIntelligent($container) {
     function checkLinksFinal($container) {
         var linkData = [];
         var titles = [];
         $container.find('a:not(.is-safe-link)').each(function() {
         $container.find('a:not(.is-safe-link)').each(function() {
             var t = $(this).attr('data-target-title');
             var t = $(this).attr('data-real-title');
             if (t) linkData.push(t);
             if (t) titles.push(t);
         });
         });


         if (!linkData.length) return;
         if (!titles.length) return;


         $.ajax({
         $.ajax({
             url: mw.util.wikiScript('api'),
             url: mw.util.wikiScript('api'),
             data: { action: 'query', titles: linkData.join('|'), format: 'json' },
             data: { action: 'query', titles: titles.join('|'), format: 'json' },
             success: function(res) {
             success: function(res) {
                 var pages = res.query.pages;
                 var pages = res.query.pages;
                 var foundMap = {};
                 var map = {};
               
                // Buat mapping judul yang ada (Lowercase untuk bypass case-sensitive)
                 for (var id in pages) {
                 for (var id in pages) {
                     if (parseInt(id) > 0) {
                     if (parseInt(id) > 0) map[pages[id].title.toLowerCase()] = pages[id].title;
                        foundMap[pages[id].title.toLowerCase()] = pages[id].title;
                    }
                 }
                 }


                 $container.find('a:not(.is-safe-link)').each(function() {
                 $container.find('a:not(.is-safe-link)').each(function() {
                     var myTitle = $(this).attr('data-target-title');
                     var myTitle = $(this).attr('data-real-title');
                     var lowerTitle = myTitle.toLowerCase();
                     var lower = myTitle.toLowerCase();
                   
                     if (map[lower]) {
                     if (foundMap[lowerTitle]) {
                         $(this).removeClass('new').attr('href', mw.util.getUrl(map[lower]));
                        // JIKA ADA (Meskipun beda besar-kecil huruf)
                         $(this).removeClass('new').attr('href', mw.util.getUrl(foundMap[lowerTitle]));
                     } else {
                     } else {
                        // JIKA TIDAK ADA
                         $(this).addClass('new').attr('href', mw.util.getUrl(myTitle, { action: 'edit', redlink: '1' }));
                         $(this).addClass('new').attr('href', mw.util.getUrl(myTitle, { action: 'edit', redlink: '1' }));
                     }
                     }