aboutsummaryrefslogtreecommitdiffstats
path: root/web_src/js/features/tribute.js
blob: 30afb2b184319bcedfbd756eb660ded884fb33c6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import {emojiKeys, emojiHTML, emojiString} from './emoji.js';

export const issuesTribute = window.config.Tribute ? new Tribute({
  values: window.config.tributeValues,
  noMatchTemplate() { return null },
  menuItemTemplate(item) {
    const div = $('<div/>');
    div.append($('<img/>', {src: item.original.avatar}));
    div.append($('<span/>', {class: 'name'}).text(item.original.name));
    if (item.original.fullname && item.original.fullname !== '') {
      div.append($('<span/>', {class: 'fullname'}).text(item.original.fullname));
    }
    return div.html();
  }
}) : null;

export const emojiTribute = window.config.Tribute ? new Tribute({
  collection: [{
    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) {
      return item;
    },
    selectTemplate(item) {
      if (typeof item === 'undefined') return null;
      return emojiString(item.original);
    },
    menuItemTemplate(item) {
      return `<div class="tribute-item">${emojiHTML(item.original)}<span>${item.original}</span></div>`;
    }
  }]
}) : null;

export function initTribute() {
  if (!window.config.Tribute) return;

  let content = document.getElementById('content');
  if (content !== null) {
    issuesTribute.attach(content);
  }

  const emojiInputs = document.querySelectorAll('.emoji-input');
  if (emojiInputs.length > 0) {
    emojiTribute.attach(emojiInputs);
  }

  content = document.getElementById('content');
  if (content !== null) {
    emojiTribute.attach(document.getElementById('content'));
  }
}