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 697: Baris 697:


/* ==========================================================
/* ==========================================================
   🔍 MIPPEDIA DATA - CONTEXTUAL GLOBAL SEARCH
   🗞️ MIPPEDIA DATA - GLOBAL NEWS FEED
   Fitur: Mencari entitas di seluruh ekosistem Mippedia & Wikidata
   Otomatis menarik artikel terkait dari Mippedia ID
   ========================================================== */
   ========================================================== */
(function() {
(function() {
     $(document).ready(function() {
     $(document).ready(function() {
         // Targetkan input pencarian MediaWiki
         var pageTitle = mw.config.get('wgPageName').replace(/_/g, ' ');
         var $searchInput = $('#searchInput');
         var $target = $('#mw-content-text');
        if (!$searchInput.length) return;


         // Buat kontainer hasil pencarian global
         // Jangan jalan di Halaman Utama
         var $globalResultBox = $('<div id="mip-global-search-results">').css({
         if (mw.config.get('wgNamespaceNumber') !== 0 || pageTitle === 'Halaman Utama') return;
            'position': 'absolute',
            'top': '100%',
            'left': '0',
            'width': '100%',
            'background': '#fff',
            'border': '1px solid #ddd',
            'border-radius': '0 0 8px 8px',
            'box-shadow': '0 4px 12px rgba(0,0,0,0.1)',
            'z-index': '9999',
            'display': 'none',
            'font-size': '0.85em'
        });


         $searchInput.parent().css('position', 'relative').append($globalResultBox);
         var apiUrl = "https://id.mippedia.org/api.php?action=query&list=search&srsearch=" + encodeURIComponent(pageTitle) + "&srlimit=3&format=json&origin=*";


         var searchTimeout;
         $.getJSON(apiUrl, function(data) {
            var searchResults = data.query.search;
           
            if (searchResults.length > 0) {
                var $newsBox = $('<div id="mip-news-feed">').css({
                    'margin': '25px 0', 'padding': '15px', 'background': '#fff',
                    'border': '1px solid #e0daff', 'border-left': '4px solid #6a5acd', 'border-radius': '8px'
                });


        $searchInput.on('input', function() {
                $newsBox.append('<div style="font-weight:bold; color:#6a5acd; margin-bottom:12px; font-size:0.95em;">🗞️ Update Terkait di Mippedia</div>');
            var query = $(this).val().trim();
               
            clearTimeout(searchTimeout);
                searchResults.forEach(function(res) {
                    var link = "https://id.mippedia.org/wiki/" + encodeURIComponent(res.title.replace(/ /g, '_'));
                    var item = '<div style="margin-bottom:10px; border-bottom:1px solid #f0f0f0; padding-bottom:8px;">' +
                              '<a href="' + link + '" target="_blank" style="font-weight:bold; color:#333; text-decoration:none; font-size:0.9em;">' + res.title + '</a>' +
                              '<div style="font-size:0.8em; color:#666; margin-top:3px;">' + res.snippet + '...</div>' +
                              '</div>';
                    $newsBox.append(item);
                });


            if (query.length < 3) {
                // Masukkan setelah peta relasi atau deskripsi
                 $globalResultBox.hide().empty();
                 $target.append($newsBox);
                return;
             }
             }
        });
    });
})();


            searchTimeout = setTimeout(function() {
/* ==========================================================
                $globalResultBox.show().html('<div style="padding:10px; color:#888;">🔍 Mencari di ekosistem Mippedia...</div>');
  🧠 MIPPEDIA DATA - SMART REDIRECT SUGGESTION
  Mendeteksi typo dan menyarankan halaman yang benar
  ========================================================== */
(function() {
    $(document).ready(function() {
        // Cek apakah ini halaman "Halaman tidak ditemukan"
        if (!$('.noarticletext').length && !$('#noarticletext').length) return;


                // Lakukan pencarian lintas API
        var brokenTitle = mw.config.get('wgPageName').replace(/_/g, ' ');
                // 1. Mippedia English (Contoh API)
        var api = new mw.Api();
                var apiEn = "https://id.mippedia.org/api.php?action=opensearch&search=" + query + "&limit=1&format=json&origin=*";
                // 2. Wikidata
                var apiWd = "https://www.wikidata.org/w/api.php?action=wbsearchentities&search=" + query + "&language=id&limit=1&format=json&origin=*";


                Promise.all([
        api.get({
                    fetch(apiEn).then(res => res.json()).catch(() => null),
            action: 'query',
                    fetch(apiWd).then(res => res.json()).catch(() => null)
            list: 'search',
                 ]).then(results => {
            srsearch: brokenTitle,
                    $globalResultBox.empty();
            srlimit: 3,
                    var found = false;
            format: 'json'
 
        }).done(function(data) {
                    // Header
            var suggestions = data.query.search;
                    $globalResultBox.append('<div style="padding:8px; background:#f8f9fa; font-weight:bold; border-bottom:1px solid #eee; color:#6a5acd;">🌐 Hasil Lintas Ekosistem</div>');
           
 
            if (suggestions.length > 0) {
                     // Result Mippedia English
                 var $suggestBox = $('<div id="mip-suggest-box">').css({
                    if (results[0] && results[0][1].length > 0) {
                     'margin': '20px 0', 'padding': '20px', 'background': '#f4f1ff',
                        appendResult("Mippedia English", results[0][1][0], results[0][3][0], "🇬🇧");
                     'border': '1px solid #6a5acd', 'border-radius': '12px', 'text-align': 'center'
                        found = true;
                });
                     }
 
                    // Result Wikidata
                    if (results[1] && results[1].search && results[1].search.length > 0) {
                        var wd = results[1].search[0];
                        appendResult("Wikidatabase", wd.label, "https://www.wikidata.org/wiki/" + wd.id, "📦");
                        found = true;
                    }


                    if (!found) {
                $suggestBox.append('<div style="font-size:1.5em; margin-bottom:10px;">🤔</div>');
                        $globalResultBox.append('<div style="padding:10px; color:#999;">Tidak ditemukan entitas terkait di luar wiki ini.</div>');
                $suggestBox.append('<div style="font-weight:bold; color:#333;">Halaman tidak ditemukan, tapi mungkin maksud Anda:</div>');
                     }
               
                var $list = $('<div style="margin-top:15px; display:flex; flex-wrap:wrap; justify-content:center; gap:10px;"></div>');
               
                suggestions.forEach(function(s) {
                    var sLink = '<a href="/wiki/' + encodeURIComponent(s.title.replace(/ /g, '_')) + '" ' +
                                'style="padding:8px 15px; background:#6a5acd; color:white; border-radius:20px; text-decoration:none; font-weight:bold; font-size:0.9em;">' +
                                s.title + '</a>';
                     $list.append(sLink);
                 });
                 });
            }, 500);
        });
        function appendResult(source, title, url, icon) {
            var $item = $('<a href="' + url + '" target="_blank">').css({
                'display': 'block',
                'padding': '10px',
                'text-decoration': 'none',
                'color': '#333',
                'border-bottom': '1px solid #f0f0f0'
            }).hover(
                function() { $(this).css('background', '#f0eeff'); },
                function() { $(this).css('background', 'transparent'); }
            );
            $item.html('<span style="margin-right:8px;">' + icon + '</span>' +
                      '<strong>' + title + '</strong>' +
                      '<div style="font-size:0.75em; color:#6a5acd;">Tersedia di ' + source + ' →</div>');
           
            $globalResultBox.append($item);
        }


        // Tutup jika klik di luar
                $suggestBox.append($list);
        $(document).on('click', function(e) {
                $('.noarticletext').first().after($suggestBox);
            if (!$(e.target).closest('#mip-global-search-results, #searchInput').length) {
                $globalResultBox.hide();
             }
             }
         });
         });
     });
     });
})();
})();