xmpp.chapril.org-conversejs/src/plugins/headlines-view/heading.js
JC Brand bbc952b265 Fix MUC and headlines heaidngs, so that they still work
as ElementViews, since I ran out of time converting them to lit
components as well.

This reverts commit 1121a90af0.
2021-06-15 11:09:34 +02:00

65 lines
2.2 KiB
JavaScript

import tpl_chat_head from './templates/chat-head.js';
import { ElementView } from '@converse/skeletor/src/element.js';
import { __ } from 'i18n';
import { _converse, api } from "@converse/headless/core";
import { getHeadingDropdownItem, getHeadingStandaloneButton } from 'plugins/chatview/utils.js';
import { render } from 'lit';
export default class HeadlinesHeading extends ElementView {
async connectedCallback () {
super.connectedCallback();
this.model = _converse.chatboxes.get(this.getAttribute('jid'));
await this.model.initialized;
this.render();
}
async render () {
const tpl = await this.generateHeadingTemplate();
render(tpl, this);
}
async generateHeadingTemplate () {
const heading_btns = await this.getHeadingButtons();
const standalone_btns = heading_btns.filter(b => b.standalone);
const dropdown_btns = heading_btns.filter(b => !b.standalone);
return tpl_chat_head(
Object.assign(this.model.toJSON(), {
'display_name': this.model.getDisplayName(),
'dropdown_btns': dropdown_btns.map(b => getHeadingDropdownItem(b)),
'standalone_btns': standalone_btns.map(b => getHeadingStandaloneButton(b))
})
);
}
/**
* Returns a list of objects which represent buttons for the headlines header.
* @async
* @emits _converse#getHeadingButtons
* @method HeadlinesHeading#getHeadingButtons
*/
getHeadingButtons () {
const buttons = [];
if (!api.settings.get('singleton')) {
buttons.push({
'a_class': 'close-chatbox-button',
'handler': ev => this.close(ev),
'i18n_text': __('Close'),
'i18n_title': __('Close these announcements'),
'icon_class': 'fa-times',
'name': 'close',
'standalone': api.settings.get('view_mode') === 'overlayed'
});
}
return _converse.api.hook('getHeadingButtons', this, buttons);
}
close (ev) {
ev.preventDefault();
this.model.close();
}
}
api.elements.define('converse-headlines-heading', HeadlinesHeading);