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.338: Baris 1.338:


/* ==========================================================
/* ==========================================================
   🚀 MIPPEDIA METADATA GUARD - HYBRID SYSTEM (V3)
   🚀 MIPPEDIA METADATA GUARD - RADAR SYSTEM (V4)
   Status: Desktop & Mobile Support | Anti-Manual | Hard Lock
   Status: Aggressive Mobile Support | MutationObserver | All Devices
   ========================================================== */
   ========================================================== */
(function($, mw) {
(function($, mw) {
Baris 1.347: Baris 1.347:
     if (ns !== 0 || mw.config.get('wgIsMainPage')) return;
     if (ns !== 0 || mw.config.get('wgIsMainPage')) return;


    // Regex Sakti untuk mendeteksi kode SHORTDESC
     var shortDescRegex = /\{\{SHORTDESC:.*?\}\}/gi;
     var shortDescRegex = /\{\{SHORTDESC:.*?\}\}/gi;
     var originalShortDesc = null;
     var originalShortDesc = null;


     // 1. Ambil data asli saat editor dibuka (baik Desktop maupun Mobile)
     // 1. Fungsi Inti Validasi
     function captureOriginal() {
     function validateAndBlock(e) {
         var $textbox = $('#wpTextbox1, textarea.previewable-render, .editor-container textarea');
         var $textbox = $('#wpTextbox1, textarea.previewable-render, .editor-container textarea, textarea[name="wpTextbox1"]');
        if ($textbox.length && originalShortDesc === null) {
            var content = $textbox.val() || "";
            var match = content.match(shortDescRegex);
            originalShortDesc = match ? match[0] : "";
            console.log("Mippedia Guard: Original metadata captured.");
        }
    }
 
    // 2. Fungsi Validasi (Pencegatan)
    function validateMetadata() {
        var $textbox = $('#wpTextbox1, textarea.previewable-render, .editor-container textarea');
         if (!$textbox.length) return true;
         if (!$textbox.length) return true;


         var currentContent = $textbox.val();
         var currentContent = $textbox.val() || "";
         var currentMatch = currentContent.match(shortDescRegex);
         var currentMatch = currentContent.match(shortDescRegex);
         var currentShortDesc = currentMatch ? currentMatch[0] : "";
         var currentShortDesc = currentMatch ? currentMatch[0] : "";
        // Jika data asli belum tercatat, catat sekarang (untuk antisipasi)
        if (originalShortDesc === null) {
            originalShortDesc = currentShortDesc;
            return true;
        }


         if (originalShortDesc !== currentShortDesc) {
         if (originalShortDesc !== currentShortDesc) {
             window.alert(
             window.alert(
                 "❌ SUNTINGAN DITOLAK (MOBILE/DESKTOP)!\n\n" +
                 "❌ PERINGATAN KERAS (MIPPEDIA GUARD)!\n\n" +
                 "Anda dilarang mengubah kode {{SHORTDESC:}} secara manual.\n" +
                 "Metadata {{SHORTDESC:}} tidak boleh diubah secara manual.\n" +
                 "Harap kembalikan kode tersebut agar bisa menyimpan."
                 "Kembalikan kodenya seperti semula agar Anda bisa menyimpan."
             );
             );
             return false;  
            e.preventDefault();
            e.stopPropagation();
            e.stopImmediatePropagation();
             return false;
         }
         }
         return true;
         return true;
     }
     }


     // --- EXECUTION ZONE ---
     // 2. RADAR: Memantau munculnya editor (terutama di Mobile)
 
     var observer = new MutationObserver(function() {
    // Jalankan capture saat halaman editor siap
        var $textbox = $('#wpTextbox1, .editor-container textarea, textarea[name="wpTextbox1"]');
     $(document).on('focus click', '#wpTextbox1, .editor-container textarea', function() {
        if ($textbox.length && originalShortDesc === null) {
        captureOriginal();
            var content = $textbox.val() || "";
            var match = content.match(shortDescRegex);
            originalShortDesc = match ? match[0] : "";
            console.log("Mippedia Guard: Radar captured original metadata.");
        }
     });
     });


     // Cegal tombol simpan Desktop
     observer.observe(document.body, { childList: true, subtree: true });
    mw.hook('editform.setup').add(function($editForm) {
        $editForm.on('submit', function(e) {
            if (!validateMetadata()) {
                e.preventDefault();
                return false;
            }
        });
    });


     // CEGAL TOMBOL SIMPAN MOBILE (MobileFrontend menggunakan class .submit atau .save)
     // 3. PENCEGATAN GLOBAL
     $(document).on('click mousedown touchstart',  
     $(document).on('click mousedown touchstart',  
         '#wpSave, .mw-ui-button.primary, button.submit, .editor-save, .save-button',  
         '#wpSave, .mw-ui-button.primary, button.submit, .editor-save, .save-button, button[type="submit"]',  
         function(e) {
         function(e) {
             // Pastikan kita capture data terakhir sebelum simpan
             return validateAndBlock(e);
            if (!validateMetadata()) {
                e.preventDefault();
                e.stopPropagation();
                e.stopImmediatePropagation();
                return false;
            }
         }
         }
     );
     );


     // Tambahan untuk editor berbasis overlay di HP
     // Proteksi tambahan untuk form submit
     window.addEventListener('submit', function(e) {
     window.addEventListener('submit', function(e) {
         if (!validateMetadata()) {
         if (!validateAndBlock(e)) {
             e.preventDefault();
             e.preventDefault();
         }
         }