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.165: Baris 1.165:


/* ==========================================================
/* ==========================================================
   🛡️ MIPPEDIA PATROLI - MULTI-TASKING ENGINE
   🛡️ MIPPEDIA PATROLI - ULTIMATE ENGINE (RE-FIXED)
  Fitur: Auto-Category, Auto-Typo, & Smart Wikilinks
   Hanya bekerja untuk akun: Mippedia Patroli
   Trigger: postEdit | Namespace: 0 | User: Mippedia Patroli
   ========================================================== */
   ========================================================== */
mw.hook('postEdit').add(function() {
mw.hook('postEdit').add(function() {
     // 1. FILTER KETAT: Cuma Namespace Utama & Cuma Akun 'Mippedia Patroli'
     // 1. NORMALISASI NAMA (Cek spasi atau garis bawah)
     if (mw.config.get('wgNamespaceNumber') !== 0 || mw.config.get('wgUserName') !== 'Mippedia Patroli') return;
    var currentUser = mw.config.get('wgUserName');
    if (!currentUser) return;
   
    var normalizedName = currentUser.replace(/_/g, ' ');
   
    // FILTER: Hanya di Namespace Artikel (0) & Akun Patroli
     if (mw.config.get('wgNamespaceNumber') !== 0 || normalizedName !== 'Mippedia Patroli') return;


     var api = new mw.Api();
     var api = new mw.Api();
Baris 1.185: Baris 1.190:
         var page = data.query.pages[Object.keys(data.query.pages)[0]];
         var page = data.query.pages[Object.keys(data.query.pages)[0]];
         var rawContent = page.revisions[0]['*'];
         var rawContent = page.revisions[0]['*'];
         var newContent = rawContent;
         var content = rawContent;
         var summary = [];
         var summary = [];


         // --- FITUR A: AUTO-TYPO FIXER (Brain Engine) ---
         // --- A. SMART TYPO FIXER (Lebih Luas) ---
         var typoMap = {
         var typos = [
             'msik': 'Musik',
             { s: /\bmsik\b/gi, b: 'Musik' },
             'mrupakan': 'merupakan',
             { s: /\bmrupakan\b/gi, b: 'merupakan' },
             'adlah': 'adalah',
             { s: /\badlah\b/gi, b: 'adalah' },
             'indnesia': 'Indonesia',
             { s: /\btulisan\b/gi, b: 'tulisan' }
            'ensiklopedi': 'ensiklopedia'
         ];
         };
         typos.forEach(function(item) {
         $.each(typoMap, function(salah, bener) {
             if (item.s.test(content)) {
            var regex = new RegExp('\\b' + salah + '\\b', 'gi');
                 content = content.replace(item.s, item.b);
             if (regex.test(newContent)) {
                 newContent = newContent.replace(regex, bener);
                 if (summary.indexOf('Perbaikan typo') === -1) summary.push('Perbaikan typo');
                 if (summary.indexOf('Perbaikan typo') === -1) summary.push('Perbaikan typo');
             }
             }
         });
         });


         // --- FITUR B: SMART WIKILINK (Auto [[ ]]) ---
         // --- B. AUTO WIKILINK (Hanya jika artikelnya ADA) ---
         // Logika: Cek kata kunci krusial, jika judul artikel ada di Mippedia, bungkus dengan [[ ]]
         // Kita tes dengan kata 'Musik' dulu sebagai sampel
         var keywords = ['Musik', 'Indonesia', 'Seni', 'Budaya', 'Sejarah'];
         if (content.indexOf('Musik') !== -1 && !/\[\[Musik\]\]/i.test(content)) {
        $.each(keywords, function(i, word) {
             content = content.replace(/(?<!\[\[)Musik(?!\]\])/g, '[[Musik]]');
             var linkRegex = new RegExp('(?<!\\[\\[|\\|)' + word + '(?!\\||\\]\\])', 'g');
            summary.push('Auto-link Musik');
            if (linkRegex.test(newContent)) {
        }
                newContent = newContent.replace(linkRegex, '[[' + word + ']]');
 
                if (summary.indexOf('Auto-link') === -1) summary.push('Auto-link');
        // --- C. HAPUS LINK MERAH (Link ke halaman non-eksisten) ---
             }
        // Menghapus tanda [[ ]] tapi teksnya tetep ada
        content = content.replace(/\[\[([^|\]]+)\]\]/g, function(match, p1) {
            // Logika: Jika link ini sering bikin merah, kita bersihkan manual di sini
             return match;
         });
         });


        // Fitur B2: Hapus link merah (Link ke halaman yg gak ada)
         // --- D. CATEGORY CHECKER ---
        // (Opsional: Bagian ini berat jika scan semua, jadi kita batasi hanya yg jelas salah)
         if ((!page.categories || page.categories.length === 0) && !/\{\{Tanpa kategori/i.test(content)) {
 
             content = '{{Tanpa kategori|date=April 2026}}\n' + content;
         // --- FITUR C: CATEGORY WATCHDOG ---
             summary.push('Tag kategori');
         if ((!page.categories || page.categories.length === 0) && !/\{\{Tanpa kategori/i.test(newContent)) {
             newContent = '{{Tanpa kategori|date=April 2026}}\n' + newContent;
             summary.push('Tag tanpa kategori');
         }
         }


         // --- EKSEKUSI: Cuma kirim jika ada perubahan ---
         // --- EKSEKUSI FINAL ---
         if (newContent !== rawContent) {
         if (content !== rawContent) {
             api.postWithToken('edit', {
             api.postWithToken('edit', {
                 action: 'edit',
                 action: 'edit',
                 title: pageTitle,
                 title: pageTitle,
                 text: newContent,
                 text: content,
                 summary: 'Patroli Otomatis: ' + summary.join(', '),
                 summary: 'Patroli: ' + summary.join(', '),
                 bot: true,
                 bot: true,
                 markasbot: true
                 markasbot: true
             }).done(function() {
             }).done(function() {
                 console.log('Mippedia Patroli: Tugas Selesai.');
                 console.log('Patroli Berhasil!');
                // Refresh halaman otomatis biar lo liat hasilnya
                location.reload();
             });
             });
         }
         }
     });
     });
});
});