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 849: | Baris 849: | ||
var summaryParts = []; | var summaryParts = []; | ||
// --- 1. GLOBAL ENGINE: MAINTENANCE (FITUR ASLI | // --- 1. GLOBAL ENGINE: MAINTENANCE (FITUR ASLI) --- | ||
if ((!page.categories || page.categories.length === 0) && !/\{\{Butuh Kategori/i.test(content) && !/\[\[Kategori:/i.test(content)) { | if ((!page.categories || page.categories.length === 0) && !/\{\{Butuh Kategori/i.test(content) && !/\[\[Kategori:/i.test(content)) { | ||
content = '{{Butuh Kategori|date=April 2026}}\n' + content; | content = '{{Butuh Kategori|date=April 2026}}\n' + content; | ||
summaryParts.push('+Cat'); | summaryParts.push('+Cat'); | ||
} | } | ||
// --- UPGRADE ENGINE: DETEKSI SMART STUB PARAMETER & POSISI BAWAH --- | |||
var wordCount = rawContent.trim().split(/\s+/).length; | var wordCount = rawContent.trim().split(/\s+/).length; | ||
if (wordCount < 200 && !/\{\{Artikel Rintisan/i.test(content)) { | if (wordCount < 200 && !/\{\{Stub/i.test(content) && !/\{\{Artikel Rintisan/i.test(content)) { | ||
var lowerContent = rawContent.toLowerCase(); | |||
summaryParts.push('+ | var stubParam = ''; | ||
// Mapping Otak Pintar berdasarkan Kata Kunci Semantik (19 Parameter) | |||
if (/\b(lahir|wafat|tokoh|pria|wanita|biografi|sosok|pahlawan|presiden|menteri)\b/i.test(lowerContent)) { | |||
stubParam = 'biografi tokoh'; | |||
} else if (/\b(musik|lagu|album|konser|penyanyi|band|vokal|gitar|single|nada)\b/i.test(lowerContent)) { | |||
stubParam = 'musik'; | |||
} else if (/\b(geografi|negara|kota|desa|kecamatan|kabupaten|provinsi|pulau|gunung|sungai)\b/i.test(lowerContent)) { | |||
stubParam = 'geografi'; | |||
} else if (/\b(teknologi|komputer|aplikasi|software|hardware|internet|digital|android|sistem|gawai)\b/i.test(lowerContent)) { | |||
stubParam = 'teknologi'; | |||
} else if (/\b(sejarah|kerajaan|perang|prasasti|arkeo|masa lalu|kuno|dinasti|peristiwa|abad)\b/i.test(lowerContent)) { | |||
stubParam = 'sejarah'; | |||
} else if (/\b(olahraga|atlet|sepak|bola|stadion|juara|klub|tanding|liga|olimpiade)\b/i.test(lowerContent)) { | |||
stubParam = 'olahraga'; | |||
} else if (/\b(film|bioskop|aktor|aktris|sutradara|drama|sinema|serial|movie|tayang)\b/i.test(lowerContent)) { | |||
stubParam = 'film'; | |||
} else if (/\b(perusahaan|pt|perbangkan|bisnis|saham|industri|korporasi|merek|ceo|didirikan)\b/i.test(lowerContent)) { | |||
stubParam = 'perusahaan'; | |||
} else if (/\b(ilmu pengetahuan|sains|kimia|fisika|matematika|biologi|riset|laboratorium|teori|molekul)\b/i.test(lowerContent)) { | |||
stubParam = 'ilmu pengetahuan'; | |||
} else if (/\b(seni|lukisan|patung|pameran|budaya|teater|rupa|desain|kriya|estetika)\b/i.test(lowerContent)) { | |||
stubParam = 'seni'; | |||
} else if (/\b(politik|partai|pemilu|dpr|pemerintah|kebijakan|demokrasi|suara|kampanye|negara)\b/i.test(lowerContent)) { | |||
stubParam = 'politik'; | |||
} else if (/\b(militer|tni|tentara|perang|senjata|pasukan|jenderal|alutsista|batalyon|operasi)\b/i.test(lowerContent)) { | |||
stubParam = 'militer'; | |||
} else if (/\b(transportasi|kereta|pesawat|mobil|kapal|bandara|stasiun|pelabuhan|rute|kendaraan)\b/i.test(lowerContent)) { | |||
stubParam = 'transportasi'; | |||
} else if (/\b(literatur|buku|novel|puisi|sastra|penulis|penerbit|komik|cerpen|fiksi)\b/i.test(lowerContent)) { | |||
stubParam = 'literatur'; | |||
} else if (/\b(makanan|kuliner|resep|masakan|minuman|rasa|koki|restoran|hidangan|bahan)\b/i.test(lowerContent)) { | |||
stubParam = 'makanan'; | |||
} else if (/\b(kesehatan|medis|dokter|penyakit|obat|rumah sakit|klinik|terapi|virus|gejala)\b/i.test(lowerContent)) { | |||
stubParam = 'kesehatan'; | |||
} else if (/\b(astronomi|bintang|planet|galaksi|teleskop|antariksa|nasa|komet|orbit|luar angkasa)\b/i.test(lowerContent)) { | |||
stubParam = 'astronomi'; | |||
} else if (/\b(agama|ibadah|kitab|tuhan|nabi|gereja|masjid|pura|vihara|iman)\b/i.test(lowerContent)) { | |||
stubParam = 'agama'; | |||
} else if (/\b(bahasa|dialek|aksara|kamus|linguistik|kata|kalimat|suku|ucapan|fonem)\b/i.test(lowerContent)) { | |||
stubParam = 'bahasa'; | |||
} else if (/\b(hukum|undang|pasal|pengadilan|hakim|jaksa|pengacara|pidana|perdata|legal)\b/i.test(lowerContent)) { | |||
stubParam = 'hukum'; | |||
} | |||
// Gabungkan teks template Stub pilihan di baris paling bawah artikel | |||
var stubTag = stubParam ? '{{Stub|' + stubParam + '}}' : '{{Stub}}'; | |||
content = content.trim() + '\n\n' + stubTag; | |||
summaryParts.push('+SmartStub(' + (stubParam || 'umum') + ')'); | |||
} | } | ||
var promoList = ['memang hebat', 'terpercaya sekali', 'terbaik di dunia', 'hubungi nomor kami', 'harga murah', 'kualitas terjamin']; | 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)) { | if (promoList.some(p => rawContent.toLowerCase().indexOf(p) !== -1) && !/\{\{Hapus/i.test(content)) { | ||
| Baris 866: | Baris 917: | ||
// --- 2. SUPER INTELLIGENCE RELATED (UPGRADE OTAK V12) --- | // --- 2. SUPER INTELLIGENCE RELATED (UPGRADE OTAK V12) --- | ||
var currentRelatedMatch = content.match(/\{\{#related:.*?\}\}/g) || []; | var currentRelatedMatch = content.match(/\{\{#related:.*?\}\}/g) || []; | ||
if (currentRelatedMatch.length < 3) { | if (currentRelatedMatch.length < 3) { | ||
content = content.replace(/\n*\{\{#related:.*?\}\}/g, ''); | content = content.replace(/\n*\{\{#related:.*?\}\}/g, ''); | ||
api.get({ | api.get({ | ||
action: 'query', | action: 'query', | ||
list: 'search', | list: 'search', | ||
srsearch: pageTitle, | srsearch: pageTitle, | ||
srlimit: 15, | srlimit: 15, | ||
srprop: '' | srprop: '' | ||
| Baris 884: | Baris 931: | ||
var candidates = {}; | var candidates = {}; | ||
if (searchRes.query && searchRes.query.search) { | if (searchRes.query && searchRes.query.search) { | ||
searchRes.query.search.forEach(function(item, index) { | searchRes.query.search.forEach(function(item, index) { | ||
if (item.title === pageTitle) return; | if (item.title === pageTitle) return; | ||
candidates[item.title] = (15 - index); | candidates[item.title] = (15 - index); | ||
}); | }); | ||
} | } | ||
if (page.links) { | if (page.links) { | ||
page.links.forEach(function(link) { | page.links.forEach(function(link) { | ||
if (link.title === pageTitle) return; | if (link.title === pageTitle) return; | ||
candidates[link.title] = (candidates[link.title] || 0) + 5; | candidates[link.title] = (candidates[link.title] || 0) + 5; | ||
}); | }); | ||
} | } | ||
var sortedTitles = Object.keys(candidates).sort(function(a, b) { | var sortedTitles = Object.keys(candidates).sort(function(a, b) { | ||
return candidates[b] - candidates[a]; | return candidates[b] - candidates[a]; | ||
}); | }); | ||
var finalRelated = sortedTitles.filter(t => t.indexOf(':') === -1).slice(0, 3); | var finalRelated = sortedTitles.filter(t => t.indexOf(':') === -1).slice(0, 3); | ||
| Baris 924: | Baris 967: | ||
if (isPatroli) { | if (isPatroli) { | ||
var placeholders = []; | var placeholders = []; | ||
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 930: | Baris 972: | ||
}); | }); | ||
api.get({ action: 'query', list: 'allpages', apnamespace: 0, aplimit: 'max' }).done(function(apData) { | api.get({ action: 'query', list: 'allpages', apnamespace: 0, aplimit: 'max' }).done(function(apData) { | ||
var allTitles = apData.query.allpages.map(p => p.title); | var allTitles = apData.query.allpages.map(p => p.title); | ||
| Baris 954: | Baris 995: | ||
content = tokens.join(''); | content = tokens.join(''); | ||
content = content.replace(/___MIP_SKIP_(\d+)___/g, function(match, id) { return placeholders[id]; }); | content = content.replace(/___MIP_SKIP_(\d+)___/g, function(match, id) { return placeholders[id]; }); | ||
content = content.replace(/\[\[([^|\]:]+)\]\]/g, function(match, p1) { | content = content.replace(/\[\[([^|\]:]+)\]\]/g, function(match, p1) { | ||
return lowerTitles.includes(p1.toLowerCase()) ? match : p1; | return lowerTitles.includes(p1.toLowerCase()) ? match : p1; | ||