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 333: Baris 333:
     });
     });
     observer.observe(document.body, { childList: true, subtree: true });
     observer.observe(document.body, { childList: true, subtree: true });
})();
/* ==========================================================
  🚀 MIPPEDIA DATA - AUTO RELATED SUGGESTION
  Fungsi: Mencari artikel terkait secara otomatis via API
  ========================================================== */
(function() {
    function injectRelated() {
        var ns = mw.config.get('wgNamespaceNumber');
        var pageExists = mw.config.get('wgArticleId') > 0;
        var isMainPage = mw.config.get('wgIsMainPage');
        // Hanya di Namespace Utama, Halaman Baru, dan BUKAN Halaman Utama
        if (ns === 0 && !pageExists && !isMainPage) {
            var $textbox = $('#wpTextbox1, .editor-container textarea, textarea.mw-ui-input');
           
            if ($textbox.length && $textbox.val().includes('{{Infobox') && !$textbox.val().includes('#related')) {
                var query = mw.config.get('wgTitle');
                // Panggil API Search MediaWiki (OpenSearch/Cirrus style)
                $.getJSON(mw.util.wikiScript('api'), {
                    action: 'query',
                    list: 'search',
                    srsearch: query,
                    srlimit: 4, // Cari 4 buat jaga-jaga kalo judul sendiri masuk
                    format: 'json'
                }).done(function(data) {
                    var results = data.query.search;
                    var relatedTags = "\n";
                    var count = 0;
                    results.forEach(function(item) {
                        // Jangan masukin judul halaman itu sendiri ke related
                        if (item.title !== query && count < 3) {
                            relatedTags += '{{#related: ' + item.title + '}}\n';
                            count++;
                        }
                    });
                    if (count > 0) {
                        $textbox.val($textbox.val() + relatedTags);
                    }
                });
            }
        }
    }
    // Jalankan dengan delay dikit biar nggak bentrok sama Preload Infobox
    $(document).ready(function() { setTimeout(injectRelated, 1500); });
    $(window).on('hashchange', function() { setTimeout(injectRelated, 1500); });
})();
})();


Baris 430: Baris 380:
     }, true);
     }, true);
})();
})();
/* ==========================================================
  🚀 MIPPEDIA DATA - SILENT AUTO-RELATED (POST-SAVE)
  ========================================================== */
mw.hook('postEdit').add(function() {
    var ns = mw.config.get('wgNamespaceNumber');
    var isMainPage = mw.config.get('wgIsMainPage');
    var pageTitle = mw.config.get('wgPageName');
    // Hanya jalan di Namespace Utama dan bukan Halaman Utama
    if (ns === 0 && !isMainPage) {
       
        // 1. Cari artikel terkait via Search API
        $.getJSON(mw.util.wikiScript('api'), {
            action: 'query',
            list: 'search',
            srsearch: mw.config.get('wgTitle'),
            srlimit: 4,
            format: 'json'
        }).done(function(searchData) {
            var results = searchData.query.search;
            var relatedTags = "";
            var count = 0;
            results.forEach(function(item) {
                if (item.title.replace(/ /g, '_') !== pageTitle && count < 3) {
                    relatedTags += '\n{{#related: ' + item.title + '}}';
                    count++;
                }
            });
            if (count > 0) {
                // 2. Ambil token edit untuk keamanan
                $.get(mw.util.wikiScript('api'), {
                    action: 'query',
                    titles: pageTitle,
                    prop: 'revisions',
                    rvprop: 'content',
                    meta: 'tokens',
                    format: 'json'
                }).done(function(tokenData) {
                    var token = tokenData.query.tokens.csrftoken;
                    var currentContent = "";
                    var pages = tokenData.query.pages;
                    for (var id in pages) {
                        currentContent = pages[id].revisions[0].content;
                    }
                    // Cek biar nggak double posting related yang sama
                    if (!currentContent.includes('#related')) {
                        // 3. Suntik kode ke server (Silent Edit)
                        $.post(mw.util.wikiScript('api'), {
                            action: 'edit',
                            title: pageTitle,
                            appendtext: relatedTags,
                            summary: 'Sistem Otomatis: Menambahkan artikel terkait [[Mippedia:Related|#related]]',
                            token: token,
                            format: 'json'
                        }).done(function(editRes) {
                            if (editRes.edit && editRes.edit.result === "Success") {
                                console.log("Mippedia: Related articles added silently.");
                                // Opsional: Refresh halaman biar user langsung liat hasilnya
                                location.reload();
                            }
                        });
                    }
                });
            }
        });
    }
});