summaryrefslogtreecommitdiffstats
path: root/web_src/js/features/tribute.js
diff options
context:
space:
mode:
Diffstat (limited to 'web_src/js/features/tribute.js')
-rw-r--r--web_src/js/features/tribute.js61
1 files changed, 61 insertions, 0 deletions
diff --git a/web_src/js/features/tribute.js b/web_src/js/features/tribute.js
new file mode 100644
index 0000000000..30afb2b184
--- /dev/null
+++ b/web_src/js/features/tribute.js
@@ -0,0 +1,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'));
+ }
+}