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 302: Baris 302:


/* ==========================================================
/* ==========================================================
   🚀 MIPPEDIA DATA - AUTO PRELOAD INFOBOX (MOBILE FIX)
   🚀 MIPPEDIA DATA - AUTO PRELOAD INFOBOX (UNIVERSAL)
   ========================================================== */
   ========================================================== */
(function() {
(function() {
     function initPreload() {
     function injectPreload() {
         var action = mw.config.get('wgAction');
         var action = mw.config.get('wgAction');
         var ns = mw.config.get('wgNamespaceNumber');
         var ns = mw.config.get('wgNamespaceNumber');
         var pageExists = mw.config.get('wgArticleId') > 0;
         var pageExists = mw.config.get('wgArticleId') > 0;


        // Hanya di Namespace Utama & Halaman Baru
         if ((action === 'edit' || action === 'submit') && ns === 0 && !pageExists) {
         if ((action === 'edit' || action === 'submit') && ns === 0 && !pageExists) {
           
             // Gunakan interval untuk memantau kehadiran editor di mobile
             // Cek editor secara berkala (Khusus Minerva/Mobile)
            var retryLimit = 0;
             var checkEditor = setInterval(function() {
             var checkEditor = setInterval(function() {
                 var $textbox = $('#wpTextbox1');
                 var $textbox = $('#wpTextbox1');
                 if ($textbox.length) {
                 if ($textbox.length && $textbox.val().trim() === "") {
                    if ($textbox.val().trim() === "") {
                    var pageName = mw.config.get('wgTitle');
                        var pageName = mw.config.get('wgTitle');
                    $textbox.val('{{Infobox umum\n|nama = ' + pageName + '\n}}');
                        $textbox.val('{{Infobox umum\n|nama = ' + pageName + '\n}}');
                     clearInterval(checkEditor);
                    }
                     clearInterval(checkEditor); // Stop ngecek kalau udah dapet
                 }
                 }
                if (++retryLimit > 20) clearInterval(checkEditor); // Stop setelah 10 detik
             }, 500);
             }, 500);
            // Timeout 10 detik biar nggak jalan terus kalau emang nggak ada editor
            setTimeout(function() { clearInterval(checkEditor); }, 10000);
         }
         }
     }
     }


     $(document).ready(initPreload);
     $(document).ready(injectPreload);
     // Tambahan untuk MobileFrontend yang sering pake AJAX loading
     // Jalankan lagi saat user switch editor di mobile
     $(window).on('load', initPreload);
     $(window).on('hashchange focus click', injectPreload);
})();
})();


/* ==========================================================
/* ==========================================================
   🚀 MIPPEDIA DATA - CONTENT GUARD (MOBILE FIX)
   🚀 MIPPEDIA DATA - CONTENT GUARD (ULTRA STRICT)
   ========================================================== */
   ========================================================== */
(function() {
(function() {
     function initGuard() {
     function showGuardNotif(msg) {
        $('.mip-guard-notif').remove();
        $('<div class="mip-guard-notif" style="position:fixed; top:20px; left:50%; transform:translateX(-50%); width:90%; max-width:450px; background:#fff5f5; border-left:6px solid #f56565; padding:18px; z-index:99999; border-radius:12px; box-shadow:0 15px 35px rgba(0,0,0,0.4); font-family:sans-serif; text-align:center; color:#742a2a; font-weight:bold;">' +
            '🚫 ' + msg + '<br><small style="font-weight:normal;">Klik kotak ini untuk menutup</small>' +
          '</div>').appendTo('body').click(function(){ $(this).remove(); });
    }
 
    // Tangkap event submit secara agresif
    $(document).on('click mousedown touchstart', '#wpSave, #wpPreview, .editor-save, .mw-ui-button.primary', function(e) {
         var ns = mw.config.get('wgNamespaceNumber');
         var ns = mw.config.get('wgNamespaceNumber');
         if (ns !== 0) return;
         if (ns !== 0) return;


         function showGuardNotif(title, msg) {
         var content = $('#wpTextbox1').val() || "";
            $('.mip-guard-notif').remove();
       
            $('<div class="mip-guard-notif" style="position:fixed; top:20px; left:50%; transform:translateX(-50%); width:92%; max-width:450px; background:#fff5f5; border-left:6px solid #f56565; padding:18px; z-index:20000; border-radius:12px; box-shadow:0 15px 35px rgba(0,0,0,0.3); font-family:sans-serif;">' +
        // Cek keberadaan template Infobox
                '<div style="display:flex; align-items:center; gap:12px; margin-bottom:8px;">' +
        if (!content.includes('{{Infobox')) {
                    '<span style="font-size:22px;">🚫</span>' +
             e.preventDefault();
                    '<strong style="color:#742a2a; font-size:15px;">' + title + '</strong>' +
            e.stopPropagation();
                '</div>' +
            e.stopImmediatePropagation(); // Matikan semua event lain
                '<p style="margin:0; font-size:13px; color:#742a2a; line-height:1.6;">' + msg + '</p>' +
           
             '</div>').appendTo('body').click(function(){ $(this).remove(); }).delay(7000).fadeOut();
            showGuardNotif('FORMAT DITOLAK! Namespace Utama WAJIB menggunakan struktur {{Infobox}}. Teks biasa atau huruf asal dilarang.');
            return false;
         }
         }
 
     });
        // Tangkap event submit secara global (lebih ampuh buat mobile)
        $(document).on('click', '#wpSave, #wpPreview, .editor-save, button[type="submit"]', function(e) {
            var content = $('#wpTextbox1').val() || "";
           
            // Jika tidak ada kode Infobox
            if (content.indexOf('{{Infobox') === -1) {
                e.preventDefault();
                e.stopImmediatePropagation(); // Paksa berhenti total
                showGuardNotif(
                    'Format Ditolak',
                    'Halaman ini dilarang berisi teks biasa. Anda <b>WAJIB</b> menggunakan template {{Infobox}} agar data tersinkronisasi.'
                );
                return false;
            }
        });
     }
 
    $(document).ready(initGuard);
    $(window).on('load', initGuard);
})();
})();