Hopefully make chalkboard announc when content has changed but not in a spammy way.
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user