From a1297e72c1e855e84bfbffe4c0f929cbbbc51fdb Mon Sep 17 00:00:00 2001 From: Jan-Lukas Else Date: Thu, 18 Feb 2021 09:17:23 +0100 Subject: [PATCH] Rewrite speak.js to make it smaller when compressed --- templates/assets/js/speak.js | 63 ++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/templates/assets/js/speak.js b/templates/assets/js/speak.js index 4a5b408..d1c5782 100644 --- a/templates/assets/js/speak.js +++ b/templates/assets/js/speak.js @@ -1,37 +1,38 @@ -"use strict"; +(function () { + window.onbeforeunload = stopSpeak -let sb = document.getElementById('speakBtn') -let s = window.speechSynthesis + let speakButton = query('#speakBtn') + let speech = 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 + if (getVoice()) { + speakButton.classList.remove('hide') + speakButton.onclick = startSpeak + speakButton.textContent = speakButton.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 query(selector) { + return document.querySelector(selector) + } -function ssp() { - s.cancel() - sb.onclick = sp - sb.textContent = sb.dataset.speak -} + function getVoice() { + return speech ? speech.getVoices().filter(voice => voice.lang.startsWith(query('html').lang))[0] : false + } -window.onbeforeunload = ssp -is() \ No newline at end of file + function startSpeak() { + speakButton.onclick = stopSpeak + speakButton.textContent = speakButton.dataset.stopspeak + let ut = new SpeechSynthesisUtterance( + ((query('article .p-name')) ? query('article .p-name').innerText + "\n\n" : '') + query('article .e-content').innerText + ) + ut.voice = getVoice() + ut.onerror = stopSpeak + ut.onend = stopSpeak + speech.speak(ut) + } + + function stopSpeak() { + speech.cancel() + speakButton.onclick = startSpeak + speakButton.textContent = speakButton.dataset.speak + } +})() \ No newline at end of file