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 - HARD LOCK SYSTEM (V2)
   🚀 MIPPEDIA METADATA GUARD - HYBRID SYSTEM (V3)
   Status: Anti-Manual | All-User | Deep Validation
   Status: Desktop & Mobile Support | Anti-Manual | Hard Lock
   ========================================================== */
   ========================================================== */
(function($, mw) {
(function($, mw) {
     "use strict";
     "use strict";


    // 1. Ambil state awal saat halaman editor dibuka
     var ns = mw.config.get('wgNamespaceNumber');
     var ns = mw.config.get('wgNamespaceNumber');
     if (ns !== 0 || mw.config.get('wgIsMainPage')) return;
     if (ns !== 0 || mw.config.get('wgIsMainPage')) return;


     // Ambil konten asli artikel dari textarea saat pertama kali load
     // Regex Sakti untuk mendeteksi kode SHORTDESC
    var originalContent = $('#wpTextbox1').val() || "";
     var shortDescRegex = /\{\{SHORTDESC:.*?\}\}/gi;
     var shortDescRegex = /\{\{SHORTDESC:.*?\}\}/gi;
    var originalMatch = originalContent.match(shortDescRegex);
     var originalShortDesc = null;
     var originalShortDesc = originalMatch ? originalMatch[0] : null;


     // 2. Fungsi Validasi Inti
    // 1. Ambil data asli saat editor dibuka (baik Desktop maupun Mobile)
    function captureOriginal() {
        var $textbox = $('#wpTextbox1, textarea.previewable-render, .editor-container textarea');
        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() {
     function validateMetadata() {
         var $textbox = $('#wpTextbox1');
         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] : null;
         var currentShortDesc = currentMatch ? currentMatch[0] : "";


        // CEK: Apakah SHORTDESC dihapus, ditambah, atau diubah isinya secara manual?
        // Kita bandingkan string SHORTDESC lama vs baru.
         if (originalShortDesc !== currentShortDesc) {
         if (originalShortDesc !== currentShortDesc) {
             window.alert(
             window.alert(
                 "❌ SUNTINGAN DITOLAK SISTEM!\n\n" +
                 "❌ SUNTINGAN DITOLAK (MOBILE/DESKTOP)!\n\n" +
                 "Anda mencoba mengubah kode {{SHORTDESC:}} secara manual.\n" +
                 "Anda dilarang mengubah kode {{SHORTDESC:}} secara manual.\n" +
                 "Metadata ini hanya boleh dikelola otomatis oleh Mippedia Data.\n\n" +
                 "Harap kembalikan kode tersebut agar bisa menyimpan."
                "Silakan kembalikan kode tersebut ke kondisi semula untuk dapat menyimpan."
             );
             );
             return false; // Gagalkan simpan
             return false;  
         }
         }
         return true; // Izinkan simpan
         return true;
     }
     }


     // 3. Masuk ke Hook Validasi MediaWiki (Paling Ampuh)
     // --- EXECUTION ZONE ---
 
    // Jalankan capture saat halaman editor siap
    $(document).on('focus click', '#wpTextbox1, .editor-container textarea', function() {
        captureOriginal();
    });
 
    // Cegal tombol simpan Desktop
     mw.hook('editform.setup').add(function($editForm) {
     mw.hook('editform.setup').add(function($editForm) {
         $editForm.on('submit', function(e) {
         $editForm.on('submit', function(e) {
Baris 1.387: Baris 1.399:
     });
     });


     // Jalankan juga di tombol-tombol khusus (Opal/VE)
     // CEGAL TOMBOL SIMPAN MOBILE (MobileFrontend menggunakan class .submit atau .save)
     $(document).on('click', '#wpSave, #wpPreview, #wpDiff', function(e) {
     $(document).on('click mousedown touchstart',  
        '#wpSave, .mw-ui-button.primary, button.submit, .editor-save, .save-button',  
        function(e) {
            // Pastikan kita capture data terakhir sebelum simpan
            if (!validateMetadata()) {
                e.preventDefault();
                e.stopPropagation();
                e.stopImmediatePropagation();
                return false;
            }
        }
    );
 
    // Tambahan untuk editor berbasis overlay di HP
    window.addEventListener('submit', function(e) {
         if (!validateMetadata()) {
         if (!validateMetadata()) {
             e.preventDefault();
             e.preventDefault();
            e.stopImmediatePropagation();
            return false;
         }
         }
     });
     }, true);


})(jQuery, mediaWiki);
})(jQuery, mediaWiki);