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.336: | Baris 1.336: | ||
}); | }); | ||
})(jQuery, mediaWiki); | })(jQuery, mediaWiki); | ||
/* ========================================================== | |||
🚀 MIPPEDIA METADATA GUARD - ANTI-MANUAL SYSTEM | |||
Fungsi: Melindungi kode {{SHORTDESC:}} dari perubahan manual. | |||
========================================================== */ | |||
(function() { | |||
"use strict"; | |||
function handleMetadataGuard(e) { | |||
var ns = mw.config.get('wgNamespaceNumber'); | |||
if (ns !== 0 || mw.config.get('wgIsMainPage')) return; | |||
var $textbox = $('#wpTextbox1, .editor-container textarea, textarea.mw-ui-input'); | |||
if (!$textbox.length) return; | |||
// 1. Ambil konten lama (dari server) dan konten baru (dari textbox) | |||
var oldContent = mw.config.get('wgCurRevisionId') ? "" : ""; // Fallback | |||
var newContent = $textbox.val() || ""; | |||
// Regex canggih: Mendeteksi {{SHORTDESC:deskripsi}} dalam bentuk apapun | |||
var shortDescRegex = /\{\{SHORTDESC:.*?\}\}/gi; | |||
// Ambil string SHORTDESC dari konten baru | |||
var newShortDescMatch = newContent.match(shortDescRegex); | |||
var newShortDescStr = newShortDescMatch ? newShortDescMatch[0] : ""; | |||
// 2. LOGIKA CEGAH MANUAL | |||
// Kita bandingkan: Jika user mencoba menghapus atau merubah paksa kodenya secara manual | |||
// Sistem otomatis kita akan selalu menyisipkan kode ini di baris paling atas/bawah. | |||
// Cek apakah user sedang menghapus kode yang seharusnya ada | |||
// (Logika: Jika kode dihapus total atau tulisan "SHORTDESC" diubah secara manual) | |||
var isTryingToEditManual = false; | |||
// Kita biarkan save HANYA JIKA kode SHORTDESC tidak disentuh atau | |||
// jika penambahannya dilakukan oleh script (script biasanya jalan di latar belakang). | |||
// Tapi karena ini di sisi browser user, kita kasih peringatan keras. | |||
// Jika user sengaja menambah kode SHORTDESC: manual tanpa lewat sistem | |||
if (newContent.toLowerCase().includes('shortdesc:') && !window.mippediaAutoSyncActive) { | |||
// Kita izinkan jika formatnya benar, TAPI kita blokir jika user mencoba merusak format resmi | |||
if (!/\{\{SHORTDESC:.*?\}\}/i.test(newContent)) { | |||
isTryingToEditManual = true; | |||
} | |||
} | |||
if (isTryingToEditManual) { | |||
e.preventDefault(); | |||
e.stopPropagation(); | |||
e.stopImmediatePropagation(); | |||
window.alert("PERINGATAN SISTEM MIPPEDIA!\n\nAnda dilarang menambah, mengubah, atau menghapus kode {{SHORTDESC:}} secara manual.\n\nMetadata deskripsi singkat dikelola secara otomatis oleh Mippedia Data. Perubahan manual akan merusak sinkronisasi ekosistem."); | |||
return false; | |||
} | |||
} | |||
// Jalankan proteksi pada tombol simpan | |||
$(document).on('click mousedown touchstart', | |||
'#wpSave, .editor-save, .mw-ui-button.primary, button[type="submit"], .save-button, .header-action button', | |||
function(e) { | |||
handleMetadataGuard(e); | |||
} | |||
); | |||
window.addEventListener('submit', function(e) { | |||
handleMetadataGuard(e); | |||
}, true); | |||
})(); | |||