GoBlog/templates/assets/js/speak.js

37 lines
878 B
JavaScript

"use strict";
let sb = document.getElementById('speakBtn')
let s = window.speechSynthesis
function gv() {
return s ? s.getVoices().filter(voice => voice.lang.startsWith(document.querySelector('html').lang))[0] : false
}
function is() {
if (s) {
sb.classList.remove('hide')
sb.onclick = sp
sb.textContent = sb.dataset.speak
}
}
function sp() {
sb.onclick = ssp
sb.textContent = sb.dataset.stopspeak
let ut = new SpeechSynthesisUtterance(
((document.querySelector('article .p-name')) ? document.querySelector('article .p-name').innerText + "\n\n" : '') + document.querySelector('article .e-content').innerText
)
ut.voice = gv()
ut.onerror = ssp
ut.onend = ssp
s.speak(ut)
}
function ssp() {
s.cancel()
sb.onclick = sp
sb.textContent = sb.dataset.speak
}
window.onbeforeunload = ssp
is()