37 lines
888 B
JavaScript
37 lines
888 B
JavaScript
|
export function debounce(callback, delay = 250) {
|
||
|
let timeoutId
|
||
|
return (...args) => {
|
||
|
clearTimeout(timeoutId)
|
||
|
timeoutId = setTimeout(() => {
|
||
|
timeoutId = null
|
||
|
callback(...args)
|
||
|
}, delay)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export function clampText(text, maxChars = 30) {
|
||
|
if(!text || text.length <= 30) return text
|
||
|
|
||
|
return text.substr(0, maxChars) + '...'
|
||
|
}
|
||
|
|
||
|
export function getCurrentWordBounds(input) {
|
||
|
const text = input.value;
|
||
|
const end = input.selectionStart;
|
||
|
let start = end;
|
||
|
|
||
|
let currentChar = text.charAt(start - 1);
|
||
|
|
||
|
while (currentChar && currentChar !== ' ' && start > 0) {
|
||
|
start--;
|
||
|
currentChar = text.charAt(start - 1);
|
||
|
}
|
||
|
|
||
|
return {start, end};
|
||
|
}
|
||
|
|
||
|
export function getCurrentWord(input) {
|
||
|
const bounds = getCurrentWordBounds(input);
|
||
|
|
||
|
return input.value.substring(bounds.start, bounds.end);
|
||
|
}
|