From 7f869ea72dcb5902cc99967635c01befb90d7e8e Mon Sep 17 00:00:00 2001 From: JC Brand Date: Wed, 6 Jan 2021 17:09:47 +0100 Subject: [PATCH] Make the headlines panel an ElementView Don't manually insert HeadlinesBoxView we'll have to convert it to an ElementView --- src/plugins/headlines-view/index.js | 29 ++---------------- src/plugins/headlines-view/panel.js | 30 ++----------------- src/plugins/headlines-view/templates/panel.js | 6 ++-- 3 files changed, 9 insertions(+), 56 deletions(-) diff --git a/src/plugins/headlines-view/index.js b/src/plugins/headlines-view/index.js index c7222aa7b..630c9e3c7 100644 --- a/src/plugins/headlines-view/index.js +++ b/src/plugins/headlines-view/index.js @@ -4,18 +4,10 @@ * @license Mozilla Public License (MPLv2) */ import '../chatview/index.js'; -import HeadlinesBoxViewMixin from './view.js'; -import { HeadlinesPanelMixin, HeadlinesPanel} from './panel.js'; -import { _converse, api, converse } from '@converse/headless/core'; +import './view.js'; +import { HeadlinesPanelMixin, HeadlinesPanel } from './panel.js'; +import { _converse, converse } from '@converse/headless/core'; -function onChatBoxViewsInitialized () { - const views = _converse.chatboxviews; - _converse.chatboxes.on('add', item => { - if (!views.get(item.get('id')) && item.get('type') === _converse.HEADLINES_TYPE) { - views.add(item.get('id'), new _converse.HeadlinesBoxView({ model: item })); - } - }); -} converse.plugins.add('converse-headlines-view', { /* Plugin dependencies are other plugins which might be @@ -30,23 +22,8 @@ converse.plugins.add('converse-headlines-view', { */ dependencies: ['converse-headlines', 'converse-chatview'], - overrides: { - ControlBoxView: { - renderControlBoxPane () { - this.__super__.renderControlBoxPane.apply(this, arguments); - this.renderHeadlinesPanel(); - } - } - }, - initialize () { - /* The initialize function gets called as soon as the plugin is - * loaded by converse.js's plugin machinery. - */ _converse.ControlBoxView && Object.assign(_converse.ControlBoxView.prototype, HeadlinesPanelMixin); - _converse.HeadlinesBoxView = _converse.ChatBoxView.extend(HeadlinesBoxViewMixin); _converse.HeadlinesPanel = HeadlinesPanel; - - api.listen.on('chatBoxViewsInitialized', onChatBoxViewsInitialized); } }); diff --git a/src/plugins/headlines-view/panel.js b/src/plugins/headlines-view/panel.js index c0dc7ba58..aca4dced9 100644 --- a/src/plugins/headlines-view/panel.js +++ b/src/plugins/headlines-view/panel.js @@ -1,9 +1,7 @@ import tpl_headline_panel from './templates/panel.js'; import { ElementView } from '@converse/skeletor/src/element.js'; import { __ } from 'i18n'; -import { _converse, api, converse } from '@converse/headless/core'; - -const u = converse.env.utils; +import { _converse, api } from '@converse/headless/core'; /** * View which renders headlines section of the control box. @@ -12,14 +10,12 @@ const u = converse.env.utils; * @memberOf _converse */ export class HeadlinesPanel extends ElementView { - tagName = 'div' - className = 'controlbox-section' - id = 'headline' events = { 'click .open-headline': 'openHeadline' } initialize () { + this.model = _converse.chatboxes; this.listenTo(this.model, 'add', this.renderIfHeadline); this.listenTo(this.model, 'remove', this.renderIfHeadline); this.listenTo(this.model, 'destroy', this.renderIfHeadline); @@ -47,25 +43,3 @@ export class HeadlinesPanel extends ElementView { } api.elements.define('converse-headlines-panel', HeadlinesPanel); - -/** - * Mixin for the {@link _converse.ControlBoxView } which add support for - * rendering a list of headline chats. - * @mixin - */ -export const HeadlinesPanelMixin = { - renderHeadlinesPanel () { - if (this.headlinepanel && u.isInDOM(this.headlinepanel.el)) { - return this.headlinepanel; - } - this.headlinepanel = new _converse.HeadlinesPanel({ 'model': _converse.chatboxes }); - /** - * Triggered once the section of the { @link _converse.ControlBoxView } - * which shows announcements has been rendered. - * @event _converse#headlinesPanelRendered - * @example _converse.api.listen.on('headlinesPanelRendered', () => { ... }); - */ - api.trigger('headlinesPanelRendered'); - return this.headlinepanel; - } -}; diff --git a/src/plugins/headlines-view/templates/panel.js b/src/plugins/headlines-view/templates/panel.js index 78a92bc7a..c788945d7 100644 --- a/src/plugins/headlines-view/templates/panel.js +++ b/src/plugins/headlines-view/templates/panel.js @@ -3,8 +3,10 @@ import tpl_headline_list from "templates/headline_list.js"; export default (o) => html` -
- ${o.heading_headline} +
+
+ ${o.heading_headline} +
${ tpl_headline_list(o) } `;