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.338: | Baris 1.338: | ||
/* ========================================================== | /* ========================================================== | ||
🚀 MIPPEDIA METADATA GUARD - | 🚀 MIPPEDIA METADATA GUARD - RADAR SYSTEM (V4) | ||
Status: | Status: Aggressive Mobile Support | MutationObserver | All Devices | ||
========================================================== */ | ========================================================== */ | ||
(function($, mw) { | (function($, mw) { | ||
| Baris 1.347: | Baris 1.347: | ||
if (ns !== 0 || mw.config.get('wgIsMainPage')) return; | if (ns !== 0 || mw.config.get('wgIsMainPage')) return; | ||
var shortDescRegex = /\{\{SHORTDESC:.*?\}\}/gi; | var shortDescRegex = /\{\{SHORTDESC:.*?\}\}/gi; | ||
var originalShortDesc = null; | var originalShortDesc = null; | ||
// 1. | // 1. Fungsi Inti Validasi | ||
function | function validateAndBlock(e) { | ||
var $textbox = $('#wpTextbox1, textarea.previewable-render, .editor-container textarea | var $textbox = $('#wpTextbox1, textarea.previewable-render, .editor-container textarea, textarea[name="wpTextbox1"]'); | ||
if (!$textbox.length) return true; | if (!$textbox.length) return true; | ||
var currentContent = $textbox.val(); | var currentContent = $textbox.val() || ""; | ||
var currentMatch = currentContent.match(shortDescRegex); | var currentMatch = currentContent.match(shortDescRegex); | ||
var currentShortDesc = currentMatch ? currentMatch[0] : ""; | var currentShortDesc = currentMatch ? currentMatch[0] : ""; | ||
// Jika data asli belum tercatat, catat sekarang (untuk antisipasi) | |||
if (originalShortDesc === null) { | |||
originalShortDesc = currentShortDesc; | |||
return true; | |||
} | |||
if (originalShortDesc !== currentShortDesc) { | if (originalShortDesc !== currentShortDesc) { | ||
window.alert( | window.alert( | ||
"❌ | "❌ PERINGATAN KERAS (MIPPEDIA GUARD)!\n\n" + | ||
" | "Metadata {{SHORTDESC:}} tidak boleh diubah secara manual.\n" + | ||
" | "Kembalikan kodenya seperti semula agar Anda bisa menyimpan." | ||
); | ); | ||
return false; | e.preventDefault(); | ||
e.stopPropagation(); | |||
e.stopImmediatePropagation(); | |||
return false; | |||
} | } | ||
return true; | return true; | ||
} | } | ||
// | // 2. RADAR: Memantau munculnya editor (terutama di Mobile) | ||
var observer = new MutationObserver(function() { | |||
var $textbox = $('#wpTextbox1, .editor-container textarea, textarea[name="wpTextbox1"]'); | |||
if ($textbox.length && originalShortDesc === null) { | |||
var content = $textbox.val() || ""; | |||
var match = content.match(shortDescRegex); | |||
originalShortDesc = match ? match[0] : ""; | |||
console.log("Mippedia Guard: Radar captured original metadata."); | |||
} | |||
}); | }); | ||
observer.observe(document.body, { childList: true, subtree: true }); | |||
// | // 3. PENCEGATAN GLOBAL | ||
$(document).on('click mousedown touchstart', | $(document).on('click mousedown touchstart', | ||
'#wpSave, .mw-ui-button.primary, button.submit, .editor-save, .save-button', | '#wpSave, .mw-ui-button.primary, button.submit, .editor-save, .save-button, button[type="submit"]', | ||
function(e) { | function(e) { | ||
return validateAndBlock(e); | |||
} | } | ||
); | ); | ||
// | // Proteksi tambahan untuk form submit | ||
window.addEventListener('submit', function(e) { | window.addEventListener('submit', function(e) { | ||
if (! | if (!validateAndBlock(e)) { | ||
e.preventDefault(); | e.preventDefault(); | ||
} | } | ||