Lompat ke isi

MediaWiki:Common.js: Perbedaan antara revisi

Dari Mippedia bahasa Indonesia, ensiklopedia umum
Tidak ada ringkasan suntingan
Tanda: Dikembalikan Suntingan perangkat seluler Suntingan peramban seluler
Tidak ada ringkasan suntingan
Tanda: Dikembalikan Suntingan perangkat seluler Suntingan peramban seluler
Baris 1: Baris 1:
/* Script Otomatis Artikel Terkait - Support Mobile (Minerva) & Desktop */
/* Script Injeksi RelatedArticles Otomatis ke Footer */
$(document).ready(function() {
$(document).ready(function() {
     function initRelatedArticles() {
     if (mw.config.get('wgIsArticle') && mw.config.get('wgAction') === 'view' && mw.config.get('wgNamespaceNumber') === 0) {
        if (mw.config.get('wgIsArticle') && mw.config.get('wgAction') === 'view' && mw.config.get('wgNamespaceNumber') === 0) {
       
           
        // 1. Cek dulu, apakah di halaman ini udah ada kode {{#related}} manual?
            var categories = mw.config.get('wgCategories');
        // Kita cek lewat elemen kelas bawaan ekstensi RelatedArticles
            if (categories.length > 0) {
        if ($('.ext-related-articles-card').length || $('div[id^="related"]').length > 0) {
                // Filter kategori sampah/internal
            return; // Kalau udah ada, berhenti biar gak numpuk
                var cleanCats = categories.filter(function(cat) {
        }
                    return !cat.match(/halaman|artikel|maintenance|dispute|wiki/i);
                });
                var targetCat = cleanCats.length > 0 ? cleanCats[0] : categories[0];


                $.getJSON(mw.util.wikiScript('api'), {
        var categories = mw.config.get('wgCategories');
                    action: 'query',
        if (categories.length > 0) {
                    list: 'categorymembers',
            var targetCat = categories.filter(function(c){ return !c.match(/halaman|artikel|maintenance/i); })[0] || categories[0];
                    cmtitle: 'Category:' + targetCat,
                    cmlimit: 50,
                    format: 'json'
                }, function(data) {
                    var members = data.query.categorymembers;
                    if (!members) return;


                    var currentTitle = mw.config.get('wgPageName').replace(/_/g, ' ');
            // 2. Ambil daftar artikel dalam kategori
                    var filteredMembers = members.filter(function(item) {
            $.getJSON(mw.util.wikiScript('api'), {
                        return item.title !== currentTitle;
                action: 'query',
                    });
                list: 'categorymembers',
                cmtitle: 'Category:' + targetCat,
                cmlimit: 30,
                format: 'json'
            }, function(data) {
                var members = data.query.categorymembers;
                if (!members) return;
 
                var currentTitle = mw.config.get('wgPageName').replace(/_/g, ' ');
                var filtered = members.filter(function(m) { return m.title !== currentTitle; });


                    // ACAK DAFTARNYA
                // Acak dan ambil 3
                    filteredMembers.sort(function() { return 0.5 - Math.random(); });
                filtered.sort(function() { return 0.5 - Math.random(); });
                    var finalSelection = filteredMembers.slice(0, 4);
                var chosen = filtered.slice(0, 3);


                    var html = '<div id="related-footer" style="clear:both; background-color: #f8f9fa; border: 1px solid #a2a9b1; padding: 15px; margin: 20px 0; border-radius: 5px;">';
                if (chosen.length > 0) {
                    html += '<h3 style="margin-top:0; border-bottom: 1px solid #a2a9b1; padding-bottom: 5px; font-size: 1.1em; color: #000;">Halaman Terkait</h3><ul style="list-style-type: none; margin: 10px 0 0 0; padding: 0;">';
                     // 3. Bikin string perintah manual buat ekstensi RelatedArticles
                      
                     var relatedWikiText = "";
                     var count = 0;
                     chosen.forEach(function(item) {
                     $.each(finalSelection, function(i, item) {
                         relatedWikiText += '{{#related:' + item.title + '}}';
                         html += '<li style="margin-bottom: 10px; border-bottom: 1px solid #eaecf0; padding-bottom: 5px;">• <a style="font-weight: bold; color: #0645ad; text-decoration: none;" href="' + mw.util.getUrl(item.title) + '">' + item.title + '</a></li>';
                        count++;
                     });
                     });


                     html += '</ul></div>';
                     // 4. Perintah "Pinter": Nyuruh server ngerender wikitext jadi HTML asli ekstensi
                   
                    $.getJSON(mw.util.wikiScript('api'), {
                     if (count > 0) {
                        action: 'parse',
                         // FIX BUAT MOBILE (Minerva)
                        text: relatedWikiText,
                         // Di Minerva, kita tempel di atas footer atau setelah content-text
                        contentmodel: 'wikitext',
                        prop: 'text',
                        disablelimitreport: 1,
                        format: 'json'
                     }, function(parseData) {
                         var finalHtml = parseData.parse.text['*'];
                       
                        // 5. Tempel hasilnya di bawah artikel
                        var container = $('<div id="auto-related-wrapper" style="clear:both; margin-top:20px;"></div>').append(finalHtml);
                       
                         // Target Minerva (HP) dan Vector (Desktop)
                         if ($('.minerva-footer').length) {
                         if ($('.minerva-footer').length) {
                             $('.minerva-footer').before(html); // Pasang di atas footer HP
                             $('.minerva-footer').before(container);
                         } else if ($('#catlinks').length) {
                         } else if ($('#catlinks').length) {
                             $('#catlinks').after(html); // Pasang setelah kategori Desktop
                             $('#catlinks').after(container);
                         } else {
                         } else {
                             $('#mw-content-text').after(html); // Backup terakhir
                             $('#mw-content-text').after(container);
                         }
                         }
                     }
                     });
                 });
                 }
             }
             });
         }
         }
     }
     }
    // Jalankan fungsi
    initRelatedArticles();
});
});

