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: AUTO-SYNC ENGINE (V3)
   🚀 MIPPEDIA COMMAND CENTER: ULTIMATE SYNC (V4)
   Status: Logged-in Only | Hidden Edit | Auto-Purge
   Fitur: Hidden Editor | Global User Sync | Auto-Purge
   ========================================================== */
   ========================================================== */
(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']);
     // Filter: Hanya artikel, hanya saat baca, hanya user login
     // Hanya jalan untuk pengguna login di halaman artikel
     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 langKey = window.location.hostname.split('.')[0] === 'mippedia' ? 'id' : window.location.hostname.split('.')[0];
         var host = window.location.hostname;
        if (langKey === 'www') langKey = 'id';
        var langKey = host.indexOf('en.') !== -1 ? 'en' : (host.indexOf('concise.') !== -1 ? 'concise' : 'id');


         $.ajax({
         $.ajax({
Baris 1.274: Baris 1.274:
                     var targetDesc = (fullData[currentTitle] && fullData[currentTitle][langKey]) ? fullData[currentTitle][langKey].trim() : "";
                     var targetDesc = (fullData[currentTitle] && fullData[currentTitle][langKey]) ? fullData[currentTitle][langKey].trim() : "";


                     syncMetadata(currentTitle, targetDesc);
                     executeSync(currentTitle, targetDesc);
                 } catch (e) { console.log("Mippedia System: Connection secure, no sync needed."); }
                 } catch (e) { console.log("Mippedia: Data center connection secured."); }
             }
             }
         });
         });


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


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


         function saveEdit(title, text, summary) {
         function savePage(title, text, summary) {
             new mw.Api().postWithEditToken({
             new mw.Api().postWithEditToken({
                 action: 'edit',
                 action: 'edit',
Baris 1.309: Baris 1.309:
                 text: text,
                 text: text,
                 summary: '🤖 ' + summary,
                 summary: '🤖 ' + summary,
                 minor: true,
                 minor: true // Ditandai sebagai suntingan kecil agar tidak mengganggu
                bot: true // Menandai sebagai edit sistem agar tidak memenuhi Recent Changes
            }).done(function() {
                console.log("Mippedia: Artikel '" + title + "' berhasil disinkronkan.");
             });
             });
         }
         }
     });
     });
})(jQuery, mediaWiki);
})(jQuery, mediaWiki);