MediaWiki:Minerva.js

/*
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#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);
		}
	});
});

Konten ini disalin dari wikipedia, mohon digunakan dengan bijak.

×
Advertisement