/*
Note: This code runs on both desktop and mobile skins. Be careful what you put here and be sure to test on both useskin=minerva and useformat=mobile which behave differently.
Bad/large amounts of JS could seriously impair users accessing Wikipedia. Good luck!
*/
/**
JavaScript yang ada di sini akan diterapkan untuk kulit Minerva dan perangkat seluler.
Untuk keseluruhan kulit, silahkan kunjungi [[MediaWiki:Common.js]].
**/
/** Menampilkan topicon ************************************************
*
* Deskripsi: Menampilkan ikon templat topicon
* yang biasanya tampil normal di desktop
* Pemelihara: [[Pengguna:Janorovic Volkov]]
*/
mw.loader.using(['mediawiki.util']).then(() => {
if (!mw.config.get('skin').includes('minerva')) return;
const indicators = $('meta[typeof="mw:Extension/indicator"]');
if (!indicators.length) return;
const $tabs = $('.minerva__tab-container');
if (!$tabs.length) return;
$tabs.css('position', 'relative');
const $iconWrap = $('<span>')
.css({
position: 'absolute',
right: '0',
top: '50%',
transform: 'translateY(-50%)',
display: 'flex',
gap: '4px'
});
indicators.each(function () {
try {
const data = JSON.parse($(this).attr('data-mw'));
if (data.html) {
$iconWrap.append(data.html);
}
} catch (e) {
console.warn('Indicator parse error:', e);
}
});
$tabs.append($iconWrap);
});
/** Notice di [[Wikipedia:Bak pasir]] dan [[Pembicaraan Wikipedia:Bak pasir]] *******
*
* Deskripsi: Menambah notice-box di [[Wikipedia:Bak pasir]] dan
* [[Pembicaraan Wikipedia:Bak pasir]]
*
* Pemelihara: [[Pengguna:Janorovic Volkov]]
*/
function sandboxNotice() {
var notice = document.createElement('div');
var content = $(".mw-body-content");
content.prepend(notice);
$.get(
'//id.wikipedia.org/w/index.php?title=Templat:Bakpasir&action=render',
function (data) {
notice.innerHTML = data;
}
);
}
if (
["view", "edit", "submit"].includes(mw.config.get('wgAction')) &&
["Wikipedia:Bak_pasir", "Pembicaraan_Wikipedia:Bak_pasir"].includes(mw.config.get('wgPageName'))
) {
sandboxNotice();
}
/** Confirmation log out *******
*
* Deskripsi: Menambahkan popup konfirmasi ketika ingin
* keluar log untuk mencegah kesalahan pencet
*
* Pemelihara: [[Pengguna:Janorovic Volkov]]
*/
mw.loader.using(['mediawiki.util']).then(function () {
function blockLogout(e, link) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
const ok = confirm('⚠️ PERINGATAN ⚠️\n\nYakin ingin keluar log?\nAnda akan perlu masuk log kembali ketika ingin menggunakan akun ini');
if (ok) {
window.location.href = link.href;
}
return false;
}
function attachLogoutWarning() {
document.querySelectorAll('a.menu__item--logout')
.forEach(function (link) {
if (link.dataset.logoutWarningAttached) return;
link.dataset.logoutWarningAttached = 'true';
link.addEventListener('click', function (e) {
blockLogout(e, link);
}, true);
link.addEventListener('touchstart', function (e) {
blockLogout(e, link);
}, true);
});
}
attachLogoutWarning();
new MutationObserver(attachLogoutWarning)
.observe(document.body, { childList: true, subtree: true });
});
/** Advanced mobile search *******
*
* Deskripsi: Menambahkan tombol "Buat halaman (foo)" di pencarian ketika
* halaman tersebut belum dibuat
*
* Pemelihara: [[Pengguna:Janorovic Volkov]]
*/
mw.loader.using(['mediawiki.util','mediawiki.api'], function () {
if (mw.config.get('wgCanonicalSpecialPageName') !== 'Search') return;
if (!mw.config.get('wgUserName')) return;
const params = new URLSearchParams(location.search);
const query = params.get("search");
if (!query) return;
const title = mw.Title.newFromText(query);
if (!title) return;
if (title.namespace < 0) return;
const api = new mw.Api();
api.get({
action:"query",
titles: title.getPrefixedText()
}).then(function (res) {
const page = Object.values(res.query.pages)[0];
if (page.missing !== undefined) {
const url = mw.util.getUrl(title.getPrefixedText(),{action:"edit"});
const btn = $('<a>')
.attr('href',url)
.text('Buat halaman "'+title.getPrefixedText()+'"')
.css({
display:'block',
background:'#36c',
color:'#fff',
padding:'10px',
margin:'10px 0',
borderRadius:'6px',
textAlign:'center',
fontWeight:'bold'
});
$('.searchresults').prepend(btn);
}
});
});