diff --git a/assets/css/style.scss b/assets/css/style.scss
index a0feb3c..b3243c5 100644
--- a/assets/css/style.scss
+++ b/assets/css/style.scss
@@ -511,6 +511,9 @@ select {
&:first-child {
margin-left: 0;
}
+ &:hover {
+ cursor: pointer;
+ }
}
}
diff --git a/assets/js/scripts.js b/assets/js/scripts.js
new file mode 100644
index 0000000..a26c6f9
--- /dev/null
+++ b/assets/js/scripts.js
@@ -0,0 +1,29 @@
+"use strict";
+
+let synth = window.speechSynthesis;
+
+function initSpeak() {
+ if (synth && document.querySelector('.content')) {
+ document.querySelector('#speakBtn').style.display = '';
+ stopSpeak();
+ }
+}
+
+function speak() {
+ stopSpeak();
+ let voices = synth.getVoices().filter(voice => voice.lang.startsWith(document.querySelector('html').lang));
+ if (voices.length == 0) return;
+ document.querySelector('#speakBtn').innerHTML = "Stop speaking!";
+ let utterThis = new SpeechSynthesisUtterance(document.querySelector('.content').textContent);
+ utterThis.voice = voices[0];
+ utterThis.onerror = stopSpeak;
+ utterThis.onend = stopSpeak;
+ synth.speak(utterThis);
+}
+
+function stopSpeak() {
+ synth.cancel();
+ document.querySelector('#speakBtn').innerHTML = "Read to me, please.";
+}
+
+window.onload = initSpeak();
\ No newline at end of file
diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html
index 6573cc6..abd2c63 100644
--- a/layouts/_default/baseof.html
+++ b/layouts/_default/baseof.html
@@ -41,5 +41,7 @@
{{ partialCached "footer" . }}
{{ partialCached "custombodyend" . }}
+ {{ $scripts := resources.Get "js/scripts.js" | minify | fingerprint }}
+