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 | 🛡️ MIPPEDIA SYSTEM - ULTIMATE INTEGRATION | ||
1. Patroli Engine (User: Mippedia Patroli) | |||
2. Related Engine (All Users - New/Edit Article) | |||
========================================================== */ | ========================================================== */ | ||
mw.hook('postEdit').add(function() { | mw.hook('postEdit').add(function() { | ||
var currentUser = mw.config.get('wgUserName'); | var currentUser = mw.config.get('wgUserName'); | ||
if (!currentUser | if (!currentUser) return; | ||
var normalizedUser = currentUser.replace(/_/g, ' '); | |||
var isPatroli = (normalizedUser === 'Mippedia Patroli'); | |||
var isMainNamespace = (mw.config.get('wgNamespaceNumber') === 0); | |||
if (!isMainNamespace) return; | |||
var api = new mw.Api(); | var api = new mw.Api(); | ||
var pageTitle = mw.config.get('wgPageName'); | var pageTitle = mw.config.get('wgPageName').replace(/_/g, ' '); | ||
api.get({ | api.get({ | ||
| Baris 1.195: | Baris 1.201: | ||
var rawContent = page.revisions[0]['*']; | var rawContent = page.revisions[0]['*']; | ||
var content = rawContent; | var content = rawContent; | ||
var summary = []; | |||
// --- 1 | // --- BAGIAN 1: RELATED ARTICLES (UNTUK SEMUA AKUN) --- | ||
if (content.indexOf('{{#related:') === -1) { | |||
// Cari artikel yang punya kemiripan kata kunci dengan judul sekarang | |||
var relatedCount = 0; | |||
var currentKeywords = pageTitle.split(' '); | |||
var foundRelated = []; | |||
for (var k = 0; k < allTitles.length; k++) { | |||
var otherTitle = allTitles[k]; | |||
if (otherTitle === pageTitle) continue; | |||
// Logika Pintar: Cek apakah ada kata yang sama di judul lain | |||
var isRelated = currentKeywords.some(kw => | |||
kw.length > 3 && otherTitle.toLowerCase().indexOf(kw.toLowerCase()) !== -1 | |||
); | |||
if (isRelated) { | |||
foundRelated.push('{{#related: ' + otherTitle + '}}'); | |||
relatedCount++; | |||
if ( | } | ||
if (relatedCount >= 3) break; | |||
} | |||
if (foundRelated.length > 0) { | |||
content += '\n\n' + foundRelated.join('\n'); | |||
summary.push('Added related articles'); | |||
} | |||
} | |||
// --- BAGIAN 2: FITUR KHUSUS MIPPEDIA PATROLI --- | |||
if (isPatroli) { | |||
// A. Bersihkan Link Merah | |||
content = content.replace(/\[\[([^|\]]+)\]\]/g, function(match, p1) { | |||
return lowerTitles.includes(p1.toLowerCase()) ? match : p1; | |||
}); | |||
// | // B. Auto-Link (LOGIKA ANTI-JUDUL & ANTI-HEADER) | ||
var | var tokens = content.split(/(\n==+.*?==+\n|\s+|\[\[|\]\])/); | ||
var inLink = false; | |||
tokens[i] = tokens[i] | |||
continue; | for (var i = 0; i < tokens.length; i++) { | ||
// Jangan sentuh Header (== Judul ==) | |||
if (tokens[i].startsWith('\n==')) continue; | |||
if (tokens[i] === '[[' ) { inLink = true; continue; } | |||
if (tokens[i] === ']]' ) { inLink = false; continue; } | |||
if (inLink || tokens[i].trim().length < 3) continue; | |||
var wordMatch = tokens[i].match(/\b\w+\b/g); | |||
if (!wordMatch) continue; | |||
wordMatch.forEach(function(word) { | |||
var lowerWord = word.toLowerCase(); | |||
// JANGAN link kalau kata itu adalah Judul Halaman itu sendiri (biar gak tebel/jelek) | |||
if (lowerWord === pageTitle.toLowerCase()) return; | |||
var idx = lowerTitles.indexOf(lowerWord); | |||
if (idx !== -1) { | |||
var titleOriginal = allTitles[idx]; | |||
var regex = new RegExp('\\b' + word + '\\b', 'g'); | |||
tokens[i] = tokens[i].replace(regex, '[[' + titleOriginal + '|' + word + ']]'); | |||
} | } else { | ||
// C. Typo Fixer Masuk Akal (Jarak 1 huruf) | |||
for (var j = 0; j < allTitles.length; j++) { | |||
if (Math.abs(word.length - allTitles[j].length) === 1) { | |||
if (levenshtein(lowerWord, allTitles[j].toLowerCase()) === 1) { | |||
tokens[i] = tokens[i].replace(word, '[[' + allTitles[j] + ']]'); | |||
break; | |||
} | |||
} | |||
} | |||
} | |||
}); | |||
} | } | ||
content = tokens.join(''); | |||
// D. Kategori Watchdog | |||
if ((!page.categories || page.categories.length === 0) && !/\{\{Tanpa kategori/i.test(content)) { | |||
content = '{{Tanpa kategori|date=April 2026}}\n' + content; | |||
summary.push('Added category tag'); | |||
} | |||
} | } | ||
// --- | // --- EKSEKUSI FINAL --- | ||
if (content !== rawContent) { | if (content !== rawContent) { | ||
api.postWithToken('edit', { | api.postWithToken('edit', { | ||
| Baris 1.246: | Baris 1.291: | ||
title: pageTitle, | title: pageTitle, | ||
text: content, | text: content, | ||
summary: 'Mippedia | summary: 'Mippedia System: ' + summary.join(', '), | ||
bot: true, markasbot: true | bot: true, markasbot: true | ||
}).done(function() { location.reload(); }); | }).done(function() { location.reload(); }); | ||