Hopefully make chalkboard announc when content has changed but not in a spammy way.

This commit is contained in:
Storm Dragon
2026-05-27 19:21:50 -04:00
parent 7cfbcda152
commit 8e265edbbd
2 changed files with 62 additions and 1 deletions
+61
View File
@@ -2614,6 +2614,17 @@ function announceChat(text) {
let chalkboardRevision = 0;
let chalkboardSendTimer = null;
let applyingChalkboardUpdate = false;
let chalkboardAnnouncementTimer = null;
let chalkboardHasPendingAnnouncement = false;
let chalkboardPendingHasText = false;
let chalkboardLocalTextPending = null;
function clearChalkboardAnnouncementTimer() {
if(chalkboardAnnouncementTimer) {
clearTimeout(chalkboardAnnouncementTimer);
chalkboardAnnouncementTimer = null;
}
}
function canEditChalkboard() {
if(!serverConnection || !serverConnection.permissions)
@@ -2650,6 +2661,10 @@ function updateChalkboardCopyButton() {
function resetChalkboard() {
chalkboardRevision = 0;
chalkboardHasPendingAnnouncement = false;
chalkboardPendingHasText = false;
chalkboardLocalTextPending = null;
clearChalkboardAnnouncementTimer();
if(chalkboardSendTimer) {
clearTimeout(chalkboardSendTimer);
chalkboardSendTimer = null;
@@ -2682,6 +2697,37 @@ async function copyChalkboardToClipboard() {
}
}
function announcePendingChalkboardUpdate() {
clearChalkboardAnnouncementTimer();
if(!chalkboardHasPendingAnnouncement)
return;
announceChat(
chalkboardPendingHasText ?
'Chalkboard updated. Contents available in the chalkboard.' :
'Chalkboard cleared.',
);
chalkboardHasPendingAnnouncement = false;
}
function scheduleChalkboardUpdateAnnouncement(hasText) {
let chalkboard = /** @type {HTMLTextAreaElement} */
(document.getElementById('chalkboard'));
if(!chalkboard)
return;
chalkboardHasPendingAnnouncement = true;
chalkboardPendingHasText = hasText;
if(document.activeElement === chalkboard)
return;
clearChalkboardAnnouncementTimer();
chalkboardAnnouncementTimer = setTimeout(() => {
chalkboardAnnouncementTimer = null;
announceChat(hasText ? 'Chalkboard updated.' : 'Chalkboard cleared.');
}, 2000);
}
/**
* @param {any} message
*/
@@ -2700,10 +2746,20 @@ function applyChalkboardUpdate(message) {
(document.getElementById('chalkboard'));
if(!chalkboard)
return;
let isLocalEcho =
chalkboardLocalTextPending !== null &&
text === chalkboardLocalTextPending;
if(chalkboard.value !== text) {
applyingChalkboardUpdate = true;
chalkboard.value = text;
applyingChalkboardUpdate = false;
if(isLocalEcho) {
chalkboardLocalTextPending = null;
} else {
scheduleChalkboardUpdateAnnouncement(text.length > 0);
}
} else if(isLocalEcho) {
chalkboardLocalTextPending = null;
}
updateChalkboardAccess();
}
@@ -2719,6 +2775,7 @@ function scheduleChalkboardSend() {
(document.getElementById('chalkboard'));
if(!chalkboard || !serverConnection || !serverConnection.socket)
return;
chalkboardLocalTextPending = chalkboard.value;
serverConnection.hallAction('chalkboard', {
text: chalkboard.value,
revision: chalkboardRevision,
@@ -3718,6 +3775,10 @@ document.getElementById('chalkboard').addEventListener('keydown', function(e) {
return;
});
document.getElementById('chalkboard').addEventListener('focus', function(e) {
announcePendingChalkboardUpdate();
});
document.getElementById('chalkboard-copy').addEventListener('click', function(e) {
e.preventDefault();
copyChalkboardToClipboard();