123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- import {emojiKeys, emojiHTML, emojiString} from './emoji.js';
- import {htmlEscape} from 'escape-goat';
-
- function makeCollections({mentions, emoji}) {
- const collections = [];
-
- if (emoji) {
- collections.push({
- trigger: ':',
- requireLeadingSpace: true,
- values: (query, cb) => {
- const matches = [];
- for (const name of emojiKeys) {
- if (name.includes(query)) {
- matches.push(name);
- if (matches.length > 5) break;
- }
- }
- cb(matches);
- },
- lookup: (item) => item,
- selectTemplate: (item) => {
- if (item === undefined) return null;
- return emojiString(item.original);
- },
- menuItemTemplate: (item) => {
- return `<div class="tribute-item">${emojiHTML(item.original)}<span>${htmlEscape(item.original)}</span></div>`;
- },
- });
- }
-
- if (mentions) {
- collections.push({
- values: window.config.mentionValues ?? [],
- requireLeadingSpace: true,
- menuItemTemplate: (item) => {
- return `
- <div class="tribute-item">
- <img src="${htmlEscape(item.original.avatar)}" class="gt-mr-3"/>
- <span class="name">${htmlEscape(item.original.name)}</span>
- ${item.original.fullname && item.original.fullname !== '' ? `<span class="fullname">${htmlEscape(item.original.fullname)}</span>` : ''}
- </div>
- `;
- },
- });
- }
-
- return collections;
- }
-
- export async function attachTribute(element, {mentions, emoji} = {}) {
- const {default: Tribute} = await import(/* webpackChunkName: "tribute" */'tributejs');
- const collections = makeCollections({mentions, emoji});
- const tribute = new Tribute({collection: collections, noMatchTemplate: ''});
- tribute.attach(element);
- return tribute;
- }
|