writing demo
voice back adding hover
by cory a
HTML
<script src="//cdn.tinymce.com/4/tinymce.min.js"></script>
<textarea id="box" ></textarea>
<div id="out">
</div>
<div id='last'>
</div>
<div id='cur'>
</div>
<div id="log">
</div>
<div id='temp'>
</div>
JavaScript
//set variables
//textbox
var boxEl = document.getElementById("box");
var out = document.getElementById("out");
var log = document.getElementById("log");
var last = document.getElementById("last");
var cur = document.getElementById("cur");
var temp = document.getElementById("temp");
//last character pressed
var lastChar
//When space bar is selected, find out if it is end of a word, or the end of a sentence
boxEl.addEventListener("keyup", function(e) {
//toremove
last.textContent = "last char: " + lastChar;
if (e.keyCode == 32 && lastChar === 190) {
//period plus space - end of sentence
getSentence()
} else if (e.keyCode == 32 && lastChar === 16) {
//space and shift - could mean ! or ? ending
var caretPos = getCaretPos(boxEl)
var str = boxEl.value
var punctuation = str.charAt(caretPos - 2)
//test for ! or ?
if(punctuation === "!" || punctuation === "?" ) {
getSentence()
}
} else if (e.keyCode == 32) {
//space - end of word
getPrevWord()
}
lastChar = e.keyCode
//to remove
cur.textContent = "cur char: " + lastChar;
log.textContent = "char pos: " + getCaretPos(boxEl)
});
//get the previous word
function getPrevWord() {
var caretPos = getCaretPos(boxEl)
var word = returnWord(boxEl.value, caretPos);
if (word != " ") {
speaker(word)
}
}
function returnWord(text, caretPos) {
var preText = text.substring(0, caretPos);
if (preText.indexOf(" ") > 0) {
var words = preText.split(" ");
return words[words.length - 2]; //return last word
} else {
return preText;
}
}
//get previous sentence functions
function getSentence() {
var caretPos = getCaretPos(boxEl)
//get value from start to caret
var txt = boxEl.value.substring(0, caretPos)
//extract the sentence from it
var sentence = returnSent(txt, caretPos);
//if the sentence is not blank, speak it
if (sentence != " ") {
speaker(sentence)
}
}
function returnSent(text, caretPos) {
//take off last punctuation and...