MediaWiki:Common.js: Perbedaan antara revisi
Tidak ada ringkasan suntingan Tanda: Dikembalikan Suntingan perangkat seluler Suntingan peramban seluler |
Tidak ada ringkasan suntingan Tanda: Dikembalikan Suntingan perangkat seluler Suntingan peramban seluler |
||
| Baris 1: | Baris 1: | ||
/* ========================================================================== | /* ========================================================================== | ||
⚡ | ⚡ ULTRA-SPEED: INSTANT PRERENDERER ACCELERATOR (NEAR-ZERO DELAY) | ||
========================================================================== */ | ========================================================================== */ | ||
$(document).ready(function() { | $(document).ready(function() { | ||
// 1. | // 1. Validasi Keamanan: Hanya jalan di halaman baca artikel | ||
if (!mw.config.get('wgIsArticle') || mw.config.get('wgAction') !== 'view | if (!mw.config.get('wgIsArticle') || mw.config.get('wgAction') !== 'view') return; | ||
// 2. Proteksi Server | // 2. Proteksi Server: Cek fitur hemat data atau koneksi lambat seluler | ||
var koneksi = navigator.connection || navigator.mozConnection || navigator.webkitConnection; | var koneksi = navigator.connection || navigator.mozConnection || navigator.webkitConnection; | ||
if (koneksi | if (koneksi && (koneksi.saveData || /(2g|3g)/i.test(koneksi.effectiveType || ''))) return; | ||
var | var $tagRenderLama = null; | ||
// 3. | // 3. Tangkap link internal di konten utama Mippedia | ||
$('.mw-parser-output a[href^="/wiki/"]').not('[href*=":"] | $('.mw-parser-output a[href^="/wiki/"]') | ||
.not('[href*=":"], .image, .new, .external') | |||
.on('mouseenter mousedown touchstart', function(e) { | |||
var urlTarget = $(this).attr('href'); | |||
if (!urlTarget) return; | |||
// Jika dipicu oleh mouseenter (kursor masuk), beri jeda tunda pintar 50ms | |||
// Jika dipicu mousedown/touchstart (klik/sentuh), langsung hajar tanpa tunda! | |||
var jedaTunda = (e.type === 'mouseenter') ? 50 : 0; | |||
// | clearTimeout($(this).data('timerRender')); | ||
$ | |||
var $linkIni = $(this); | |||
var timer = setTimeout(function() { | |||
// Cek apakah url ini yang sedang aktif di-prerender, jika iya ganti target | |||
if ($tagRenderLama && $tagRenderLama.attr('href') === urlTarget) return; | |||
// Buang slot prerender lama agar server tidak melayani request ganda | |||
if ($tagRenderLama) $tagRenderLama.remove(); | |||
// Suntik elemen prerender dengan prioritas tinggi | |||
$tagRenderLama = $('<link>', { | |||
rel: 'prerender speculationrules', // Mendukung standar browser lama & modern (Speculation Rules API) | |||
href: urlTarget, | |||
as: 'document' | |||
}).appendTo('head'); | |||
}, jedaTunda); | |||
$linkIni.data('timerRender', timer); | |||
}) | |||
.on('mouseleave touchend', function() { | |||
// Batalkan seketika jika kursor cuma numpang lewat cepat | |||
clearTimeout($(this).data('timerRender')); | |||
}); | |||
}); | }); | ||