Revisi per 9 April 2026 19.55

/* Script Injeksi RelatedArticles Otomatis ke Footer */
$(document).ready(function() {
    if (mw.config.get('wgIsArticle') && mw.config.get('wgAction') === 'view' && mw.config.get('wgNamespaceNumber') === 0) {
        
        // 1. Cek dulu, apakah di halaman ini udah ada kode {{#related}} manual?
        // Kita cek lewat elemen kelas bawaan ekstensi RelatedArticles
        if ($('.ext-related-articles-card').length || $('div[id^="related"]').length > 0) {
            return; // Kalau udah ada, berhenti biar gak numpuk
        }

        var categories = mw.config.get('wgCategories');
        if (categories.length > 0) {
            var targetCat = categories.filter(function(c){ return !c.match(/halaman|artikel|maintenance/i); })[0] || categories[0];

            // 2. Ambil daftar artikel dalam kategori
            $.getJSON(mw.util.wikiScript('api'), {
                action: 'query',
                list: 'categorymembers',
                cmtitle: 'Category:' + targetCat,
                cmlimit: 30,
                format: 'json'
            }, function(data) {
                var members = data.query.categorymembers;
                if (!members) return;

                var currentTitle = mw.config.get('wgPageName').replace(/_/g, ' ');
                var filtered = members.filter(function(m) { return m.title !== currentTitle; });

                // Acak dan ambil 3
                filtered.sort(function() { return 0.5 - Math.random(); });
                var chosen = filtered.slice(0, 3);

                if (chosen.length > 0) {
                    // 3. Bikin string perintah manual buat ekstensi RelatedArticles
                    var relatedWikiText = "";
                    chosen.forEach(function(item) {
                        relatedWikiText += '{{#related:' + item.title + '}}';
                    });

                    // 4. Perintah "Pinter": Nyuruh server ngerender wikitext jadi HTML asli ekstensi
                    $.getJSON(mw.util.wikiScript('api'), {
                        action: 'parse',
                        text: relatedWikiText,
                        contentmodel: 'wikitext',
                        prop: 'text',
                        disablelimitreport: 1,
                        format: 'json'
                    }, function(parseData) {
                        var finalHtml = parseData.parse.text['*'];
                        
                        // 5. Tempel hasilnya di bawah artikel
                        var container = $('<div id="auto-related-wrapper" style="clear:both; margin-top:20px;"></div>').append(finalHtml);
                        
                        // Target Minerva (HP) dan Vector (Desktop)
                        if ($('.minerva-footer').length) {
                            $('.minerva-footer').before(container);
                        } else if ($('#catlinks').length) {
                            $('#catlinks').after(container);
                        } else {
                            $('#mw-content-text').after(container);
                        }
                    });
                }
            });
        }
    }
});