speech-to-element
Version:
Add real-time speech to text functionality into your website with no effort
88 lines (87 loc) • 4.16 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.Padding = void 0;
const elements_1 = require("./elements");
const cursor_1 = require("./cursor");
const text_1 = require("./text");
class Padding {
static setStateForPrimitiveElement(speech, element) {
if (document.activeElement === element && element.selectionStart !== null) {
const startIndex = element.selectionStart;
const leftCharacter = element.value[startIndex - 1];
const endIndex = element.selectionEnd === null ? startIndex : element.selectionEnd;
const rightCharacter = element.value[endIndex];
if (text_1.Text.isCharDefined(leftCharacter)) {
speech.startPadding = ' ';
speech.numberOfSpacesBeforeNewText = 1;
}
if (text_1.Text.isCharDefined(rightCharacter)) {
speech.endPadding = ' ';
speech.numberOfSpacesAfterNewText = 1;
}
speech.isCursorAtEnd = element.value.length === endIndex;
return;
}
const lastCharacter = element.value[element.value.length - 1];
if (text_1.Text.isCharDefined(lastCharacter)) {
speech.startPadding = ' ';
speech.numberOfSpacesBeforeNewText = 1;
}
speech.isCursorAtEnd = true;
}
static setStateForGenericElement(speech, element) {
var _a, _b, _c;
if (document.activeElement === element) {
const selection = window.getSelection();
if (selection === null || selection === void 0 ? void 0 : selection.focusNode) {
const startIndex = cursor_1.Cursor.getGenericElementCursorOffset(element, selection, true);
const leftCharacter = (_a = element.textContent) === null || _a === void 0 ? void 0 : _a[startIndex - 1];
const endIndex = cursor_1.Cursor.getGenericElementCursorOffset(element, selection, false);
const rightCharacter = (_b = element.textContent) === null || _b === void 0 ? void 0 : _b[endIndex];
if (text_1.Text.isCharDefined(leftCharacter))
speech.startPadding = ' ';
if (text_1.Text.isCharDefined(rightCharacter))
speech.endPadding = ' ';
speech.isCursorAtEnd = ((_c = element.textContent) === null || _c === void 0 ? void 0 : _c.length) === endIndex;
return;
}
}
const lastCharacter = element.innerText.charAt(element.innerText.length - 1);
if (text_1.Text.isCharDefined(lastCharacter))
speech.startPadding = ' ';
speech.isCursorAtEnd = true;
}
static setState(speech, element) {
if (elements_1.Elements.isPrimitiveElement(element)) {
Padding.setStateForPrimitiveElement(speech, element);
}
else {
Padding.setStateForGenericElement(speech, element);
}
}
static adjustStateAfterRecodingPrimitiveElement(speech, input) {
speech.primitiveTextRecorded = true;
if (speech.insertInCursorLocation && document.activeElement === input) {
if (input.selectionEnd !== null) {
speech.endPadding = speech.endPadding + input.value.slice(input.selectionEnd);
}
if (input.selectionStart !== null) {
speech.startPadding = input.value.slice(0, input.selectionStart) + speech.startPadding;
return;
}
}
// this needs to be set to not retain the existing text
speech.startPadding = input.value + speech.startPadding;
}
static adjustSateForNoTextPrimitiveElement(speech) {
if (speech.numberOfSpacesBeforeNewText === 1) {
speech.startPadding = speech.startPadding.substring(0, speech.startPadding.length - 1);
speech.numberOfSpacesBeforeNewText = 0;
}
if (speech.numberOfSpacesAfterNewText === 1) {
speech.endPadding = speech.endPadding.substring(1);
speech.numberOfSpacesAfterNewText = 0;
}
}
}
exports.Padding = Padding;
;