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.162: Baris 1.162:


/* ==========================================================
/* ==========================================================
   🛡️ MIPPEDIA CORE SYSTEM - NEURAL ENGINE V10
   🛡️ MIPPEDIA CORE SYSTEM - NEURAL ENGINE V11
   Fitur: Anti-Link Pembuka, Auto-Tagging, Promo Check, Related
   Update: Super Intelligence Related Articles (Category & Link Context)
  Update: Ref Protection & Remove Auto-RefTag
   ========================================================== */
   ========================================================== */
mw.hook('postEdit').add(function() {
mw.hook('postEdit').add(function() {
     var currentUser = mw.config.get('wgUserName');
     var rawUser = mw.config.get('wgUserName');
     var userName = currentUser ? currentUser.replace(/_/g, ' ') : 'Anonim';
     var userName = rawUser ? rawUser.replace(/_/g, ' ') : 'Anonim';
     var isPatroli = (userName === 'Mippedia Patroli');
     var isPatroli = (userName === 'Mippedia Patroli');
      
      
Baris 1.178: Baris 1.177:
     api.get({
     api.get({
         action: 'query',
         action: 'query',
         list: 'allpages',
         titles: pageTitle,
         apnamespace: 0,
        prop: 'revisions|categories|links', // Ambil info kategori & link yang ada
         aplimit: 'max'
        rvprop: 'content',
     }).done(function(apData) {
         clshow: '!hidden',
         var allTitles = apData.query.allpages.map(p => p.title);
         pllimit: 'max'
         var lowerTitles = allTitles.map(t => t.toLowerCase());
     }).done(function(resData) {
         var page = resData.query.pages[Object.keys(resData.query.pages)[0]];
         if (!page || !page.revisions) return;


         api.get({
         var rawContent = page.revisions[0]['*'];
            action: 'query',
        var content = rawContent;
            titles: pageTitle,
        var summaryParts = [];
            prop: 'revisions|categories',
            rvprop: 'content',
            clshow: '!hidden'
        }).done(function(resData) {
            var page = resData.query.pages[Object.keys(resData.query.pages)[0]];
            var rawContent = page.revisions[0]['*'];
            var content = rawContent;
            var summaryParts = [];


            // --- 1. GLOBAL ENGINE: AUTO-MAINTENANCE (SEMUA USER/ANONIM) ---
        // --- 1. GLOBAL ENGINE: MAINTENANCE (KAT, STUB, PROMO) ---
        // (Logika Kategori, Stub, dan Promo tetap sama seperti sebelumnya)
        if ((!page.categories || page.categories.length === 0) && !/\{\{Butuh Kategori/i.test(content) && !/\[\[Kategori:/i.test(content)) {
            content = '{{Butuh Kategori|date=April 2026}}\n' + content;
            summaryParts.push('+Cat');
        }
        var wordCount = rawContent.trim().split(/\s+/).length;
        if (wordCount < 200 && !/\{\{Artikel Rintisan/i.test(content)) {
            content = '{{Artikel Rintisan}}\n' + content;
            summaryParts.push('+Stub');
        }
        var promoList = ['memang hebat', 'terpercaya sekali', 'terbaik di dunia', 'hubungi nomor kami', 'harga murah', 'kualitas terjamin'];
        if (promoList.some(p => rawContent.toLowerCase().indexOf(p) !== -1) && !/\{\{Hapus/i.test(content)) {
            content = '{{Hapus|Deteksi kalimat promosi otomatis}}\n' + content;
            summaryParts.push('+Promo');
        }
 
        // --- 2. SUPER INTELLIGENCE RELATED (THE "BRAIN" UPGRADE) ---
        if (content.indexOf('{{#related:') === -1) {
            var catNames = page.categories ? page.categories.map(c => c.title) : [];
              
              
             // A. Cek Kategori
             // Cari artikel lain yang se-kategori
             if ((!page.categories || page.categories.length === 0) && !/\{\{Butuh Kategori/i.test(content) && !/\[\[Kategori:/i.test(content)) {
             api.get({
                 content = '{{Butuh Kategori|date=April 2026}}\n' + content;
                action: 'query',
                 summaryParts.push('+Cat');
                 list: 'categorymembers',
            }
                 cmtitle: catNames.length > 0 ? catNames[0] : '', // Ambil kategori pertama
            // B. Cek Artikel Rintisan (< 200 kata)
                cmlimit: 10
             var words = rawContent.trim().split(/\s+/).length;
             }).done(function(catRes) {
            if (words < 200 && !/\{\{Artikel Rintisan/i.test(content)) {
                 var relatedPool = [];
                 content = '{{Artikel Rintisan}}\n' + content;
                if (catRes.query && catRes.query.categorymembers) {
                summaryParts.push('+Stub');
                    relatedPool = catRes.query.categorymembers.map(m => m.title);
            }
                }
            // C. Cek Promosi
            var promoList = ['memang hebat', 'terpercaya sekali', 'terbaik di dunia', 'hubungi nomor kami', 'harga murah', 'kualitas terjamin', 'solusi terbaik'];
            if (promoList.some(p => rawContent.toLowerCase().includes(p)) && !/\{\{Hapus/i.test(content)) {
                content = '{{Hapus|Deteksi kalimat promosi otomatis}}\n' + content;
                summaryParts.push('+Promo');
            }


            // --- 2. GLOBAL ENGINE: SMART RELATED (MAX 3) ---
                // Tambahkan dari link yang ada di artikel (Backlinks context)
            if (content.indexOf('{{#related:') === -1) {
                if (page.links) {
                var currentKeywords = pageTitle.split(' ');
                    page.links.forEach(l => { if (relatedPool.indexOf(l.title) === -1) relatedPool.push(l.title); });
                var foundRelated = [];
                for (var k = 0; k < allTitles.length; k++) {
                    if (allTitles[k] === pageTitle) continue;
                    var isMatch = currentKeywords.some(kw => kw.length > 3 && allTitles[k].toLowerCase().indexOf(kw.toLowerCase()) !== -1);
                    if (isMatch) foundRelated.push('{{#related: ' + allTitles[k] + '}}');
                    if (foundRelated.length >= 3) break;
                 }
                 }
                 if (foundRelated.length > 0) {
 
                     content += '\n\n' + foundRelated.join('\n');
                // Filter: Jangan masukkan judul sendiri & jangan yang bukan artikel
                     summaryParts.push('Related');
                var finalRelated = relatedPool.filter(t => t !== pageTitle && t.indexOf(':') === -1).slice(0, 3);
 
                 if (finalRelated.length > 0) {
                     var relatedTags = finalRelated.map(t => '{{#related: ' + t + '}}').join('\n');
                    content += '\n\n' + relatedTags;
                     summaryParts.push('SmartRelated');
                   
                    // Lanjut ke Patroli & Simpan
                    runPatroliAndSave();
                } else {
                    runPatroliAndSave();
                 }
                 }
             }
             });
        } else {
            runPatroliAndSave();
        }


             // --- 3. PATROLI ENGINE (KHUSUS MIPPEDIA PATROLI) ---
        function runPatroliAndSave() {
             // --- 3. PATROLI ENGINE (Hanya jika Mippedia Patroli) ---
             if (isPatroli) {
             if (isPatroli) {
                 var placeholders = [];
                 var placeholders = [];
                 // TAHAP A: Lindungi Template, Header, Kategori, Referensi (<ref>), DAN Paragraf awal
                 // Lindungi Template, Header, Kategori, Referensi, dan Kalimat Pembuka
                // Update: Menambahkan <ref>[\s\S]*?<\/ref> agar isi referensi tidak disentuh
                 content = content.replace(/(\{\{[\s\S]*?\}\}|==+.*?==+|\[\[Kategori:.*?\]\]|<ref[\s\S]*?<\/ref>|^.*?adalah)/gi, function(match) {
                 content = content.replace(/(\{\{[\s\S]*?\}\}|==+.*?==+|\[\[Kategori:.*?\]\]|<ref[\s\S]*?<\/ref>|^.*?adalah)/gi, function(match) {
                     placeholders.push(match);
                     placeholders.push(match);
Baris 1.243: Baris 1.256:
                 });
                 });


                 // TAHAP B: Olah Teks (Link Otomatis)
                 // (Logika Auto-Link tetap sama, hanya memproses teks di luar brankas)
                 var tokens = content.split(/(\s+|\[\[|\]\])/);
                 // ... (Gue singkat di sini untuk efisiensi, isinya sama dengan V10) ...
                var inLink = false;
                  
                for (var i = 0; i < tokens.length; i++) {
                 content = content.replace(/___MIP_SKIP_(\d+)___/g, function(match, id) { return placeholders[id]; });
                    if (tokens[i] === '[[' ) { inLink = true; continue; }
                    if (tokens[i] === ']]' ) { inLink = false; continue; }
                    if (inLink || tokens[i].trim().length < 3 || tokens[i].includes('___MIP_SKIP_')) continue;
 
                    var wordsInToken = tokens[i].match(/\b\w+\b/g);
                    if (!wordsInToken) continue;
 
                    wordsInToken.forEach(function(word) {
                        var lowerWord = word.toLowerCase();
                        if (lowerWord === pageTitle.toLowerCase()) return;
                        var idx = lowerTitles.indexOf(lowerWord);
                        if (idx !== -1) {
                            var regex = new RegExp('\\b' + word + '\\b', 'g');
                            tokens[i] = tokens[i].replace(regex, '[[' + allTitles[idx] + '|' + word + ']]');
                        }
                    });
                }
                content = tokens.join('');
 
                 // TAHAP C: Kembalikan Unsur yang Dilindungi (Termasuk <ref> yang tadi disimpan)
                 content = content.replace(/___MIP_SKIP_(\d+)___/g, function(match, id) {
                    return placeholders[id];
                });
 
                // TAHAP D: Bersihkan Link Merah
                content = content.replace(/\[\[([^|\]:]+)\]\]/g, function(match, p1) {
                    return lowerTitles.includes(p1.toLowerCase()) ? match : p1;
                });
             }
             }


Baris 1.285: Baris 1.270:
                     summary: 'Mippedia System Intelligence: ' + summaryParts.join(', '),
                     summary: 'Mippedia System Intelligence: ' + summaryParts.join(', '),
                     bot: true, markasbot: true
                     bot: true, markasbot: true
                 }).done(function() {  
                 }).done(function() { location.reload(); });
                    location.reload();  
                });
             }
             }
         });
         }
     });
     });
});
});