/* Novel Audio Player v3 - MP3 via Amazon Polly */
(function(){
var btn = document.getElementById('ml-tts-btn');
if (!btn) return;
var audioMap = {
'silent-awakening-ch1': 'zh_ch1.mp3',
'silent-awakening-ch2': 'zh_ch2.mp3',
'silent-awakening-ch3': 'zh_ch3.mp3',
'silent-awakening-ch4': 'zh_ch4.mp3',
'silent-awakening-ch5': 'zh_ch5.mp3',
'silent-awakening-ch6': 'zh_ch6.mp3',
'silent-awakening-ch7': 'zh_ch7.mp3',
'silent-awakening-ch8': 'zh_ch8.mp3',
'silent-awakening-ch9': 'zh_ch9.mp3',
'silent-awakening-ch1-en': 'en_ch1.mp3',
'silent-awakening-ch2-en': 'en_ch2.mp3',
'silent-awakening-ch3-en': 'en_ch3.mp3',
'silent-awakening-ch4-en': 'en_ch4.mp3',
'silent-awakening-ch5-en': 'en_ch5.mp3',
'silent-awakening-ch6-en': 'en_ch6.mp3',
'silent-awakening-ch7-en': 'en_ch7.mp3',
'silent-awakening-ch8-en': 'en_ch8.mp3',
'silent-awakening-ch9-en': 'en_ch9.mp3'
};
var base = 'https://melanieli.com.au/wp-content/uploads/2026/03/';
var slug = location.pathname.replace(/^\/|\/$/g, '');
var file = audioMap[slug];
if (!file) return;
var audio = new Audio(base + file);
audio.preload = 'none';
var player = document.createElement('div');
player.id = 'ml-tts-player';
player.style.cssText = 'display:none;position:fixed;bottom:20px;left:50%;transform:translateX(-50%);z-index:9999;background:rgba(18,18,26,.95);border:1px solid rgba(255,255,255,.1);border-radius:16px;padding:12px 20px;backdrop-filter:blur(10px);box-shadow:0 8px 32px rgba(0,0,0,.4);max-width:92vw;font-size:13px;color:#e8e8f0';
player.innerHTML = '
';
document.body.appendChild(player);
var st = document.createElement('style');
st.textContent = '@media(max-width:600px){#ml-tts-player{left:10px;right:10px;transform:none;bottom:10px}}#ml-tts-seek{-webkit-appearance:none;appearance:none;background:rgba(255,255,255,.15);border-radius:2px;outline:none}#ml-tts-seek::-webkit-slider-thumb{-webkit-appearance:none;width:12px;height:12px;border-radius:50%;background:#6c5ce7;cursor:pointer}';
document.head.appendChild(st);
var statusEl = document.getElementById('ml-tts-status');
var timeEl = document.getElementById('ml-tts-time');
var seekEl = document.getElementById('ml-tts-seek');
var closeEl = document.getElementById('ml-tts-close');
var isPlaying = false;
function fmt(s) {
var h = Math.floor(s/3600), m = Math.floor((s%3600)/60), sec = Math.floor(s%60);
return (h?h+':':'') + (m<10&&h?'0':'') + m + ':' + (sec<10?'0':'') + sec;
}
audio.addEventListener('loadedmetadata', function() {
seekEl.max = Math.floor(audio.duration);
timeEl.textContent = fmt(0) + ' / ' + fmt(audio.duration);
statusEl.textContent = '\uD83D\uDD0A \u6B63\u5728\u64AD\u653E';
});
audio.addEventListener('timeupdate', function() {
if (!seekEl._dragging) {
seekEl.value = Math.floor(audio.currentTime);
timeEl.textContent = fmt(audio.currentTime) + ' / ' + fmt(audio.duration);
}
});
audio.addEventListener('ended', function() {
stop();
statusEl.textContent = '\u2705 \u64AD\u653E\u5B8C\u6BD5';
setTimeout(function(){ player.style.display = 'none'; }, 3000);
});
audio.addEventListener('error', function() {
statusEl.textContent = '\u274C \u52A0\u8F7D\u5931\u8D25';
});
seekEl.addEventListener('mousedown', function(){ seekEl._dragging = true; });
seekEl.addEventListener('touchstart', function(){ seekEl._dragging = true; });
seekEl.addEventListener('change', function(){
audio.currentTime = Number(seekEl.value);
seekEl._dragging = false;
});
function start() {
isPlaying = true;
btn.textContent = '\uD83D\uDD0A \u64AD\u653E\u4E2D';
btn.style.background = 'var(--accent,#6c5ce7)';
btn.style.color = '#fff';
player.style.display = '';
statusEl.textContent = '\uD83D\uDD0A \u52A0\u8F7D\u4E2D...';
audio.play();
}
function stop() {
isPlaying = false;
audio.pause();
btn.textContent = '\uD83D\uDD0A \u542C';
btn.style.background = '';
btn.style.color = '';
player.style.display = 'none';
}
window.mlTtsToggle = function() {
if (isPlaying) {
if (audio.paused) {
audio.play();
statusEl.textContent = '\uD83D\uDD0A \u6B63\u5728\u64AD\u653E';
btn.textContent = '\uD83D\uDD0A \u64AD\u653E\u4E2D';
} else {
audio.pause();
statusEl.textContent = '\u23F8 \u5DF2\u6682\u505C';
btn.textContent = '\u23F8 \u6682\u505C';
}
return;
}
start();
};
closeEl.onclick = function() { stop(); audio.currentTime = 0; };
})();