MediaWiki:Common.js: Perbedaan antara revisi
Tampilan
Tidak ada ringkasan suntingan Tanda: Suntingan perangkat seluler Suntingan peramban seluler |
Tidak ada ringkasan suntingan Tanda: Suntingan perangkat seluler Suntingan peramban seluler |
||
| (250 revisi perantara oleh 2 pengguna tidak ditampilkan) | |||
| Baris 1: | Baris 1: | ||
/* Otomatis alihkan Special:Upload ke Mippedia Commons */ | |||
if (mw.config.get('wgCanonicalSpecialPageName') === 'Upload') { | |||
window.location.href = 'https://commons.mippedia.org/wiki/Special:Upload'; | |||
} | |||
/* Script Estimasi Waktu Baca - Spesialis Mobile (Minerva) & Desktop */ | |||
$(document).ready(function() { | $(document).ready(function() { | ||
var | // Hanya jalan di halaman artikel asli dan BUKAN di Halaman Utama | ||
if (mw.config.get('wgIsArticle') && mw.config.get('wgAction') === 'view' && mw.config.get('wgNamespaceNumber') === 0 && !mw.config.get('wgIsMainPage')) { | |||
if (mw.config.get('wgNamespaceNumber') === | |||
function hitungWaktuBaca() { | |||
// Ambil teks dari konten utama | |||
var content = $('#mw-content-text').text(); | |||
// Hitung jumlah kata (asumsi rata-rata orang baca 200 kata per menit) | |||
var wordsPerMinute = 200; | |||
var textLength = content.split(/\s+/).length; // Pecah berdasarkan spasi | |||
var readingTime = Math.ceil(textLength / wordsPerMinute); | |||
// Bikin elemen tampilannya | |||
var icon = '🕒'; // Emoji jam biar simpel dan ringan | |||
var label = (readingTime <= 1) ? '- 1 menit' : readingTime + ' menit'; | |||
var html = '<div id="reading-time-auto" style="font-size: 0.9em; color: #54595d; margin-bottom: 15px; display: flex; align-items: center; font-family: sans-serif;">'; | |||
html += '<span style="margin-right: 5px;">' + icon + '</span>'; | |||
html += '<span>Estimasi waktu baca : <b>' + label + '</b></span>'; | |||
html += '</div>'; | |||
// PENEMPELAN TARGET: | |||
// Di Minerva (HP), judul biasanya ada di .page-heading | |||
// Di Vector (Desktop), judul ada di #firstHeading | |||
if ($('.page-heading').length) { | |||
$('.page-heading').after(html); // Target Mobile | |||
} else if ($('#firstHeading').length) { | |||
$('#firstHeading').after(html); // Target Desktop | |||
} | |||
} | |||
// Jalankan fungsi | |||
hitungWaktuBaca(); | |||
} | |||
}); | |||
/* Script Tombol Back to Top (Spesial Mobile) */ | |||
$(document).ready(function() { | |||
// Bikin tombolnya lewat JS biar gak ribet edit CSS/HTML | |||
var btnHtml = '<div id="backToTop" style="display:none; position:fixed; bottom:80px; right:20px; z-index:9999; background:#36c; color:#fff; width:45px; height:45px; border-radius:50%; text-align:center; line-height:45px; font-size:24px; cursor:pointer; box-shadow: 0 4px 6px rgba(0,0,0,0.3); opacity: 0.8;">↑</div>'; | |||
$('body').append(btnHtml); | |||
// Fungsi munculin tombol pas di-scroll | |||
$(window).scroll(function() { | |||
if ($(this).scrollTop() > 300) { | |||
$('#backToTop').fadeIn(); | |||
} else { | |||
$('#backToTop').fadeOut(); | |||
} | |||
}); | |||
// Fungsi pas tombol diklik | |||
$('#backToTop').click(function() { | |||
$('html, body').animate({scrollTop: 0}, 600); | |||
return false; | |||
}); | |||
}); | |||
/* ========================================================== | |||
🚀 MIPPEDIA DATA BUTTON ONLY (Otomatis) | |||
Hanya memunculkan tombol jika data tersedia di pusat. | |||
========================================================== */ | |||
$(document).ready(function() { | |||
var pageName = mw.config.get('wgPageName'); | |||
var namespace = mw.config.get('wgNamespaceNumber'); | |||
var dataDomain = 'https://data.mippedia.org'; | |||
// Jalankan hanya di namespace artikel | |||
if (namespace === 0) { | |||
// Cek apakah halaman tersebut ada di Mippedia Data | |||
$.ajax({ | |||
url: dataDomain + '/api.php', | |||
data: { | |||
action: 'query', | |||
titles: pageName, | |||
format: 'json', | |||
origin: '*' | |||
}, | |||
dataType: 'jsonp', | |||
success: function(res) { | |||
var pages = res.query.pages; | |||
var isExist = false; | |||
// Cek apakah ID halaman > 0 (artinya halaman ada) | |||
for (var id in pages) { | |||
if (parseInt(id) > 0) { | |||
isExist = true; | |||
break; | |||
} | |||
} | |||
// Jika data ditemukan, munculkan tombol melayang | |||
if (isExist) { | |||
injectFloatingDataBtn(pageName, dataDomain); | |||
} | |||
} | |||
}); | |||
} | |||
function injectFloatingDataBtn(name, domain) { | |||
if ($('#mippedia-data-btn').length) return; | |||
var $btn = $('<a>', { | |||
id: 'mippedia-data-btn', | |||
href: domain + '/wiki/' + encodeURIComponent(name), | |||
target: '_blank', | |||
style: 'position: absolute; right: 10px; top: -32px; background: #36c; color: #fff; padding: 4px 10px; border-radius: 4px; font-weight: bold; font-size: 10px; text-decoration: none; z-index: 1000; box-shadow: 0 2px 4px rgba(0,0,0,0.1);', | |||
text: 'DATA' | |||
}); | |||
// Target: Area menu aksi (dekat ikon pensil) | |||
// Mendukung skin Mobile (Minerva) dan Desktop | |||
var $target = $('.page-actions-menu, .mw-editsection-visualeditor, #ca-edit, .minerva__tab-container').first(); | |||
if ($target.length) { | |||
$target.css('position', 'relative').append($btn); | |||
} else { | |||
// Fallback jika header tidak standar | |||
$('#firstHeading').css('position', 'relative').append($btn); | |||
} | |||
} | |||
}); | |||
/* ========================================================== | |||
🚀 MIPPEDIA COMMAND CENTER: AUTO-SYNC ENGINE (V4) | |||
Status: Global Login User | Auto-Purge | High Reliability | |||
========================================================== */ | |||
(function($, mw) { | |||
"use strict"; | |||
var conf = mw.config.get(['wgNamespaceNumber', 'wgAction', 'wgPageName', 'wgIsMainPage', 'wgUserName']); | |||
// Filter: Hanya artikel, hanya saat baca, hanya user yang sudah login | |||
if (conf.wgNamespaceNumber !== 0 || conf.wgAction !== 'view' || conf.wgIsMainPage || conf.wgUserName === null) return; | |||
$(document).ready(function() { | |||
var currentTitle = conf.wgPageName; | |||
// Penentuan subdomain (id, en, concise) | |||
var hostParts = window.location.hostname.split('.'); | |||
var langKey = hostParts[0] === 'mippedia' || hostParts[0] === 'www' ? 'id' : hostParts[0]; | |||
$.ajax({ | $.ajax({ | ||
url: 'https://data.mippedia.org/api.php', | url: 'https://data.mippedia.org/api.php', | ||
data: { | data: { | ||
action: ' | action: 'query', | ||
prop: 'revisions', | |||
titles: 'MediaWiki:ShortDesc-Data.json', | |||
rvprop: 'content', | |||
format: 'json', | format: 'json', | ||
origin: | origin: '*' | ||
}, | }, | ||
dataType: 'jsonp', | |||
dataType: ' | success: function(res) { | ||
success: function( | try { | ||
var pages = res.query.pages; | |||
var | var pageId = Object.keys(pages)[0]; | ||
if ( | if (pageId === "-1") return; | ||
var fullData = JSON.parse(pages[pageId].revisions[0]['*']); | |||
var targetDesc = (fullData[currentTitle] && fullData[currentTitle][langKey]) ? fullData[currentTitle][langKey].trim() : ""; | |||
syncMetadata(currentTitle, targetDesc); | |||
} catch (e) { | |||
console.log("Mippedia System: Data sync not required or entry missing."); | |||
} | } | ||
} | } | ||
}); | }); | ||
function syncMetadata(title, dataCenterDesc) { | |||
var api = new mw.Api(); | |||
api.get({ | |||
action: 'query', | |||
prop: 'revisions', | |||
titles: title, | |||
rvprop: 'content', | |||
formatversion: 2 | |||
}).done(function(data) { | |||
var content = data.query.pages[0].revisions[0].content; | |||
var shortDescPattern = /\{\{SHORTDESC:.*?\}\}\n?/gi; | |||
var hasLocalDesc = shortDescPattern.test(content); | |||
var localMatch = content.match(/\{\{SHORTDESC:(.*?)\}\}/i); | |||
var currentLocalDesc = localMatch ? localMatch[1].trim() : ""; | |||
// AKSI 1: HAPUS (Jika di pusat kosong/dihapus, tapi di artikel lokal masih ada) | |||
if (dataCenterDesc === "" && hasLocalDesc) { | |||
console.log("Mippedia: Purging metadata..."); | |||
saveEdit(title, content.replace(shortDescPattern, ""), "Purge out-of-sync metadata"); | |||
} | |||
// AKSI 2: UPDATE/TAMBAH (Jika data di pusat ada dan beda dengan lokal) | |||
else if (dataCenterDesc !== "" && dataCenterDesc !== currentLocalDesc) { | |||
console.log("Mippedia: Syncing with Data Center..."); | |||
var cleanedContent = content.replace(shortDescPattern, ""); | |||
// Menaruh di paling atas agar terbaca Extension ShortDescription | |||
var newContent = '{{SHORTDESC:' + dataCenterDesc + '}}\n' + cleanedContent; | |||
saveEdit(title, newContent, "Sync metadata: " + dataCenterDesc); | |||
} | |||
}); | |||
} | |||
function saveEdit(title, text, summary) { | |||
// Menggunakan token user yang sedang login saat ini | |||
new mw.Api().postWithEditToken({ | |||
action: 'edit', | |||
title: title, | |||
text: text, | |||
summary: '🤖 ' + summary, | |||
minor: true // Menandai sebagai suntingan kecil | |||
// Parameter 'bot: true' DIHAPUS agar bisa dijalankan semua pengguna login | |||
}).done(function() { | |||
console.log("Mippedia: " + title + " synced successfully."); | |||
}); | |||
} | |||
}); | |||
})(jQuery, mediaWiki); | |||
/* ========================================================== | |||
🚀 MIPPEDIA METADATA GUARD - RADAR SYSTEM (V5) | |||
Status: Professional Messaging | Hybrid Mobile/Desktop | |||
========================================================== */ | |||
(function($, mw) { | |||
"use strict"; | |||
var ns = mw.config.get('wgNamespaceNumber'); | |||
if (ns !== 0 || mw.config.get('wgIsMainPage')) return; | |||
var shortDescRegex = /\{\{SHORTDESC:.*?\}\}/gi; | |||
var originalShortDesc = null; | |||
function validateAndBlock(e) { | |||
var $textbox = $('#wpTextbox1, textarea.previewable-render, .editor-container textarea, textarea[name="wpTextbox1"]'); | |||
if (!$textbox.length) return true; | |||
var currentContent = $textbox.val() || ""; | |||
var currentMatch = currentContent.match(shortDescRegex); | |||
var currentShortDesc = currentMatch ? currentMatch[0] : ""; | |||
if (originalShortDesc === null) { | |||
originalShortDesc = currentShortDesc; | |||
return true; | |||
} | |||
if (originalShortDesc !== currentShortDesc) { | |||
// --- PESAN PROFESIONAL BARU --- | |||
window.alert( | |||
"MIPPEDIA SYSTEM NOTIFICATION\n" + | |||
"────────────────────────────\n\n" + | |||
"Suntingan anda tidak bisa di lanjutkan untuk di terbitkan, Karena sinkronisasi otomatis terdeteksi tidak valid.\n\n" + | |||
"Untuk menjaga integritas metadata, deskripsi singkat (ShortDescription) wajib dikelola melalui repositori Mippedia Data.\n\n" + | |||
"Harap urungkan perubahan manual pada kode {{SHORTDESC}} untuk melanjutkan proses penyimpanan." | |||
); | |||
e.preventDefault(); | |||
e.stopPropagation(); | |||
e.stopImmediatePropagation(); | |||
return false; | |||
} | |||
return true; | |||
} | } | ||
// Radar untuk menangkap elemen editor saat muncul (terutama di Mobile) | |||
var observer = new MutationObserver(function() { | |||
var $textbox = $('#wpTextbox1, .editor-container textarea, textarea[name="wpTextbox1"]'); | |||
if ($textbox.length && originalShortDesc === null) { | |||
var content = $textbox.val() || ""; | |||
var match = content.match(shortDescRegex); | |||
originalShortDesc = match ? match[0] : ""; | |||
} | |||
}); | |||
observer.observe(document.body, { childList: true, subtree: true }); | |||
// Event listener untuk tombol simpan di berbagai platform | |||
$(document).on('click mousedown touchstart', | |||
'#wpSave, .mw-ui-button.primary, button.submit, .editor-save, .save-button, button[type="submit"]', | |||
function(e) { | |||
return validateAndBlock(e); | |||
} | |||
); | |||
window.addEventListener('submit', function(e) { | |||
if (!validateAndBlock(e)) e.preventDefault(); | |||
}, true); | |||
})(jQuery, mediaWiki); | |||
$(function() { | |||
$('.ambox-learn-more').on('click', function(e) { | |||
e.preventDefault(); | |||
var $parentBox = $(this).closest('.ambox'); | |||
$parentBox.toggleClass('ambox-active'); | |||
$parentBox.find('.ambox-text-long').slideToggle('fast'); | |||
// Ubah teks tombol pas dibuka | |||
if ($parentBox.hasClass('ambox-active')) { | |||
$(this).text('Sembunyikan'); | |||
} else { | |||
$(this).text('Pelajari selengkapnya'); | |||
} | |||
}); | |||
}); | }); | ||
Revisi terkini sejak 9 November 2026 21.14
/* Otomatis alihkan Special:Upload ke Mippedia Commons */
if (mw.config.get('wgCanonicalSpecialPageName') === 'Upload') {
window.location.href = 'https://commons.mippedia.org/wiki/Special:Upload';
}
/* Script Estimasi Waktu Baca - Spesialis Mobile (Minerva) & Desktop */
$(document).ready(function() {
// Hanya jalan di halaman artikel asli dan BUKAN di Halaman Utama
if (mw.config.get('wgIsArticle') && mw.config.get('wgAction') === 'view' && mw.config.get('wgNamespaceNumber') === 0 && !mw.config.get('wgIsMainPage')) {
function hitungWaktuBaca() {
// Ambil teks dari konten utama
var content = $('#mw-content-text').text();
// Hitung jumlah kata (asumsi rata-rata orang baca 200 kata per menit)
var wordsPerMinute = 200;
var textLength = content.split(/\s+/).length; // Pecah berdasarkan spasi
var readingTime = Math.ceil(textLength / wordsPerMinute);
// Bikin elemen tampilannya
var icon = '🕒'; // Emoji jam biar simpel dan ringan
var label = (readingTime <= 1) ? '- 1 menit' : readingTime + ' menit';
var html = '<div id="reading-time-auto" style="font-size: 0.9em; color: #54595d; margin-bottom: 15px; display: flex; align-items: center; font-family: sans-serif;">';
html += '<span style="margin-right: 5px;">' + icon + '</span>';
html += '<span>Estimasi waktu baca : <b>' + label + '</b></span>';
html += '</div>';
// PENEMPELAN TARGET:
// Di Minerva (HP), judul biasanya ada di .page-heading
// Di Vector (Desktop), judul ada di #firstHeading
if ($('.page-heading').length) {
$('.page-heading').after(html); // Target Mobile
} else if ($('#firstHeading').length) {
$('#firstHeading').after(html); // Target Desktop
}
}
// Jalankan fungsi
hitungWaktuBaca();
}
});
/* Script Tombol Back to Top (Spesial Mobile) */
$(document).ready(function() {
// Bikin tombolnya lewat JS biar gak ribet edit CSS/HTML
var btnHtml = '<div id="backToTop" style="display:none; position:fixed; bottom:80px; right:20px; z-index:9999; background:#36c; color:#fff; width:45px; height:45px; border-radius:50%; text-align:center; line-height:45px; font-size:24px; cursor:pointer; box-shadow: 0 4px 6px rgba(0,0,0,0.3); opacity: 0.8;">↑</div>';
$('body').append(btnHtml);
// Fungsi munculin tombol pas di-scroll
$(window).scroll(function() {
if ($(this).scrollTop() > 300) {
$('#backToTop').fadeIn();
} else {
$('#backToTop').fadeOut();
}
});
// Fungsi pas tombol diklik
$('#backToTop').click(function() {
$('html, body').animate({scrollTop: 0}, 600);
return false;
});
});
/* ==========================================================
🚀 MIPPEDIA DATA BUTTON ONLY (Otomatis)
Hanya memunculkan tombol jika data tersedia di pusat.
========================================================== */
$(document).ready(function() {
var pageName = mw.config.get('wgPageName');
var namespace = mw.config.get('wgNamespaceNumber');
var dataDomain = 'https://data.mippedia.org';
// Jalankan hanya di namespace artikel
if (namespace === 0) {
// Cek apakah halaman tersebut ada di Mippedia Data
$.ajax({
url: dataDomain + '/api.php',
data: {
action: 'query',
titles: pageName,
format: 'json',
origin: '*'
},
dataType: 'jsonp',
success: function(res) {
var pages = res.query.pages;
var isExist = false;
// Cek apakah ID halaman > 0 (artinya halaman ada)
for (var id in pages) {
if (parseInt(id) > 0) {
isExist = true;
break;
}
}
// Jika data ditemukan, munculkan tombol melayang
if (isExist) {
injectFloatingDataBtn(pageName, dataDomain);
}
}
});
}
function injectFloatingDataBtn(name, domain) {
if ($('#mippedia-data-btn').length) return;
var $btn = $('<a>', {
id: 'mippedia-data-btn',
href: domain + '/wiki/' + encodeURIComponent(name),
target: '_blank',
style: 'position: absolute; right: 10px; top: -32px; background: #36c; color: #fff; padding: 4px 10px; border-radius: 4px; font-weight: bold; font-size: 10px; text-decoration: none; z-index: 1000; box-shadow: 0 2px 4px rgba(0,0,0,0.1);',
text: 'DATA'
});
// Target: Area menu aksi (dekat ikon pensil)
// Mendukung skin Mobile (Minerva) dan Desktop
var $target = $('.page-actions-menu, .mw-editsection-visualeditor, #ca-edit, .minerva__tab-container').first();
if ($target.length) {
$target.css('position', 'relative').append($btn);
} else {
// Fallback jika header tidak standar
$('#firstHeading').css('position', 'relative').append($btn);
}
}
});
/* ==========================================================
🚀 MIPPEDIA COMMAND CENTER: AUTO-SYNC ENGINE (V4)
Status: Global Login User | Auto-Purge | High Reliability
========================================================== */
(function($, mw) {
"use strict";
var conf = mw.config.get(['wgNamespaceNumber', 'wgAction', 'wgPageName', 'wgIsMainPage', 'wgUserName']);
// Filter: Hanya artikel, hanya saat baca, hanya user yang sudah login
if (conf.wgNamespaceNumber !== 0 || conf.wgAction !== 'view' || conf.wgIsMainPage || conf.wgUserName === null) return;
$(document).ready(function() {
var currentTitle = conf.wgPageName;
// Penentuan subdomain (id, en, concise)
var hostParts = window.location.hostname.split('.');
var langKey = hostParts[0] === 'mippedia' || hostParts[0] === 'www' ? 'id' : hostParts[0];
$.ajax({
url: 'https://data.mippedia.org/api.php',
data: {
action: 'query',
prop: 'revisions',
titles: 'MediaWiki:ShortDesc-Data.json',
rvprop: 'content',
format: 'json',
origin: '*'
},
dataType: 'jsonp',
success: function(res) {
try {
var pages = res.query.pages;
var pageId = Object.keys(pages)[0];
if (pageId === "-1") return;
var fullData = JSON.parse(pages[pageId].revisions[0]['*']);
var targetDesc = (fullData[currentTitle] && fullData[currentTitle][langKey]) ? fullData[currentTitle][langKey].trim() : "";
syncMetadata(currentTitle, targetDesc);
} catch (e) {
console.log("Mippedia System: Data sync not required or entry missing.");
}
}
});
function syncMetadata(title, dataCenterDesc) {
var api = new mw.Api();
api.get({
action: 'query',
prop: 'revisions',
titles: title,
rvprop: 'content',
formatversion: 2
}).done(function(data) {
var content = data.query.pages[0].revisions[0].content;
var shortDescPattern = /\{\{SHORTDESC:.*?\}\}\n?/gi;
var hasLocalDesc = shortDescPattern.test(content);
var localMatch = content.match(/\{\{SHORTDESC:(.*?)\}\}/i);
var currentLocalDesc = localMatch ? localMatch[1].trim() : "";
// AKSI 1: HAPUS (Jika di pusat kosong/dihapus, tapi di artikel lokal masih ada)
if (dataCenterDesc === "" && hasLocalDesc) {
console.log("Mippedia: Purging metadata...");
saveEdit(title, content.replace(shortDescPattern, ""), "Purge out-of-sync metadata");
}
// AKSI 2: UPDATE/TAMBAH (Jika data di pusat ada dan beda dengan lokal)
else if (dataCenterDesc !== "" && dataCenterDesc !== currentLocalDesc) {
console.log("Mippedia: Syncing with Data Center...");
var cleanedContent = content.replace(shortDescPattern, "");
// Menaruh di paling atas agar terbaca Extension ShortDescription
var newContent = '{{SHORTDESC:' + dataCenterDesc + '}}\n' + cleanedContent;
saveEdit(title, newContent, "Sync metadata: " + dataCenterDesc);
}
});
}
function saveEdit(title, text, summary) {
// Menggunakan token user yang sedang login saat ini
new mw.Api().postWithEditToken({
action: 'edit',
title: title,
text: text,
summary: '🤖 ' + summary,
minor: true // Menandai sebagai suntingan kecil
// Parameter 'bot: true' DIHAPUS agar bisa dijalankan semua pengguna login
}).done(function() {
console.log("Mippedia: " + title + " synced successfully.");
});
}
});
})(jQuery, mediaWiki);
/* ==========================================================
🚀 MIPPEDIA METADATA GUARD - RADAR SYSTEM (V5)
Status: Professional Messaging | Hybrid Mobile/Desktop
========================================================== */
(function($, mw) {
"use strict";
var ns = mw.config.get('wgNamespaceNumber');
if (ns !== 0 || mw.config.get('wgIsMainPage')) return;
var shortDescRegex = /\{\{SHORTDESC:.*?\}\}/gi;
var originalShortDesc = null;
function validateAndBlock(e) {
var $textbox = $('#wpTextbox1, textarea.previewable-render, .editor-container textarea, textarea[name="wpTextbox1"]');
if (!$textbox.length) return true;
var currentContent = $textbox.val() || "";
var currentMatch = currentContent.match(shortDescRegex);
var currentShortDesc = currentMatch ? currentMatch[0] : "";
if (originalShortDesc === null) {
originalShortDesc = currentShortDesc;
return true;
}
if (originalShortDesc !== currentShortDesc) {
// --- PESAN PROFESIONAL BARU ---
window.alert(
"MIPPEDIA SYSTEM NOTIFICATION\n" +
"────────────────────────────\n\n" +
"Suntingan anda tidak bisa di lanjutkan untuk di terbitkan, Karena sinkronisasi otomatis terdeteksi tidak valid.\n\n" +
"Untuk menjaga integritas metadata, deskripsi singkat (ShortDescription) wajib dikelola melalui repositori Mippedia Data.\n\n" +
"Harap urungkan perubahan manual pada kode {{SHORTDESC}} untuk melanjutkan proses penyimpanan."
);
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
return false;
}
return true;
}
// Radar untuk menangkap elemen editor saat muncul (terutama di Mobile)
var observer = new MutationObserver(function() {
var $textbox = $('#wpTextbox1, .editor-container textarea, textarea[name="wpTextbox1"]');
if ($textbox.length && originalShortDesc === null) {
var content = $textbox.val() || "";
var match = content.match(shortDescRegex);
originalShortDesc = match ? match[0] : "";
}
});
observer.observe(document.body, { childList: true, subtree: true });
// Event listener untuk tombol simpan di berbagai platform
$(document).on('click mousedown touchstart',
'#wpSave, .mw-ui-button.primary, button.submit, .editor-save, .save-button, button[type="submit"]',
function(e) {
return validateAndBlock(e);
}
);
window.addEventListener('submit', function(e) {
if (!validateAndBlock(e)) e.preventDefault();
}, true);
})(jQuery, mediaWiki);
$(function() {
$('.ambox-learn-more').on('click', function(e) {
e.preventDefault();
var $parentBox = $(this).closest('.ambox');
$parentBox.toggleClass('ambox-active');
$parentBox.find('.ambox-text-long').slideToggle('fast');
// Ubah teks tombol pas dibuka
if ($parentBox.hasClass('ambox-active')) {
$(this).text('Sembunyikan');
} else {
$(this).text('Pelajari selengkapnya');
}
});
});