Play earcon on empty or whitespace rows. Add support for selection.
This commit is contained in:
parent
23f62e015b
commit
1a54f05075
1 changed files with 33 additions and 8 deletions
|
|
@ -381,6 +381,17 @@ var mergeLikeTokens = function(tokens) {
|
||||||
return newTokens;
|
return newTokens;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns if given row is a whitespace row.
|
||||||
|
* @param {number} row Row.
|
||||||
|
* @return {boolean} True if row is whitespaces.
|
||||||
|
*/
|
||||||
|
var isRowWhiteSpace = function(row) {
|
||||||
|
var line = cvoxAce.editor.getSession().getLine(row);
|
||||||
|
var whiteSpaceRegexp = /^\s*$/;
|
||||||
|
return whiteSpaceRegexp.exec(line) !== null;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Speak the line with syntax properties.
|
* Speak the line with syntax properties.
|
||||||
* @param {number} row Row to speak.
|
* @param {number} row Row to speak.
|
||||||
|
|
@ -388,7 +399,8 @@ var mergeLikeTokens = function(tokens) {
|
||||||
*/
|
*/
|
||||||
var speakLine = function(row, queue) {
|
var speakLine = function(row, queue) {
|
||||||
var tokens = cvoxAce.editor.getSession().getTokens(row);
|
var tokens = cvoxAce.editor.getSession().getTokens(row);
|
||||||
if (tokens.length === 0) {
|
if (tokens.length === 0 || isRowWhiteSpace(row)) {
|
||||||
|
cvox.Api.playEarcon('EDITABLE_TEXT');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
tokens = mergeLikeTokens(tokens);
|
tokens = mergeLikeTokens(tokens);
|
||||||
|
|
@ -480,10 +492,7 @@ var speakDisplacement = function(lastCursor, currCursor) {
|
||||||
|
|
||||||
/* Get the text that we jumped past. */
|
/* Get the text that we jumped past. */
|
||||||
var displace = line.substring(lastCursor.column, currCursor.column);
|
var displace = line.substring(lastCursor.column, currCursor.column);
|
||||||
/* When going forward one space, we speak where we land instead. */
|
|
||||||
if (currCursor.column - lastCursor.column === 1) {
|
|
||||||
displace = line.substring(lastCursor.column + 1, currCursor.column + 1);
|
|
||||||
}
|
|
||||||
/* Speak out loud spaces. */
|
/* Speak out loud spaces. */
|
||||||
displace = displace.replace(/ /g, ' space ');
|
displace = displace.replace(/ /g, ' space ');
|
||||||
cvox.Api.speak(displace, 1);
|
cvox.Api.speak(displace, 1);
|
||||||
|
|
@ -522,7 +531,11 @@ var speakCharOrWordOrLine = function(lastCursor, currCursor) {
|
||||||
* @param {!cvoxAce.Cursor} currCursor Current cursor position.
|
* @param {!cvoxAce.Cursor} currCursor Current cursor position.
|
||||||
*/
|
*/
|
||||||
var onColumnChange = function(lastCursor, currCursor) {
|
var onColumnChange = function(lastCursor, currCursor) {
|
||||||
if (shouldSpeakDisplacement) {
|
if (!cvoxAce.editor.selection.isEmpty()) {
|
||||||
|
speakDisplacement(lastCursor, currCursor);
|
||||||
|
cvox.Api.speak('selected', 1);
|
||||||
|
}
|
||||||
|
else if (shouldSpeakDisplacement) {
|
||||||
speakDisplacement(lastCursor, currCursor);
|
speakDisplacement(lastCursor, currCursor);
|
||||||
} else {
|
} else {
|
||||||
speakCharOrWordOrLine(lastCursor, currCursor);
|
speakCharOrWordOrLine(lastCursor, currCursor);
|
||||||
|
|
@ -550,6 +563,17 @@ var onCursorChange = function(evt) {
|
||||||
lastCursor = currCursor;
|
lastCursor = currCursor;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Event handler for selection changes.
|
||||||
|
* @param {!Event} evt The event.
|
||||||
|
*/
|
||||||
|
var onSelectionChange = function(evt) {
|
||||||
|
/* Assumes that when selection changes to empty, the user has unselected. */
|
||||||
|
if (cvoxAce.editor.selection.isEmpty()) {
|
||||||
|
cvox.Api.speak('unselected');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Event handler for source changes. We want auditory feedback for inserting
|
* Event handler for source changes. We want auditory feedback for inserting
|
||||||
* and deleting text.
|
* and deleting text.
|
||||||
|
|
@ -695,9 +719,9 @@ var toggleSpeakRowLocation = function() {
|
||||||
* Toggle speak displacement.
|
* Toggle speak displacement.
|
||||||
*/
|
*/
|
||||||
var toggleSpeakDisplacement = function() {
|
var toggleSpeakDisplacement = function() {
|
||||||
speakDisplacement = !speakDisplacement;
|
shouldSpeakDisplacement = !shouldSpeakDisplacement;
|
||||||
/* Auditory feedback of the change. */
|
/* Auditory feedback of the change. */
|
||||||
if (speakDisplacement) {
|
if (shouldSpeakDisplacement) {
|
||||||
cvox.Api.speak('Speak displacement on column changes.');
|
cvox.Api.speak('Speak displacement on column changes.');
|
||||||
} else {
|
} else {
|
||||||
cvox.Api.speak('Speak current character or word on column changes.');
|
cvox.Api.speak('Speak current character or word on column changes.');
|
||||||
|
|
@ -874,6 +898,7 @@ var onFocus = function() {
|
||||||
|
|
||||||
/* Set up listeners. */
|
/* Set up listeners. */
|
||||||
editor.getSession().selection.on('changeCursor', onCursorChange);
|
editor.getSession().selection.on('changeCursor', onCursorChange);
|
||||||
|
editor.getSession().selection.on('changeSelection', onSelectionChange);
|
||||||
editor.getSession().on('change', onChange);
|
editor.getSession().on('change', onChange);
|
||||||
editor.getSession().on('changeAnnotation', onAnnotationChange);
|
editor.getSession().on('changeAnnotation', onAnnotationChange);
|
||||||
editor.on('changeStatus', onChangeStatus);
|
editor.on('changeStatus', onChangeStatus);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue