Slow Mode WIP (#192):
* frontend: display an infobox when slow mode is active (WIP)
This commit is contained in:
parent
9efd53b2a7
commit
1e876ec43c
@ -8,6 +8,7 @@
|
|||||||
* new option in room configuration to set the slow mode delay (new prosody module mod_muc_slow_mode).
|
* new option in room configuration to set the slow mode delay (new prosody module mod_muc_slow_mode).
|
||||||
* default delay is configurable in channel's chat rooms options.
|
* default delay is configurable in channel's chat rooms options.
|
||||||
* backend rejects messages when the slow mode is not respected.
|
* backend rejects messages when the slow mode is not respected.
|
||||||
|
* frontend: display an infobox when slow mode is active.
|
||||||
|
|
||||||
### Minor changes and fixes
|
### Minor changes and fixes
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@ import {
|
|||||||
} from './lib/converse-params'
|
} from './lib/converse-params'
|
||||||
import { getLocalAuthentInfos } from './lib/auth'
|
import { getLocalAuthentInfos } from './lib/auth'
|
||||||
import { randomNick, getPreviousAnonymousNick, setPreviousAnonymousNick } from './lib/nick'
|
import { randomNick, getPreviousAnonymousNick, setPreviousAnonymousNick } from './lib/nick'
|
||||||
|
import { slowModePlugin } from './lib/slow-mode/plugin'
|
||||||
|
|
||||||
declare global {
|
declare global {
|
||||||
interface Window {
|
interface Window {
|
||||||
@ -109,6 +110,8 @@ window.initConverse = async function initConverse (initConverseParams: InitConve
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
converse.plugins.add('converse-slow-mode', slowModePlugin)
|
||||||
|
|
||||||
// livechatSpecifics plugins add some customization for the livechat plugin.
|
// livechatSpecifics plugins add some customization for the livechat plugin.
|
||||||
converse.plugins.add('livechatSpecifics', {
|
converse.plugins.add('livechatSpecifics', {
|
||||||
dependencies: ['converse-muc', 'converse-muc-views'],
|
dependencies: ['converse-muc', 'converse-muc-views'],
|
||||||
|
@ -16,6 +16,13 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.chatbox {
|
.chatbox {
|
||||||
|
// Slow mode info box
|
||||||
|
livechat-slow-mode {
|
||||||
|
border-top: var(--chatroom-message-input-border-top);
|
||||||
|
color: var(--peertube-main-foreground);
|
||||||
|
background-color: var(--peertube-main-background);
|
||||||
|
}
|
||||||
|
|
||||||
converse-chat-toolbar {
|
converse-chat-toolbar {
|
||||||
color: var(--peertube-main-foreground);
|
color: var(--peertube-main-foreground);
|
||||||
background-color: var(--peertube-main-background);
|
background-color: var(--peertube-main-background);
|
||||||
|
@ -2,6 +2,7 @@ import { __ } from 'i18n'
|
|||||||
import { _converse, api } from '@converse/headless/core'
|
import { _converse, api } from '@converse/headless/core'
|
||||||
import { html } from 'lit'
|
import { html } from 'lit'
|
||||||
import tplMucBottomPanel from '../../src/plugins/muc-views/templates/muc-bottom-panel.js'
|
import tplMucBottomPanel from '../../src/plugins/muc-views/templates/muc-bottom-panel.js'
|
||||||
|
import { CustomElement } from 'shared/components/element.js'
|
||||||
|
|
||||||
async function setNickname (ev, model) {
|
async function setNickname (ev, model) {
|
||||||
ev.preventDefault()
|
ev.preventDefault()
|
||||||
@ -15,6 +16,41 @@ async function setNickname (ev, model) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class SlowMode extends CustomElement {
|
||||||
|
static get properties () {
|
||||||
|
return {
|
||||||
|
jid: { type: String }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async connectedCallback () {
|
||||||
|
super.connectedCallback()
|
||||||
|
this.model = _converse.chatboxes.get(this.jid)
|
||||||
|
await this.model.initialized
|
||||||
|
|
||||||
|
this.listenTo(this.model.config, 'change:slow_mode_delay', () => {
|
||||||
|
this.requestUpdate()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
render () {
|
||||||
|
if (!(parseInt(this.model.config.get('slow_mode_delay')) > 0)) { // This includes NaN, for which ">0"===false
|
||||||
|
return html``
|
||||||
|
}
|
||||||
|
return html`
|
||||||
|
<converse-icon class="fa fa-info-circle" size="1.2em"></converse-icon>
|
||||||
|
${__(
|
||||||
|
'Slow mode is enabled, you have to wait %1$s seconds between two messages.',
|
||||||
|
this.model.config.get('slow_mode_delay')
|
||||||
|
)}`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
api.elements.define('livechat-slow-mode', SlowMode)
|
||||||
|
|
||||||
|
const tplSlowMode = (o) => {
|
||||||
|
return html`<livechat-slow-mode jid=${o.model.get('jid')}>`
|
||||||
|
}
|
||||||
|
|
||||||
export default (o) => {
|
export default (o) => {
|
||||||
if (api.settings.get('livechat_viewer_mode')) {
|
if (api.settings.get('livechat_viewer_mode')) {
|
||||||
const model = o.model
|
const model = o.model
|
||||||
@ -39,7 +75,11 @@ export default (o) => {
|
|||||||
</fieldset>
|
</fieldset>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
${tplSlowMode(o)}
|
||||||
${tplMucBottomPanel(o)}`
|
${tplMucBottomPanel(o)}`
|
||||||
}
|
}
|
||||||
return tplMucBottomPanel(o)
|
|
||||||
|
return html`
|
||||||
|
${tplSlowMode(o)}
|
||||||
|
${tplMucBottomPanel(o)}`
|
||||||
}
|
}
|
||||||
|
@ -78,7 +78,8 @@ function defaultConverseParams (
|
|||||||
'livechatWindowTitlePlugin',
|
'livechatWindowTitlePlugin',
|
||||||
'livechatSpecifics',
|
'livechatSpecifics',
|
||||||
'livechatViewerModePlugin',
|
'livechatViewerModePlugin',
|
||||||
'livechatDisconnectOnUnloadPlugin'
|
'livechatDisconnectOnUnloadPlugin',
|
||||||
|
'converse-slow-mode'
|
||||||
],
|
],
|
||||||
show_retraction_warning: false, // No need to use this warning (except if we open to external clients?)
|
show_retraction_warning: false, // No need to use this warning (except if we open to external clients?)
|
||||||
muc_show_info_messages: mucShowInfoMessages,
|
muc_show_info_messages: mucShowInfoMessages,
|
||||||
|
14
conversejs/lib/slow-mode/plugin.ts
Normal file
14
conversejs/lib/slow-mode/plugin.ts
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
/**
|
||||||
|
* Slow Mode plugin definition.
|
||||||
|
* This code should be published to ConverseJS upstream once the XEP for the slow mode feature is proposed.
|
||||||
|
* Note: part of the code is also in the custom muc-bottom-panel template.
|
||||||
|
*/
|
||||||
|
export const slowModePlugin = {
|
||||||
|
dependencies: ['converse-muc', 'converse-muc-views'],
|
||||||
|
async initialize (this: any) {
|
||||||
|
const _converse = this._converse
|
||||||
|
_converse.api.listen.on('chatRoomInitialized', function (this: any, _model: any): void {
|
||||||
|
// TODO: disable the textarea after each new message, for X seconds.
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
@ -387,3 +387,5 @@ livechat_configuration_channel_banned_jids_label: "Banned users and patterns"
|
|||||||
livechat_configuration_channel_bot_nickname: "Bot nickname"
|
livechat_configuration_channel_bot_nickname: "Bot nickname"
|
||||||
|
|
||||||
invalid_value: "Invalid value."
|
invalid_value: "Invalid value."
|
||||||
|
|
||||||
|
slow_mode_info: "Slow mode is enabled, you have to wait 10 seconds between two messages."
|
||||||
|
Loading…
x
Reference in New Issue
Block a user