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 COMMAND CENTER: ULTIMATE SYNC (V4)
   🚀 MIPPEDIA COMMAND CENTER: AUTO-SYNC ENGINE (V4)
   Fitur: Hidden Editor | Global User Sync | Auto-Purge
   Status: Global Login User | Auto-Purge | High Reliability
   ========================================================== */
   ========================================================== */
(function($, mw) {
(function($, mw) {
Baris 1.253: Baris 1.253:


     var conf = mw.config.get(['wgNamespaceNumber', 'wgAction', 'wgPageName', 'wgIsMainPage', 'wgUserName']);
     var conf = mw.config.get(['wgNamespaceNumber', 'wgAction', 'wgPageName', 'wgIsMainPage', 'wgUserName']);
     // Hanya jalan untuk pengguna login di halaman artikel
     // Filter: Hanya artikel, hanya saat baca, hanya user yang sudah login
     if (conf.wgNamespaceNumber !== 0 || conf.wgAction !== 'view' || conf.wgIsMainPage || conf.wgUserName === null) 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;
        // Penentuan subdomain (id, en, concise)
         var langKey = host.indexOf('en.') !== -1 ? 'en' : (host.indexOf('concise.') !== -1 ? 'concise' : 'id');
         var hostParts = window.location.hostname.split('.');
         var langKey = hostParts[0] === 'mippedia' || hostParts[0] === 'www' ? 'id' : hostParts[0];


         $.ajax({
         $.ajax({
             url: 'https://data.mippedia.org/api.php',
             url: 'https://data.mippedia.org/api.php',
             data: { action: 'query', prop: 'revisions', titles: 'MediaWiki:ShortDesc-Data.json', rvprop: 'content', format: 'json', origin: '*' },
             data: {  
                action: 'query',  
                prop: 'revisions',  
                titles: 'MediaWiki:ShortDesc-Data.json',  
                rvprop: 'content',  
                format: 'json',  
                origin: '*'  
            },
             dataType: 'jsonp',
             dataType: 'jsonp',
             success: function(res) {
             success: function(res) {
Baris 1.274: Baris 1.282:
                     var targetDesc = (fullData[currentTitle] && fullData[currentTitle][langKey]) ? fullData[currentTitle][langKey].trim() : "";
                     var targetDesc = (fullData[currentTitle] && fullData[currentTitle][langKey]) ? fullData[currentTitle][langKey].trim() : "";


                     executeSync(currentTitle, targetDesc);
                     syncMetadata(currentTitle, targetDesc);
                 } catch (e) { console.log("Mippedia: Data center connection secured."); }
                 } catch (e) {  
                    console.log("Mippedia System: Data sync not required or entry missing.");  
                }
             }
             }
         });
         });


         function executeSync(title, centerDesc) {
         function syncMetadata(title, dataCenterDesc) {
             var api = new mw.Api();
             var api = new mw.Api();
             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;
                // Regex untuk mendeteksi SHORTDESC baik yang polos maupun yang tersembunyi
                 var shortDescPattern = /\{\{SHORTDESC:.*?\}\}\n?/gi;
                 var shortDescRegex = /(?:)?\n?/gi;
                 var hasLocalDesc = shortDescPattern.test(content);
                 var hasLocal = shortDescRegex.test(content);
               
                 var localDescMatch = content.match(/\{\{SHORTDESC:(.*?)\}\}/i);
                 var localMatch = content.match(/\{\{SHORTDESC:(.*?)\}\}/i);
                 var currentLocalDesc = localDescMatch ? localDescMatch[1].trim() : "";
                 var currentLocalDesc = localMatch ? localMatch[1].trim() : "";


                 // AKSI A: Hapus jika di pusat kosong tapi di artikel ada
                 // AKSI 1: HAPUS (Jika di pusat kosong/dihapus, tapi di artikel lokal masih ada)
                 if (centerDesc === "" && hasLocal) {
                 if (dataCenterDesc === "" && hasLocalDesc) {
                     savePage(title, content.replace(shortDescRegex, ""), "Purge out-of-sync metadata");
                     console.log("Mippedia: Purging metadata...");
                    saveEdit(title, content.replace(shortDescPattern, ""), "Purge out-of-sync metadata");
                 }  
                 }  
                 // AKSI B: Update atau Tambah jika ada perbedaan
                 // AKSI 2: UPDATE/TAMBAH (Jika data di pusat ada dan beda dengan lokal)
                 else if (centerDesc !== "" && centerDesc !== currentLocalDesc) {
                 else if (dataCenterDesc !== "" && dataCenterDesc !== currentLocalDesc) {
                     var cleanContent = content.replace(shortDescRegex, "");
                    console.log("Mippedia: Syncing with Data Center...");
                     // Kunci "Tersembunyi": Membungkus dalam HTML comment agar samar di editor
                     var cleanedContent = content.replace(shortDescPattern, "");
                     var hiddenMetadata = "{{SHORTDESC:" + centerDesc + "}}\n";
                     // Menaruh di paling atas agar terbaca Extension ShortDescription
                     savePage(title, hiddenMetadata + cleanContent, "Synchronize metadata: " + centerDesc);
                     var newContent = '{{SHORTDESC:' + dataCenterDesc + '}}\n' + cleanedContent;
                     saveEdit(title, newContent, "Sync metadata: " + dataCenterDesc);
                 }
                 }
             });
             });
         }
         }


         function savePage(title, text, summary) {
         function saveEdit(title, text, summary) {
            // Menggunakan token user yang sedang login saat ini
             new mw.Api().postWithEditToken({
             new mw.Api().postWithEditToken({
                 action: 'edit',
                 action: 'edit',
Baris 1.309: Baris 1.328:
                 text: text,
                 text: text,
                 summary: '🤖 ' + summary,
                 summary: '🤖 ' + summary,
                 minor: true // Ditandai sebagai suntingan kecil agar tidak mengganggu
                 minor: true // Menandai sebagai suntingan kecil
                // Parameter 'bot: true' DIHAPUS agar bisa dijalankan semua pengguna login
             }).done(function() {
             }).done(function() {
                 console.log("Mippedia: Artikel '" + title + "' berhasil disinkronkan.");
                 console.log("Mippedia: " + title + " synced successfully.");
             });
             });
         }
         }
     });
     });
})(jQuery, mediaWiki);
})(jQuery, mediaWiki);