Fixed broken chat reading.
This commit is contained in:
+39
-2
@@ -2589,6 +2589,10 @@ function formatTime(time) {
|
||||
/** @type {lastMessage} */
|
||||
let lastMessage = {};
|
||||
|
||||
/** @type {Object.<string, {queue: string[], active: boolean}>} */
|
||||
let liveRegionStates = {};
|
||||
let liveRegionDelay = 700;
|
||||
|
||||
/**
|
||||
* @param {string} text
|
||||
* @param {string} elementId
|
||||
@@ -2598,9 +2602,42 @@ function announceLiveRegion(text, elementId) {
|
||||
if(!announcement)
|
||||
return;
|
||||
|
||||
announcement.textContent = '';
|
||||
let state = liveRegionStates[elementId];
|
||||
if(!state) {
|
||||
state = {queue: [], active: false};
|
||||
liveRegionStates[elementId] = state;
|
||||
}
|
||||
|
||||
state.queue.push(String(text));
|
||||
if(!state.active)
|
||||
flushLiveRegion(elementId);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} elementId
|
||||
*/
|
||||
function flushLiveRegion(elementId) {
|
||||
let state = liveRegionStates[elementId];
|
||||
let announcement = document.getElementById(elementId);
|
||||
if(!state || !announcement) {
|
||||
if(state)
|
||||
state.active = false;
|
||||
return;
|
||||
}
|
||||
|
||||
let text = state.queue.shift();
|
||||
if(text === undefined) {
|
||||
state.active = false;
|
||||
return;
|
||||
}
|
||||
|
||||
state.active = true;
|
||||
announcement.replaceChildren();
|
||||
window.setTimeout(() => {
|
||||
announcement.textContent = text;
|
||||
let item = document.createElement('div');
|
||||
item.textContent = text;
|
||||
announcement.appendChild(item);
|
||||
window.setTimeout(() => flushLiveRegion(elementId), liveRegionDelay);
|
||||
}, 20);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user