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 - HYBRID SYSTEM (V3) | ||
Status: Anti-Manual | | Status: Desktop & Mobile Support | Anti-Manual | Hard Lock | ||
========================================================== */ | ========================================================== */ | ||
(function($, mw) { | (function($, mw) { | ||
"use strict"; | "use strict"; | ||
var ns = mw.config.get('wgNamespaceNumber'); | var ns = mw.config.get('wgNamespaceNumber'); | ||
if (ns !== 0 || mw.config.get('wgIsMainPage')) return; | if (ns !== 0 || mw.config.get('wgIsMainPage')) return; | ||
// | // Regex Sakti untuk mendeteksi kode SHORTDESC | ||
var shortDescRegex = /\{\{SHORTDESC:.*?\}\}/gi; | var shortDescRegex = /\{\{SHORTDESC:.*?\}\}/gi; | ||
var originalShortDesc = null; | |||
var originalShortDesc = | |||
// 2. Fungsi Validasi | // 1. Ambil data asli saat editor dibuka (baik Desktop maupun Mobile) | ||
function captureOriginal() { | |||
var $textbox = $('#wpTextbox1, textarea.previewable-render, .editor-container textarea'); | |||
if ($textbox.length && originalShortDesc === null) { | |||
var content = $textbox.val() || ""; | |||
var match = content.match(shortDescRegex); | |||
originalShortDesc = match ? match[0] : ""; | |||
console.log("Mippedia Guard: Original metadata captured."); | |||
} | |||
} | |||
// 2. Fungsi Validasi (Pencegatan) | |||
function validateMetadata() { | function validateMetadata() { | ||
var $textbox = $('#wpTextbox1'); | var $textbox = $('#wpTextbox1, textarea.previewable-render, .editor-container textarea'); | ||
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] : ""; | ||
if (originalShortDesc !== currentShortDesc) { | if (originalShortDesc !== currentShortDesc) { | ||
window.alert( | window.alert( | ||
"❌ SUNTINGAN DITOLAK | "❌ SUNTINGAN DITOLAK (MOBILE/DESKTOP)!\n\n" + | ||
"Anda | "Anda dilarang mengubah kode {{SHORTDESC:}} secara manual.\n" + | ||
" | "Harap kembalikan kode tersebut agar bisa menyimpan." | ||
); | ); | ||
return false; | return false; | ||
} | } | ||
return true; | return true; | ||
} | } | ||
// | // --- EXECUTION ZONE --- | ||
// Jalankan capture saat halaman editor siap | |||
$(document).on('focus click', '#wpTextbox1, .editor-container textarea', function() { | |||
captureOriginal(); | |||
}); | |||
// Cegal tombol simpan Desktop | |||
mw.hook('editform.setup').add(function($editForm) { | mw.hook('editform.setup').add(function($editForm) { | ||
$editForm.on('submit', function(e) { | $editForm.on('submit', function(e) { | ||
| Baris 1.387: | Baris 1.399: | ||
}); | }); | ||
// | // CEGAL TOMBOL SIMPAN MOBILE (MobileFrontend menggunakan class .submit atau .save) | ||
$(document).on('click', '#wpSave, | $(document).on('click mousedown touchstart', | ||
'#wpSave, .mw-ui-button.primary, button.submit, .editor-save, .save-button', | |||
function(e) { | |||
// Pastikan kita capture data terakhir sebelum simpan | |||
if (!validateMetadata()) { | |||
e.preventDefault(); | |||
e.stopPropagation(); | |||
e.stopImmediatePropagation(); | |||
return false; | |||
} | |||
} | |||
); | |||
// Tambahan untuk editor berbasis overlay di HP | |||
window.addEventListener('submit', function(e) { | |||
if (!validateMetadata()) { | if (!validateMetadata()) { | ||
e.preventDefault(); | e.preventDefault(); | ||
} | } | ||
}); | }, true); | ||
})(jQuery, mediaWiki); | })(jQuery, mediaWiki); | ||