MediaWiki:Common.js: Perbedaan antara revisi
Tampilan
Tidak ada ringkasan suntingan Tanda: Pengembalian manual Suntingan perangkat seluler Suntingan peramban seluler |
Tidak ada ringkasan suntingan Tanda: Suntingan perangkat seluler Suntingan peramban seluler |
||
| Baris 1: | Baris 1: | ||
/* ========================================================== | /* ========================================================== | ||
🧠 MIPPEDIA DATA - | 🧠 MIPPEDIA DATA - ULTIMATE CLEAN VERSION | ||
Features: Chaining, Auto-Age, Smart Links, | |||
Auto-Bold Subject (NEW), Double-Click Search (NEW) | |||
========================================================== */ | ========================================================== */ | ||
(function() { | (function() { | ||
| Baris 12: | Baris 14: | ||
if (!$descBox.length) return; | if (!$descBox.length) return; | ||
var pageTitle = mw.config.get('wgPageName'); | var pageTitle = mw.config.get('wgPageName').replace(/_/g, ' '); // Ambil judul halaman murni | ||
var currentYear = 2026; | var currentYear = 2026; | ||
| Baris 21: | Baris 23: | ||
]; | ]; | ||
function | // 🛠️ FUNGSI BARU 1: Auto-Bold Subjek Utama | ||
function applyAutoBold(text) { | |||
// Kita bikin regex buat nyari judul halaman di dalam teks (case insensitive) | |||
var regex = new RegExp('(' + pageTitle + ')', 'gi'); | |||
return text.replace(regex, '<strong>$1</strong>'); | |||
} | } | ||
function cleanExtract(text) { | // 🛠️ FUNGSI BARU 2: Double-Click Search | ||
$descBox.on('dblclick', function() { | |||
var selectedText = window.getSelection().toString().trim(); | |||
if (selectedText.length > 2) { // Minimal 3 karakter biar gak typo | |||
var searchUrl = "https://id.mippedia.org/w/index.php?search=" + encodeURIComponent(selectedText); | |||
window.open(searchUrl, '_blank'); | |||
} | |||
}); | |||
// --- Fungsi Helper Lainnya --- | |||
function cleanExtract(text) { return text.replace(/\[\d+\]/g, '').replace(/\{\{[^}]+\}\}/g, '').replace(/\(\s*\)/g, '').replace(/\s\s+/g, ' ').trim(); } | |||
function applyAutoAge(text) { | |||
return text.replace(/(\d{1,2}\s(?:Januari|Februari|Maret|April|Mei|Juni|Juli|Agustus|September|Oktober|November|Desember)\s(\d{4}))/gi, function(m, f, y) { | |||
return f + " – usia " + (currentYear - parseInt(y)) + " tahun"; | |||
}); | |||
} | } | ||
| Baris 34: | Baris 51: | ||
var limit = 250; | var limit = 250; | ||
if (text.length <= limit) return '<span>' + text + '</span>'; | if (text.length <= limit) return '<span>' + text + '</span>'; | ||
return '<span>' + text.substring(0, limit) + '</span> | return '<span>' + text.substring(0, limit) + '</span><span class="mip-dots">... </span><span class="mip-more" style="display:none;">' + text.substring(limit) + '</span><span class="mip-read-btn" style="color: #6a5acd; cursor: pointer; font-weight: bold; margin-left: 5px;">Baca selengkapnya</span>'; | ||
} | } | ||
function buildSmartLinks(currentId) { | function buildSmartLinks(currentId) { | ||
$portalLinks.empty(); | $portalLinks.empty(); | ||
var validLinks = []; | var validLinks = []; | ||
var checkRequests = projects.filter(p => p.id !== currentId).map(function(p) { | var checkRequests = projects.filter(p => p.id !== currentId).map(function(p) { | ||
return $.ajax({ | return $.ajax({ url: p.url, data: { action: 'query', titles: pageTitle, format: 'json', origin: '*' }, dataType: 'json' }) | ||
.then(function(data) { if (data.query.pages["-1"] === undefined) { validLinks.push('<a href="' + p.base + encodeURIComponent(pageTitle) + '" target="_blank" style="color: #6a5acd; text-decoration: underline; font-weight: bold;">' + p.label + '</a>'); } }); | |||
}); | }); | ||
$.when.apply($, checkRequests).done(function() { | $.when.apply($, checkRequests).done(function() { | ||
if (validLinks.length > 0) { | if (validLinks.length > 0) { $portalLinks.html(validLinks.join(' <span style="color:#ccc; margin: 0 5px;">•</span> ')); $projectPortal.fadeIn(); } | ||
}); | }); | ||
} | } | ||
function renderAll(p, currentText, isTranslated, originalText) { | function renderAll(p, currentText, isTranslated, originalText) { | ||
var | // Gabungkan Auto-Age dan Auto-Bold di sini | ||
$ | var processedText = applyAutoBold(applyAutoAge(currentText)); | ||
$descBox.show().html(applySummary(processedText)); | |||
var footer = '<div style="font-size: 0.9em; color: #777;">Sumber Dari : <a href="' + p.base + encodeURIComponent(pageTitle) + '" target="_blank" style="color: #6a5acd; font-weight: bold; text-decoration: none;">' + p.name + '.</a>'; | |||
if (isTranslated) { footer += '<br><span style="font-size: 0.85em; font-style: italic;">(Diterjemahkan secara otomatis)</span> <span id="mip-toggle-orig" style="color: #6a5acd; cursor: pointer; text-decoration: underline; margin-left: 5px;">Tampilkan versi asli</span>'; } | |||
$sourceInfo.show().html(footer); | |||
buildSmartLinks(p.id); | buildSmartLinks(p.id); | ||
$(document).off('click', '.mip-read-btn').on('click', '.mip-read-btn', function() { | $(document).off('click', '.mip-read-btn').on('click', '.mip-read-btn', function() { $(this).hide(); $('.mip-dots').hide(); $('.mip-more').fadeIn(); }); | ||
$(document).off('click', '#mip-toggle-orig').on('click', '#mip-toggle-orig', function() { | $(document).off('click', '#mip-toggle-orig').on('click', '#mip-toggle-orig', function() { | ||
var isOrig = ($(this).text() === 'Tampilkan versi asli'); | var isOrig = ($(this).text() === 'Tampilkan versi asli'); | ||
var textToDisplay = applyAutoBold(applyAutoAge(isOrig ? originalText : currentText)); | |||
$descBox.html(applySummary(textToDisplay)); | |||
$(this).text(isOrig ? 'Tampilkan terjemahan' : 'Tampilkan versi asli'); | $(this).text(isOrig ? 'Tampilkan terjemahan' : 'Tampilkan versi asli'); | ||
}); | }); | ||
| Baris 102: | Baris 88: | ||
function fetchDescription(index) { | function fetchDescription(index) { | ||
if (index >= projects.length) | if (index >= projects.length) return; | ||
var p = projects[index]; | var p = projects[index]; | ||
$descSection.show(); | $descSection.show(); | ||
| Baris 120: | Baris 103: | ||
if (extract !== "") { | if (extract !== "") { | ||
if (p.id === 'en') { | if (p.id === 'en') { | ||
$.ajax({ url: "https://translate.googleapis.com/translate_a/single?client=gtx&sl=en&tl=id&dt=t&q=" + encodeURIComponent(extract), success: function(res) { | |||
var trans = ""; res[0].forEach(function(s) { if (s[0]) trans += s[0]; }); | |||
renderAll(p, trans, true, extract); | |||
}}); | |||
} else { renderAll(p, extract, false); } | } else { renderAll(p, extract, false); } | ||
return; | return; | ||
| Baris 126: | Baris 112: | ||
} | } | ||
fetchDescription(index + 1); | fetchDescription(index + 1); | ||
} | }, | ||
error: function() { fetchDescription(index + 1); } | |||
}); | }); | ||
} | } | ||
Revisi per 15 April 2026 06.18
/* ==========================================================
🧠 MIPPEDIA DATA - ULTIMATE CLEAN VERSION
Features: Chaining, Auto-Age, Smart Links,
Auto-Bold Subject (NEW), Double-Click Search (NEW)
========================================================== */
(function() {
$(document).ready(function() {
var $descSection = $('#mip-desc-section');
var $descBox = $('#mip-auto-description');
var $sourceInfo = $('#mip-source-info');
var $portalLinks = $('#mip-portal-links');
var $projectPortal = $('#mip-project-portal');
if (!$descBox.length) return;
var pageTitle = mw.config.get('wgPageName').replace(/_/g, ' '); // Ambil judul halaman murni
var currentYear = 2026;
var projects = [
{ id: 'id', name: 'Mippedia bahasa Indonesia', url: 'https://id.mippedia.org/api.php', base: 'https://id.mippedia.org/wiki/', label: 'Bahasa Indonesia' },
{ id: 'en', name: 'Mippedia bahasa Inggris', url: 'https://en.mippedia.org/api.php', base: 'https://en.mippedia.org/wiki/', label: 'Bahasa Inggris' },
{ id: 'concise', name: 'Mippedia bahasa Indonesia ringkas', url: 'https://concise.mippedia.org/api.php', base: 'https://concise.mippedia.org/wiki/', label: 'Versi Ringkas' }
];
// 🛠️ FUNGSI BARU 1: Auto-Bold Subjek Utama
function applyAutoBold(text) {
// Kita bikin regex buat nyari judul halaman di dalam teks (case insensitive)
var regex = new RegExp('(' + pageTitle + ')', 'gi');
return text.replace(regex, '<strong>$1</strong>');
}
// 🛠️ FUNGSI BARU 2: Double-Click Search
$descBox.on('dblclick', function() {
var selectedText = window.getSelection().toString().trim();
if (selectedText.length > 2) { // Minimal 3 karakter biar gak typo
var searchUrl = "https://id.mippedia.org/w/index.php?search=" + encodeURIComponent(selectedText);
window.open(searchUrl, '_blank');
}
});
// --- Fungsi Helper Lainnya ---
function cleanExtract(text) { return text.replace(/\[\d+\]/g, '').replace(/\{\{[^}]+\}\}/g, '').replace(/\(\s*\)/g, '').replace(/\s\s+/g, ' ').trim(); }
function applyAutoAge(text) {
return text.replace(/(\d{1,2}\s(?:Januari|Februari|Maret|April|Mei|Juni|Juli|Agustus|September|Oktober|November|Desember)\s(\d{4}))/gi, function(m, f, y) {
return f + " – usia " + (currentYear - parseInt(y)) + " tahun";
});
}
function applySummary(text) {
var limit = 250;
if (text.length <= limit) return '<span>' + text + '</span>';
return '<span>' + text.substring(0, limit) + '</span><span class="mip-dots">... </span><span class="mip-more" style="display:none;">' + text.substring(limit) + '</span><span class="mip-read-btn" style="color: #6a5acd; cursor: pointer; font-weight: bold; margin-left: 5px;">Baca selengkapnya</span>';
}
function buildSmartLinks(currentId) {
$portalLinks.empty();
var validLinks = [];
var checkRequests = projects.filter(p => p.id !== currentId).map(function(p) {
return $.ajax({ url: p.url, data: { action: 'query', titles: pageTitle, format: 'json', origin: '*' }, dataType: 'json' })
.then(function(data) { if (data.query.pages["-1"] === undefined) { validLinks.push('<a href="' + p.base + encodeURIComponent(pageTitle) + '" target="_blank" style="color: #6a5acd; text-decoration: underline; font-weight: bold;">' + p.label + '</a>'); } });
});
$.when.apply($, checkRequests).done(function() {
if (validLinks.length > 0) { $portalLinks.html(validLinks.join(' <span style="color:#ccc; margin: 0 5px;">•</span> ')); $projectPortal.fadeIn(); }
});
}
function renderAll(p, currentText, isTranslated, originalText) {
// Gabungkan Auto-Age dan Auto-Bold di sini
var processedText = applyAutoBold(applyAutoAge(currentText));
$descBox.show().html(applySummary(processedText));
var footer = '<div style="font-size: 0.9em; color: #777;">Sumber Dari : <a href="' + p.base + encodeURIComponent(pageTitle) + '" target="_blank" style="color: #6a5acd; font-weight: bold; text-decoration: none;">' + p.name + '.</a>';
if (isTranslated) { footer += '<br><span style="font-size: 0.85em; font-style: italic;">(Diterjemahkan secara otomatis)</span> <span id="mip-toggle-orig" style="color: #6a5acd; cursor: pointer; text-decoration: underline; margin-left: 5px;">Tampilkan versi asli</span>'; }
$sourceInfo.show().html(footer);
buildSmartLinks(p.id);
$(document).off('click', '.mip-read-btn').on('click', '.mip-read-btn', function() { $(this).hide(); $('.mip-dots').hide(); $('.mip-more').fadeIn(); });
$(document).off('click', '#mip-toggle-orig').on('click', '#mip-toggle-orig', function() {
var isOrig = ($(this).text() === 'Tampilkan versi asli');
var textToDisplay = applyAutoBold(applyAutoAge(isOrig ? originalText : currentText));
$descBox.html(applySummary(textToDisplay));
$(this).text(isOrig ? 'Tampilkan terjemahan' : 'Tampilkan versi asli');
});
}
function fetchDescription(index) {
if (index >= projects.length) return;
var p = projects[index];
$descSection.show();
$.ajax({
url: p.url,
data: { action: 'query', prop: 'extracts', exintro: true, explaintext: true, titles: pageTitle, format: 'json', origin: '*' },
dataType: 'json',
success: function(data) {
var pages = data.query.pages;
var pageId = Object.keys(pages)[0];
if (pageId != "-1") {
var extract = cleanExtract(pages[pageId].extract);
if (extract !== "") {
if (p.id === 'en') {
$.ajax({ url: "https://translate.googleapis.com/translate_a/single?client=gtx&sl=en&tl=id&dt=t&q=" + encodeURIComponent(extract), success: function(res) {
var trans = ""; res[0].forEach(function(s) { if (s[0]) trans += s[0]; });
renderAll(p, trans, true, extract);
}});
} else { renderAll(p, extract, false); }
return;
}
}
fetchDescription(index + 1);
},
error: function() { fetchDescription(index + 1); }
});
}
fetchDescription(0);
});
})();