src/ts/ideaForm/rowArrowsNavigation.ts
import * as bootstrap from 'bootstrap';
import {findAllElementsByClassName, focusEndOfInput} from '../domHelper';
export const defaultNbrRows = 5;
export let languageSelects: HTMLElement[] = [];
export let textInputs: HTMLElement[] = [];
export let knownToggles: HTMLElement[] = [];
const expressionLanguageClassName = 'expression-language';
const expressionTextClassName = 'expression-text';
const expressionKnownClassName = 'expression-known-checkbox';
export function initElements(expectedNumberRows: number) {
initElementsWithNbrTries(0, expectedNumberRows);
}
function initElementsWithNbrTries(nbrTries: number, expectedNumberRows: number) {
const maxTries = 100;
const retryDelayInMs = 10;
setTimeout(() => {
textInputs = Array.from(findAllElementsByClassName(expressionTextClassName));
knownToggles = Array.from(findAllElementsByClassName(expressionKnownClassName));
languageSelects = Array.from(findAllElementsByClassName(expressionLanguageClassName));
if (textInputs.length + knownToggles.length + languageSelects.length !== expectedNumberRows * 3 && nbrTries < maxTries) {
initElementsWithNbrTries(nbrTries + 1, expectedNumberRows);
} else {
initToolTips();
const element = findFirstEmptyExpressionElseFirstExpression();
focusEndOfInput(element as HTMLInputElement);
}
}, retryDelayInMs);
}
function initToolTips() {
const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
tooltipTriggerList.map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl));
}
function findFirstEmptyExpressionElseFirstExpression() {
let found = false;
let i = 0;
while (i < textInputs.length && !found) {
found = (textInputs[i] as HTMLInputElement).value.trim() === '';
if (!found) {
i++;
}
}
return found ? textInputs[i] : textInputs[0];
}