|
@@ -1,9 +1,11 @@
|
|
/**
|
|
/**
|
|
* @typedef {import('@converse/headless').MUCOccupant} MUCOccupant
|
|
* @typedef {import('@converse/headless').MUCOccupant} MUCOccupant
|
|
*/
|
|
*/
|
|
|
|
+import { api } from '@converse/headless';
|
|
import { PRETTY_CHAT_STATUS } from '../constants.js';
|
|
import { PRETTY_CHAT_STATUS } from '../constants.js';
|
|
import { __ } from 'i18n';
|
|
import { __ } from 'i18n';
|
|
import { html } from "lit";
|
|
import { html } from "lit";
|
|
|
|
+import { until } from 'lit/directives/until.js';
|
|
import { showOccupantModal } from '../utils.js';
|
|
import { showOccupantModal } from '../utils.js';
|
|
import { getAuthorStyle } from 'utils/color.js';
|
|
import { getAuthorStyle } from 'utils/color.js';
|
|
|
|
|
|
@@ -29,6 +31,45 @@ const occupant_title = /** @param {MUCOccupant} o */(o) => {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/**
|
|
|
|
+ * @param {MUCOccupant} o
|
|
|
|
+ */
|
|
|
|
+async function tplActionButtons (o) {
|
|
|
|
+ /**
|
|
|
|
+ * *Hook* which allows plugins to add action buttons on occupants
|
|
|
|
+ * @event _converse#getOccupantActionButtons
|
|
|
|
+ * @example
|
|
|
|
+ * api.listen.on('getOccupantActionButtons', (el, buttons) => {
|
|
|
|
+ * buttons.push({
|
|
|
|
+ * 'i18n_text': 'Foo',
|
|
|
|
+ * 'handler': ev => alert('Foo!'),
|
|
|
|
+ * 'button_class': 'chat-occupant__action-foo',
|
|
|
|
+ * 'icon_class': 'fa fa-check',
|
|
|
|
+ * 'name': 'foo'
|
|
|
|
+ * });
|
|
|
|
+ * return buttons;
|
|
|
|
+ * });
|
|
|
|
+ */
|
|
|
|
+ const buttons = await api.hook('getOccupantActionButtons', o, []);
|
|
|
|
+ if (!buttons?.length) { return '' }
|
|
|
|
+
|
|
|
|
+ const items = buttons.map(b => {
|
|
|
|
+ return html`
|
|
|
|
+ <button class="dropdown-item ${b.button_class}" @click=${b.handler} type="button">
|
|
|
|
+ <converse-icon
|
|
|
|
+ class="${b.icon_class}"
|
|
|
|
+ color="var(--inverse-link-color)"
|
|
|
|
+ size="1em"
|
|
|
|
+ aria-hidden="true"
|
|
|
|
+ ></converse-icon> ${b.i18n_text}
|
|
|
|
+ </button>`
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ return html`<converse-dropdown
|
|
|
|
+ class="occupant-actions chatbox-btn"
|
|
|
|
+ .items=${items}
|
|
|
|
+ ></converse-dropdown>`;
|
|
|
|
+}
|
|
|
|
|
|
/**
|
|
/**
|
|
* @param {MUCOccupant} o
|
|
* @param {MUCOccupant} o
|
|
@@ -87,6 +128,9 @@ export default (o, chat) => {
|
|
${ (role === "moderator") ? html`<span class="badge badge-info">${i18n_moderator}</span>` : '' }
|
|
${ (role === "moderator") ? html`<span class="badge badge-info">${i18n_moderator}</span>` : '' }
|
|
${ (role === "visitor") ? html`<span class="badge badge-secondary">${i18n_visitor}</span>` : '' }
|
|
${ (role === "visitor") ? html`<span class="badge badge-secondary">${i18n_visitor}</span>` : '' }
|
|
</span>
|
|
</span>
|
|
|
|
+ ${
|
|
|
|
+ until(tplActionButtons(o))
|
|
|
|
+ }
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</li>
|
|
</li>
|