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.336: Baris 1.336:
     });
     });
})(jQuery, mediaWiki);
})(jQuery, mediaWiki);
/* ==========================================================
  🚀 MIPPEDIA METADATA GUARD - ANTI-MANUAL SYSTEM
  Fungsi: Melindungi kode {{SHORTDESC:}} dari perubahan manual.
  ========================================================== */
(function() {
    "use strict";
    function handleMetadataGuard(e) {
        var ns = mw.config.get('wgNamespaceNumber');
        if (ns !== 0 || mw.config.get('wgIsMainPage')) return;
        var $textbox = $('#wpTextbox1, .editor-container textarea, textarea.mw-ui-input');
        if (!$textbox.length) return;
        // 1. Ambil konten lama (dari server) dan konten baru (dari textbox)
        var oldContent = mw.config.get('wgCurRevisionId') ? "" : ""; // Fallback
        var newContent = $textbox.val() || "";
        // Regex canggih: Mendeteksi {{SHORTDESC:deskripsi}} dalam bentuk apapun
        var shortDescRegex = /\{\{SHORTDESC:.*?\}\}/gi;
        // Ambil string SHORTDESC dari konten baru
        var newShortDescMatch = newContent.match(shortDescRegex);
        var newShortDescStr = newShortDescMatch ? newShortDescMatch[0] : "";
        // 2. LOGIKA CEGAH MANUAL
        // Kita bandingkan: Jika user mencoba menghapus atau merubah paksa kodenya secara manual
        // Sistem otomatis kita akan selalu menyisipkan kode ini di baris paling atas/bawah.
       
        // Cek apakah user sedang menghapus kode yang seharusnya ada
        // (Logika: Jika kode dihapus total atau tulisan "SHORTDESC" diubah secara manual)
        var isTryingToEditManual = false;
        // Kita biarkan save HANYA JIKA kode SHORTDESC tidak disentuh atau
        // jika penambahannya dilakukan oleh script (script biasanya jalan di latar belakang).
        // Tapi karena ini di sisi browser user, kita kasih peringatan keras.
        // Jika user sengaja menambah kode SHORTDESC: manual tanpa lewat sistem
        if (newContent.toLowerCase().includes('shortdesc:') && !window.mippediaAutoSyncActive) {
            // Kita izinkan jika formatnya benar, TAPI kita blokir jika user mencoba merusak format resmi
            if (!/\{\{SHORTDESC:.*?\}\}/i.test(newContent)) {
                isTryingToEditManual = true;
            }
        }
        if (isTryingToEditManual) {
            e.preventDefault();
            e.stopPropagation();
            e.stopImmediatePropagation();
            window.alert("PERINGATAN SISTEM MIPPEDIA!\n\nAnda dilarang menambah, mengubah, atau menghapus kode {{SHORTDESC:}} secara manual.\n\nMetadata deskripsi singkat dikelola secara otomatis oleh Mippedia Data. Perubahan manual akan merusak sinkronisasi ekosistem.");
            return false;
        }
    }
    // Jalankan proteksi pada tombol simpan
    $(document).on('click mousedown touchstart',
        '#wpSave, .editor-save, .mw-ui-button.primary, button[type="submit"], .save-button, .header-action button',
        function(e) {
            handleMetadataGuard(e);
        }
    );
    window.addEventListener('submit', function(e) {
        handleMetadataGuard(e);
    }, true);
})();