2020-12-29 12:23:39 +01:00
|
|
|
import tpl_controlbox_toggle from "./templates/toggle.js";
|
2020-12-08 12:54:14 +01:00
|
|
|
import { ElementView } from '@converse/skeletor/src/element.js';
|
2020-12-04 22:05:43 +01:00
|
|
|
import { _converse, api, converse } from "@converse/headless/core";
|
|
|
|
import { addControlBox } from './utils.js';
|
2020-12-29 12:23:39 +01:00
|
|
|
import { render } from 'lit-html';
|
2020-12-04 22:05:43 +01:00
|
|
|
|
|
|
|
const u = converse.env.utils;
|
|
|
|
|
|
|
|
|
2020-12-08 12:54:14 +01:00
|
|
|
class ControlBoxToggle extends ElementView {
|
|
|
|
events = {
|
2020-12-04 22:05:43 +01:00
|
|
|
'click': 'onClick'
|
2020-12-08 12:54:14 +01:00
|
|
|
}
|
2020-12-04 22:05:43 +01:00
|
|
|
|
2020-12-08 12:54:14 +01:00
|
|
|
async initialize () {
|
|
|
|
await api.waitUntil('initialized');
|
|
|
|
this.render();
|
|
|
|
}
|
2020-12-04 22:05:43 +01:00
|
|
|
|
|
|
|
render () {
|
|
|
|
// We let the render method of ControlBoxView decide whether
|
|
|
|
// the ControlBox or the Toggle must be shown. This prevents
|
|
|
|
// artifacts (i.e. on page load the toggle is shown only to then
|
|
|
|
// seconds later be hidden in favor of the controlbox).
|
2020-12-08 12:54:14 +01:00
|
|
|
render(tpl_controlbox_toggle(), this);
|
2020-12-04 22:05:43 +01:00
|
|
|
return this;
|
2020-12-08 12:54:14 +01:00
|
|
|
}
|
2020-12-04 22:05:43 +01:00
|
|
|
|
|
|
|
hide (callback) {
|
2020-12-08 12:54:14 +01:00
|
|
|
if (u.isVisible(this)) {
|
|
|
|
u.hideElement(this);
|
2020-12-04 22:05:43 +01:00
|
|
|
callback();
|
|
|
|
}
|
2020-12-08 12:54:14 +01:00
|
|
|
}
|
2020-12-04 22:05:43 +01:00
|
|
|
|
|
|
|
show (callback) {
|
2020-12-08 12:54:14 +01:00
|
|
|
if (!u.isVisible(this)) {
|
|
|
|
u.fadeIn(this, callback);
|
2020-12-04 22:05:43 +01:00
|
|
|
}
|
2020-12-08 12:54:14 +01:00
|
|
|
}
|
2020-12-04 22:05:43 +01:00
|
|
|
|
2020-12-08 12:54:14 +01:00
|
|
|
showControlBox () { // eslint-disable-line class-methods-use-this
|
2020-12-04 22:05:43 +01:00
|
|
|
let controlbox = _converse.chatboxes.get('controlbox');
|
|
|
|
if (!controlbox) {
|
|
|
|
controlbox = addControlBox();
|
|
|
|
}
|
|
|
|
if (api.connection.connected()) {
|
|
|
|
controlbox.save({'closed': false});
|
|
|
|
} else {
|
|
|
|
controlbox.trigger('show');
|
|
|
|
}
|
2020-12-08 12:54:14 +01:00
|
|
|
}
|
2020-12-04 22:05:43 +01:00
|
|
|
|
|
|
|
onClick (e) {
|
|
|
|
e.preventDefault();
|
|
|
|
if (u.isVisible(_converse.root.querySelector("#controlbox"))) {
|
|
|
|
const controlbox = _converse.chatboxes.get('controlbox');
|
|
|
|
if (api.connection.connected) {
|
|
|
|
controlbox.save({closed: true});
|
|
|
|
} else {
|
|
|
|
controlbox.trigger('hide');
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
this.showControlBox();
|
|
|
|
}
|
|
|
|
}
|
2020-12-08 12:54:14 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
api.elements.define('converse-controlbox-toggle', ControlBoxToggle);
|
2020-12-04 22:05:43 +01:00
|
|
|
|
|
|
|
export default ControlBoxToggle;
|