document.addEventListener("DOMContentLoaded", function() {
let images = document.querySelectorAll('.post-body img');
images.forEach(function(img) {
if (img.src && img.src.includes('blogger.googleusercontent.com/')) {
// Hapus parameter -c-p-k-no-nu yang menyebabkan error
let fixedUrl = img.src.replace(/-c-p-k-no-nu/, '');
// Set ke ukuran terbesar (s1600)
fixedUrl = fixedUrl.replace(/=s\d+(-\w+)?/i, '=s1600');
if (fixedUrl !== img.src) {
img.src = fixedUrl;
}
img.style.maxWidth = "100%";
img.style.height = "auto";
}
});
});
// Durasi untuk Mungkin Kamu Suka - Versi Final
(function() {
'use strict';
// Tunggu hingga halaman selesai dimuat
function waitForElement(selector, callback, maxAttempts) {
var attempts = 0;
var interval = setInterval(function() {
var element = document.querySelector(selector);
if (element || attempts >= (maxAttempts || 50)) {
clearInterval(interval);
if (element) callback(element);
}
attempts++;
}, 200);
}
// Ekstrak YouTube ID dari berbagai format URL
function getYouTubeId(url) {
if (!url) return null;
var patterns = [
/youtube\.com\/watch\?v=([^&?#]+)/,
/youtu\.be\/([^&?#]+)/,
/youtube\.com\/embed\/([^&?#]+)/,
/youtube\.com\/v\/([^&?#]+)/
];
for (var i = 0; i < patterns.length; i++) {
var match = url.match(patterns[i]);
if (match) return match[1];
}
return null;
}
// Format durasi ISO 8601 ke MM:SS atau HH:MM:SS
function formatDuration(isoDuration) {
var match = isoDuration.match(/PT(?:(\d+)H)?(?:(\d+)M)?(?:(\d+)S)?/);
var hours = match[1] ? parseInt(match[1]) : 0;
var minutes = match[2] ? parseInt(match[2]) : 0;
var seconds = match[3] ? parseInt(match[3]) : 0;
if (hours > 0) {
return hours + ':' + String(minutes).padStart(2, '0') + ':' + String(seconds).padStart(2, '0');
}
return minutes + ':' + String(seconds).padStart(2, '0');
}
// Ambil durasi dari YouTube API (dengan cache localStorage)
function fetchDuration(videoId, callback) {
var cacheKey = 'yt_dur_' + videoId;
var cached = localStorage.getItem(cacheKey);
if (cached) {
callback(cached);
return;
}
var apiKey = 'AIzaSyB5HoRZGvrHb4EoyKBGl9eQNZ5lG4xEkOA';
var apiUrl = 'https://www.googleapis.com/youtube/v3/videos?id=' + videoId + '&part=contentDetails&key=' + apiKey;
fetch(apiUrl)
.then(function(response) { return response.json(); })
.then(function(data) {
if (data.items && data.items.length > 0) {
var duration = formatDuration(data.items[0].contentDetails.duration);
localStorage.setItem(cacheKey, duration);
callback(duration);
} else {
callback(null);
}
})
.catch(function() { callback(null); });
}
// Fungsi utama untuk menambahkan durasi ke semua thumbnail di "Mungkin Kamu Suka"
function addDurationsToRelatedPosts() {
var containers = document.querySelectorAll('.related_posts_feed');
if (!containers.length) return;
containers.forEach(function(container) {
var links = container.querySelectorAll('.post_thumbnail a');
links.forEach(function(link) {
// Hindari duplikasi
if (link.hasAttribute('data-duration-processed')) return;
link.setAttribute('data-duration-processed', 'true');
var videoId = getYouTubeId(link.href);
if (!videoId) return;
var parentThumb = link.parentNode;
// Cek apakah sudah ada elemen durasi
if (parentThumb.querySelector('.video_duration')) return;
fetchDuration(videoId, function(duration) {
if (duration) {
// Buat elemen durasi
var durationSpan = document.createElement('span');
durationSpan.className = 'video_duration';
durationSpan.textContent = duration;
// Style sama dengan yang di news_videos
durationSpan.style.cssText = 'position:absolute; bottom:8px; right:8px; background:rgba(0,0,0,0.7); color:#fff; padding:2px 6px; border-radius:4px; font-size:12px; font-weight:bold; z-index:5;';
// Pastikan parent memiliki position relative
if (window.getComputedStyle(parentThumb).position === 'static') {
parentThumb.style.position = 'relative';
}
parentThumb.appendChild(durationSpan);
}
});
});
});
}
// Jalankan saat DOM siap
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', function() {
// Tunggu sebentar agar related posts sempat dimuat
setTimeout(addDurationsToRelatedPosts, 1000);
// Jalankan ulang saat ada perubahan (lazy load)
var observer = new MutationObserver(function() {
addDurationsToRelatedPosts();
});
observer.observe(document.body, { childList: true, subtree: true });
});
} else {
setTimeout(addDurationsToRelatedPosts, 1000);
}
})();