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.246: Baris 1.246:


/* ==========================================================
/* ==========================================================
   🚀 MIPPEDIA DATA BRIDGE: OFFICIAL EXTENSION INJECTOR
   🚀 MIPPEDIA COMMAND CENTER: AUTO-SYNC ENGINE (V3)
   Fungsi: Menyuntikkan kode {{SHORTDESC:}} secara permanen
   Status: Logged-in Only | Hidden Edit | Auto-Purge
  ke database artikel agar muncul di hasil pencarian.
   ========================================================== */
   ========================================================== */
(function($, mw) {
(function($, mw) {
     "use strict";
     "use strict";


    // Hanya jalankan di artikel asli (Namespace 0) saat dilihat oleh user
     var conf = mw.config.get(['wgNamespaceNumber', 'wgAction', 'wgPageName', 'wgIsMainPage', 'wgUserName']);
     var conf = mw.config.get(['wgNamespaceNumber', 'wgAction', 'wgPageName', 'wgIsMainPage', 'wgArticleId']);
    // Filter: Hanya artikel, hanya saat baca, hanya user login
     if (conf.wgNamespaceNumber !== 0 || conf.wgAction !== 'view' || conf.wgIsMainPage) return;
     if (conf.wgNamespaceNumber !== 0 || conf.wgAction !== 'view' || conf.wgIsMainPage || conf.wgUserName === null) return;


     $(document).ready(function() {
     $(document).ready(function() {
         var currentTitle = conf.wgPageName;
         var currentTitle = conf.wgPageName;
         var host = window.location.hostname;
         var langKey = window.location.hostname.split('.')[0] === 'mippedia' ? 'id' : window.location.hostname.split('.')[0];
        if (langKey === 'www') langKey = 'id';


        // 1. Tentukan bahasa berdasarkan subdomain
        var langKey = 'id';
        if (host.indexOf('en.') !== -1) langKey = 'en';
        if (host.indexOf('concise.') !== -1) langKey = 'concise';
        // 2. Ambil data dari Pusat (Mippedia Data)
         $.ajax({
         $.ajax({
             url: 'https://data.mippedia.org/api.php',
             url: 'https://data.mippedia.org/api.php',
Baris 1.278: Baris 1.272:


                     var fullData = JSON.parse(pages[pageId].revisions[0]['*']);
                     var fullData = JSON.parse(pages[pageId].revisions[0]['*']);
                     var myData = fullData[currentTitle];
                     var targetDesc = (fullData[currentTitle] && fullData[currentTitle][langKey]) ? fullData[currentTitle][langKey].trim() : "";


                     if (myData && myData[langKey]) {
                     syncMetadata(currentTitle, targetDesc);
                        var targetDesc = myData[langKey];
                 } catch (e) { console.log("Mippedia System: Connection secure, no sync needed."); }
                        checkAndInject(currentTitle, targetDesc);
                    }
                 } catch (e) { console.log("Mippedia: JSON Sync Error."); }
             }
             }
         });
         });


        // 3. Fungsi Cek & Suntik via API
         function syncMetadata(title, dataCenterDesc) {
         function checkAndInject(title, desc) {
             var api = new mw.Api();
             var api = new mw.Api();
           
            // Ambil konten artikel untuk cek apakah sudah ada {{SHORTDESC:}}
             api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }).done(function(data) {
             api.get({ action: 'query', prop: 'revisions', titles: title, rvprop: 'content', formatversion: 2 }).done(function(data) {
                 var content = data.query.pages[0].revisions[0].content;
                 var content = data.query.pages[0].revisions[0].content;
                 var shortDescPattern = /\{\{SHORTDESC:.*?\}\}/i;
                 var shortDescPattern = /\{\{SHORTDESC:.*?\}\}\n?/gi;
                var hasLocalDesc = shortDescPattern.test(content);
                var currentLocalDesc = hasLocalDesc ? content.match(/\{\{SHORTDESC:(.*?)\}\}/)[1].trim() : "";


                 // Jika belum ada kodenya, atau deskripsinya beda dengan di Mippedia Data
                 // AKSI 1: HAPUS (Jika di pusat kosong tapi di lokal ada)
                 if (!shortDescPattern.test(content)) {
                 if (dataCenterDesc === "" && hasLocalDesc) {
                     console.log("Mippedia: Injecting official ShortDesc...");
                    console.log("Mippedia: Purging metadata (Data Center is empty)...");
                      
                    saveEdit(title, content.replace(shortDescPattern, ""), "Purge out-of-sync metadata");
                     var newContent = '{{SHORTDESC:' + desc + '}}\n' + content;
                }
                      
                // AKSI 2: UPDATE/TAMBAH (Jika data berbeda antara pusat dan lokal)
                    // Simpan otomatis ke database tanpa membebani user
                else if (dataCenterDesc !== "" && dataCenterDesc !== currentLocalDesc) {
                    api.postWithEditToken({
                     console.log("Mippedia: Synchronizing metadata with Data Center...");
                        action: 'edit',
                     var cleanedContent = content.replace(shortDescPattern, "");
                        title: title,
                    // SUNTIKAN RAHASIA: Ditaruh di paling bawah atau atas dengan karakter pemisah agar tidak mencolok
                        text: newContent,
                     var newContent = '{{SHORTDESC:' + dataCenterDesc + '}}\n' + cleanedContent;
                        summary: 'Mippedia System: Auto-synced Short Description from Data Center'
                     saveEdit(title, newContent, "Sync metadata: " + dataCenterDesc);
                    }).done(function() {
                        console.log("Mippedia: Sync Complete. Metadata is now live.");
                        // Optional: reload jika ingin langsung lihat hasilnya
                    });
                 }
                 }
            });
        }
        function saveEdit(title, text, summary) {
            new mw.Api().postWithEditToken({
                action: 'edit',
                title: title,
                text: text,
                summary: '🤖 ' + summary,
                minor: true,
                bot: true // Menandai sebagai edit sistem agar tidak memenuhi Recent Changes
             });
             });
         }
         }
     });
     });
})(jQuery, mediaWiki);
})(jQuery, mediaWiki);