// <nowiki>
mw.loader.using(['mediawiki.api', 'oojs-ui'], function () {
const api = new mw.Api();
function notif(msg) {
mw.notify(msg);
}
const page = mw.config.get('wgPageName');
if (!page.startsWith('Wikipedia:Investigasi_pengguna_siluman')) return;
async function loadSPITemplate() {
const res = await api.get({
action: "query",
titles: "Wikipedia:Investigasi pengguna siluman/IPS/Form.json",
prop: "revisions",
rvprop: "content",
rvslots: "main",
format: "json"
});
const page = Object.values(res.query.pages)[0];
if (!page.revisions) throw new Error("Templat JSON tidak ditemukan");
return JSON.parse(page.revisions[0].slots.main['*']);
}
function openForm() {
const $content = $("#mw-content-text");
const $root = $("<div>").css({ padding: "1em", maxWidth: "900px" });
$root.append("<center><h2>Form Laporan Pengendali Siluman</h2></center>");
const fieldController = new OO.ui.TextInputWidget({
placeholder: "Nama Pengendali"
});
$root.append(new OO.ui.FieldLayout(fieldController, { label: "Pengendali Siluman" }).$element);
const $accountsContainer = $("<div>").css({ marginTop: "1em" });
$root.append($accountsContainer);
const addAccountBtn = new OO.ui.ButtonWidget({
label: "Tambahkan +",
flags: ["progressive"]
});
$root.append(addAccountBtn.$element);
const fieldDetail = new OO.ui.MultilineTextInputWidget({
rows: 5,
placeholder: "Bukti..."
});
$root.append(new OO.ui.FieldLayout(fieldDetail, { label: "Bukti" }).$element);
const submitBtn = new OO.ui.ButtonWidget({ label: "Kirim laporan", flags: ["progressive"] });
const cancelBtn = new OO.ui.ButtonWidget({ label: "Batalkan", flags: ["destructive"] });
$root.append($("<br><br>"), submitBtn.$element, $("<span> </span>"), cancelBtn.$element);
function addAccountInput() {
const field = new OO.ui.TextInputWidget({ placeholder: "Terduga Siluman" });
$accountsContainer.append(new OO.ui.FieldLayout(field, { label: "Akun Terduga" }).$element);
}
addAccountBtn.on("click", addAccountInput);
addAccountInput();
$content.html($root);
cancelBtn.on("click", () => { location.reload(); });
submitBtn.on("click", async () => {
const controller = fieldController.getValue().trim();
if (!controller) return notif("⚠️ Masukkan nama pengendali siluman!");
const accounts = [];
$accountsContainer.find('input').each((i, el) => {
const val = $(el).val().trim();
if (val) accounts.push(val);
});
if (accounts.length === 0) return notif("⚠️ Masukkan minimal satu akun terduga siluman!");
let sockParams = "";
accounts.forEach(acc => {
sockParams += `|${acc}`;
});
const evidence = fieldDetail.getValue();
const tplData = await loadSPITemplate();
const templatSPI = tplData.case_template
.replace(/\$controller/g, controller)
.replace(/\$socks/g, sockParams)
.replace(/\$evidence/g, evidence || "");
const pageCheck = await api.get({ action: "query", titles: `Wikipedia:Investigasi pengguna siluman/${controller}`, format: "json" });
const pageId = Object.keys(pageCheck.query.pages)[0];
const pageExists = pageId !== "-1";
if (!pageExists) {
await api.postWithToken("csrf", {
action: "edit",
title: `Wikipedia:Investigasi pengguna siluman/${controller}`,
text: templatSPI,
summary: `Membuat laporan baru untuk ${controller}`
});
} else {
await api.postWithToken("csrf", {
action: "edit",
title: `Wikipedia:Investigasi pengguna siluman/${controller}`,
appendtext: "\n" + templatSPI,
summary: `Menambahkan laporan untuk ${controller}`
});
}
notif("🟢 Laporan berhasil dibuat!");
location.reload();
});
}
$(document).on('click', '.open-laporan', openForm);
});
// </nowiki>