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 531: | Baris 531: | ||
/* ========================================================== | /* ========================================================== | ||
🌐 MIPPEDIA SHORTDESC - DATA CENTER | |||
Status: INDEPENDENT SYSTEM (Separated from Sitelinks) | |||
Storage: MediaWiki:ShortDesc-Data.json | |||
========================================================== */ | ========================================================== */ | ||
(function($, mw) { | (function($, mw) { | ||
"use strict"; | |||
$(document).ready(function() { | $(document).ready(function() { | ||
if (mw.config.get('wgNamespaceNumber') !== 0 || mw.config.get('wgIsMainPage') | if (mw.config.get('wgNamespaceNumber') !== 0 || mw.config.get('wgIsMainPage')) return; | ||
var pageTitle = mw.config.get('wgPageName'); | var pageTitle = mw.config.get('wgPageName'); | ||
var | var storagePage = 'MediaWiki:ShortDesc-Data.json'; // File penyimpanan berbeda | ||
var isAdmin = mw.config.get('wgUserGroups').some(g => ['sysop', 'interface-admin'].includes(g)); | var isAdmin = mw.config.get('wgUserGroups').some(g => ['sysop', 'interface-admin'].includes(g)); | ||
var | // UI Box untuk Input Deskripsi | ||
var html = ` | |||
<div id="desc-manager" style="border: 2px solid #20b2aa; padding: 15px; background: #fff; margin-bottom: 20px; border-radius: 10px; font-family: sans-serif;"> | |||
<div style="font-weight: bold; color: #20b2aa; margin-bottom: 10px; display: flex; justify-content: space-between; align-items: center;"> | |||
<span>📝 Mippedia Short Description</span> | |||
<button id="desc-toggle" style="cursor:pointer; padding:2px 8px; font-size:11px;">Buka Editor</button> | |||
</div> | |||
<div id="desc-current" style="font-size: 13px; color: #666; font-style: italic;">Memuat data deskripsi...</div> | |||
<div id="desc-editor" style="display:none; margin-top: 10px; border-top: 1px solid #eee; padding-top: 10px;"> | |||
<div style="margin-bottom:8px;"> | |||
<label style="display:block; font-size:11px; font-weight:bold;">ID (Indonesia):</label> | |||
<input type="text" id="desc-in-id" style="width:100%; padding:6px; border:1px solid #ccc; border-radius:4px;"> | |||
</div> | |||
<div style="margin-bottom:8px;"> | |||
<label style="display:block; font-size:11px; font-weight:bold;">EN (English):</label> | |||
<input type="text" id="desc-in-en" style="width:100%; padding:6px; border:1px solid #ccc; border-radius:4px;"> | |||
</div> | |||
<div style="margin-bottom:12px;"> | |||
<label style="display:block; font-size:11px; font-weight:bold;">CONCISE (Ringkas):</label> | |||
<input type="text" id="desc-in-concise" style="width:100%; padding:6px; border:1px solid #ccc; border-radius:4px;"> | |||
</div> | |||
<button id="desc-save" style="width:100%; background:#20b2aa; color:white; border:none; padding:8px; border-radius:5px; font-weight:bold; cursor:pointer;">Simpan Deskripsi</button> | |||
</div> | |||
</div>`; | |||
$('.mw-parser-output').prepend(html); | |||
// 1. Load data dari JSON | |||
new mw.Api().get({ action: 'query', prop: 'revisions', titles: storagePage, rvprop: 'content', formatversion: 2 }).done(function(res) { | |||
var content = res.query.pages[0].revisions ? res.query.pages[0].revisions[0].content : "{}"; | |||
var fullData = JSON.parse(content); | |||
var myData = fullData[pageTitle] || {}; | |||
$('#desc-in-id').val(myData.id || ''); | |||
$('#desc-in-en').val(myData.en || ''); | |||
$('#desc-in-concise').val(myData.concise || ''); | |||
$('#desc-current').html(`<b>Current:</b> ${myData.id || 'Belum ada deskripsi'}`); | |||
}); | |||
$('#desc-toggle').click(function() { $('#desc-editor').slideToggle(); }); | |||
// 2. Simpan data ke JSON | |||
$('#desc-save').click(function() { | |||
if (!isAdmin) { alert('Hanya Pengurus yang bisa menyimpan data.'); return; } | |||
var api = new mw.Api(); | |||
var newData = { | |||
id: $('#desc-in-id').val().trim(), | |||
en: $('#desc-in-en').val().trim(), | |||
concise: $('#desc-in-concise').val().trim() | |||
} | }; | ||
api.get({ action: 'query', prop: 'revisions', titles: storagePage, rvprop: 'content', formatversion: 2 }).done(function(r) { | |||
var json = r.query.pages[0].revisions ? JSON.parse(r.query.pages[0].revisions[0].content) : {}; | |||
json[pageTitle] = newData; | |||
var | |||
api.postWithEditToken({ | |||
action: 'edit', | |||
title: storagePage, | |||
text: JSON.stringify(json, null, 2), | |||
api.postWithEditToken({ action: 'edit', title: | summary: 'Update ShortDesc: ' + pageTitle | ||
}).done(function() { | |||
alert('Berhasil disimpan!'); | |||
location.reload(); | |||
}); | |||
}); | }); | ||
}); | }); | ||
}); | }); | ||
})(jQuery, mediaWiki); | })(jQuery, mediaWiki); | ||