diff --git a/static/skald.js b/static/skald.js index 0d907bf..ceb8c4e 100644 --- a/static/skald.js +++ b/static/skald.js @@ -1657,6 +1657,11 @@ function canModerateChat() { serverConnection.permissions.indexOf('op') >= 0); } +function canRecordHall() { + return !!(serverConnection && serverConnection.permissions && + serverConnection.permissions.indexOf('record') >= 0); +} + /** * @param {{label?: string, type?: string, onClick?: function(): void}[]} items * @param {HTMLElement} trigger @@ -1779,6 +1784,12 @@ function userMenu(elt) { inviteMenu(); }}); } + if(canRecordHall()) { + items.push({label: hallRecording ? 'Stop recording' : 'Start recording', + onClick: () => { + serverConnection.hallAction(hallRecording ? 'unrecord' : 'record'); + }}); + } if(findUpMedia('audio')) items.push({label: 'Turn microphone off', onClick: () => { closeUpMedia('audio'); @@ -3131,8 +3142,7 @@ function chalkboardGrantPredicate() { } function recordingPredicate() { - if(serverConnection && serverConnection.permissions && - serverConnection.permissions.indexOf('record') >= 0) + if(canRecordHall()) return null; return 'You are not allowed to record'; } diff --git a/webserver/static_accessibility_test.go b/webserver/static_accessibility_test.go index ad1dc54..4ea3aa3 100644 --- a/webserver/static_accessibility_test.go +++ b/webserver/static_accessibility_test.go @@ -106,3 +106,13 @@ func TestMicrophoneHardStopLivesInSelfMenu(t *testing.T) { requireFunctionContains(t, js, "userMenu", "closeUpMedia('audio')") requireFunctionContains(t, js, "userMenu", "Restart audio connection") } + +func TestRecordingControlLivesInSelfMenu(t *testing.T) { + js := readStaticFile(t, "skald.js") + + requireFunctionContains(t, js, "canRecordHall", "serverConnection.permissions.indexOf('record') >= 0") + requireFunctionContains(t, js, "recordingPredicate", "if(canRecordHall())") + requireFunctionContains(t, js, "userMenu", "if(canRecordHall())") + requireFunctionContains(t, js, "userMenu", "hallRecording ? 'Stop recording' : 'Start recording'") + requireFunctionContains(t, js, "userMenu", "serverConnection.hallAction(hallRecording ? 'unrecord' : 'record')") +}