xmpp.chapril.org-conversejs/src/plugins/chatview/utils.js

66 lines
2.2 KiB
JavaScript

import { __ } from 'i18n';
import { _converse, api } from '@converse/headless/core';
export function clearHistory (jid) {
if (_converse.router.history.getFragment() === `converse/chat?jid=${jid}`) {
_converse.router.navigate('');
}
}
export async function clearMessages (chat) {
const result = await api.confirm(__('Are you sure you want to clear the messages from this conversation?'));
if (result) {
await chat.clearMessages();
}
}
export async function parseMessageForCommands (chat, text) {
const match = text.replace(/^\s*/, '').match(/^\/(.*)\s*$/);
if (match) {
let handled = false;
/**
* *Hook* which allows plugins to add more commands to a chat's textbox.
* Data provided is the chatbox model and the text typed - {model, text}.
* Check `handled` to see if the hook was already handled.
* @event _converse#parseMessageForCommands
* @example
* api.listen.on('parseMessageForCommands', (data, handled) {
* if (!handled) {
* const command = (data.text.match(/^\/([a-zA-Z]*) ?/) || ['']).pop().toLowerCase();
* // custom code comes here
* }
* return handled;
* }
*/
handled = await api.hook('parseMessageForCommands', { model: chat, text }, handled);
if (handled) {
return true;
}
if (match[1] === 'clear') {
clearMessages(chat);
return true;
} else if (match[1] === 'close') {
_converse.chatboxviews.get(chat.get('jid'))?.close();
return true;
} else if (match[1] === 'help') {
chat.set({ 'show_help_messages': false }, { 'silent': true });
chat.set({ 'show_help_messages': true });
return true;
}
}
return false;
}
export function resetElementHeight (ev) {
if (ev.target.value) {
const height = ev.target.scrollHeight + 'px';
if (ev.target.style.height != height) {
ev.target.style.height = 'auto';
ev.target.style.height = height;
}
} else {
ev.target.style = '';
}
}