xmpp.chapril.org-conversejs/src/plugins/muc-views/modals/add-muc.js
JC Brand 15c10376b0 Rename all templates to camelCase
To conform with naming conventions regarding functions, which the
templates are.
2023-02-15 14:29:07 +01:00

93 lines
3.1 KiB
JavaScript

import tplAddMuc from "./templates/add-muc.js";
import BaseModal from "plugins/modal/modal.js";
import { __ } from 'i18n';
import { _converse, api, converse } from "@converse/headless/core";
import '../styles/add-muc-modal.scss';
const u = converse.env.utils;
const { Strophe } = converse.env;
export default class AddMUCModal extends BaseModal {
initialize () {
super.initialize();
this.listenTo(this.model, 'change:muc_domain', () => this.render());
this.muc_roomid_policy_error_msg = null;
this.render();
this.addEventListener('shown.bs.modal', () => {
this.querySelector('input[name="chatroom"]').focus();
}, false);
}
renderModal () {
return tplAddMuc(this);
}
getModalTitle () { // eslint-disable-line class-methods-use-this
return __('Enter a new Groupchat');
}
parseRoomDataFromEvent (form) { // eslint-disable-line class-methods-use-this
const data = new FormData(form);
const jid = data.get('chatroom')?.trim();
let nick;
if (api.settings.get('locked_muc_nickname')) {
nick = _converse.getDefaultMUCNickname();
if (!nick) {
throw new Error("Using locked_muc_nickname but no nickname found!");
}
} else {
nick = data.get('nickname').trim();
}
return {
'jid': jid,
'nick': nick
}
}
openChatRoom (ev) {
ev.preventDefault();
if (this.checkRoomidPolicy()) return;
const data = this.parseRoomDataFromEvent(ev.target);
if (data.nick === "") {
// Make sure defaults apply if no nick is provided.
data.nick = undefined;
}
let jid;
if (api.settings.get('locked_muc_domain') || (api.settings.get('muc_domain') && !u.isValidJID(data.jid))) {
jid = `${Strophe.escapeNode(data.jid)}@${api.settings.get('muc_domain')}`;
} else {
jid = data.jid
this.model.setDomain(jid);
}
api.rooms.open(jid, Object.assign(data, {jid}), true);
ev.target.reset();
this.modal.hide();
}
checkRoomidPolicy () {
if (api.settings.get('muc_roomid_policy') && api.settings.get('muc_domain')) {
let jid = this.querySelector('converse-autocomplete input').value;
if (api.settings.get('locked_muc_domain') || !u.isValidJID(jid)) {
jid = `${Strophe.escapeNode(jid)}@${api.settings.get('muc_domain')}`;
}
const roomid = Strophe.getNodeFromJid(jid);
const roomdomain = Strophe.getDomainFromJid(jid);
if (api.settings.get('muc_domain') !== roomdomain ||
api.settings.get('muc_roomid_policy').test(roomid)) {
this.muc_roomid_policy_error_msg = null;
} else {
this.muc_roomid_policy_error_msg = __('Groupchat id is invalid.');
return true;
}
this.render();
}
}
}
api.elements.define('converse-add-muc-modal', AddMUCModal);