diff --git a/extensions/emoji/js/src/forum/addComposerAutocomplete.js b/extensions/emoji/js/src/forum/addComposerAutocomplete.js
index 4aa886fcf..95c874187 100644
--- a/extensions/emoji/js/src/forum/addComposerAutocomplete.js
+++ b/extensions/emoji/js/src/forum/addComposerAutocomplete.js
@@ -7,8 +7,6 @@ import getEmojiIconCode from './helpers/getEmojiIconCode';
import cdn from './cdn';
export default function addComposerAutocomplete() {
- const $container = $('
');
- const dropdown = new AutocompleteDropdown();
let emojiMap = null;
extend('flarum/common/components/TextEditor', 'oninit', function () {
@@ -16,18 +14,19 @@ export default function addComposerAutocomplete() {
});
extend('flarum/common/components/TextEditor', 'onbuild', function () {
+ this.emojiDropdown = new AutocompleteDropdown();
const $editor = this.$('.TextEditor-editor').wrap('');
this.navigator = new KeyboardNavigatable();
this.navigator
- .when(() => dropdown.active)
- .onUp(() => dropdown.navigate(-1))
- .onDown(() => dropdown.navigate(1))
- .onSelect(dropdown.complete.bind(dropdown))
- .onCancel(dropdown.hide.bind(dropdown))
+ .when(() => this.emojiDropdown.active)
+ .onUp(() => this.emojiDropdown.navigate(-1))
+ .onDown(() => this.emojiDropdown.navigate(1))
+ .onSelect(this.emojiDropdown.complete.bind(this.emojiDropdown))
+ .onCancel(this.emojiDropdown.hide.bind(this.emojiDropdown))
.bindTo($editor);
- $editor.after($container);
+ $editor.after($(''));
});
extend('flarum/common/components/TextEditor', 'buildEditorParams', function (params) {
@@ -40,7 +39,7 @@ export default function addComposerAutocomplete() {
const applySuggestion = (replacement) => {
this.attrs.composer.editor.replaceBeforeCursor(absEmojiStart - 1, replacement + ' ');
- dropdown.hide();
+ this.emojiDropdown.hide();
};
params.inputListeners.push(() => {
@@ -68,8 +67,8 @@ export default function addComposerAutocomplete() {
}
}
- dropdown.hide();
- dropdown.active = false;
+ this.emojiDropdown.hide();
+ this.emojiDropdown.active = false;
if (absEmojiStart) {
typed = lastChunk.substring(relEmojiStart).toLowerCase();
@@ -80,7 +79,7 @@ export default function addComposerAutocomplete() {
key={emoji}
onclick={() => applySuggestion(emoji)}
onmouseenter={function () {
- dropdown.setIndex($(this).parent().index() - 1);
+ this.emojiDropdown.setIndex($(this).parent().index() - 1);
}}
>
@@ -133,14 +132,14 @@ export default function addComposerAutocomplete() {
.map(makeSuggestion);
if (suggestions.length) {
- dropdown.items = suggestions;
- m.render($container[0], dropdown.render());
+ this.emojiDropdown.items = suggestions;
+ m.render(this.$('.ComposerBody-emojiDropdownContainer')[0], this.emojiDropdown.render());
- dropdown.show();
+ this.emojiDropdown.show();
const coordinates = this.attrs.composer.editor.getCaretCoordinates(absEmojiStart);
- const width = dropdown.$().outerWidth();
- const height = dropdown.$().outerHeight();
- const parent = dropdown.$().offsetParent();
+ const width = this.emojiDropdown.$().outerWidth();
+ const height = this.emojiDropdown.$().outerHeight();
+ const parent = this.emojiDropdown.$().offsetParent();
let left = coordinates.left;
let top = coordinates.top + 15;
@@ -156,15 +155,15 @@ export default function addComposerAutocomplete() {
top = Math.max(-(parent.offset().top - $(document).scrollTop()), top);
left = Math.max(-parent.offset().left, left);
- dropdown.show(left, top);
+ this.emojiDropdown.show(left, top);
}
};
buildSuggestions();
- dropdown.setIndex(0);
- dropdown.$().scrollTop(0);
- dropdown.active = true;
+ this.emojiDropdown.setIndex(0);
+ this.emojiDropdown.$().scrollTop(0);
+ this.emojiDropdown.active = true;
}
});
});
diff --git a/extensions/mentions/js/src/forum/addComposerAutocomplete.js b/extensions/mentions/js/src/forum/addComposerAutocomplete.js
index 5212dd5fc..b7344c1f4 100644
--- a/extensions/mentions/js/src/forum/addComposerAutocomplete.js
+++ b/extensions/mentions/js/src/forum/addComposerAutocomplete.js
@@ -7,22 +7,20 @@ import AutocompleteDropdown from './fragments/AutocompleteDropdown';
import MentionableModels from './mentionables/MentionableModels';
export default function addComposerAutocomplete() {
- const $container = $('');
- const dropdown = new AutocompleteDropdown();
-
extend('flarum/common/components/TextEditor', 'onbuild', function () {
+ this.mentionsDropdown = new AutocompleteDropdown();
const $editor = this.$('.TextEditor-editor').wrap('');
this.navigator = new KeyboardNavigatable();
this.navigator
- .when(() => dropdown.active)
- .onUp(() => dropdown.navigate(-1))
- .onDown(() => dropdown.navigate(1))
- .onSelect(dropdown.complete.bind(dropdown))
- .onCancel(dropdown.hide.bind(dropdown))
+ .when(() => this.mentionsDropdown.active)
+ .onUp(() => this.mentionsDropdown.navigate(-1))
+ .onDown(() => this.mentionsDropdown.navigate(1))
+ .onSelect(this.mentionsDropdown.complete.bind(this.mentionsDropdown))
+ .onCancel(this.mentionsDropdown.hide.bind(this.mentionsDropdown))
.bindTo($editor);
- $editor.after($container);
+ $editor.after($(''));
});
extend('flarum/common/components/TextEditor', 'buildEditorParams', function (params) {
@@ -32,12 +30,12 @@ export default function addComposerAutocomplete() {
let mentionables = new MentionableModels({
onmouseenter: function () {
- dropdown.setIndex($(this).parent().index());
+ this.mentionsDropdown.setIndex($(this).parent().index());
},
onclick: (replacement) => {
this.attrs.composer.editor.replaceBeforeCursor(absMentionStart - 1, replacement + ' ');
- dropdown.hide();
+ this.mentionsDropdown.hide();
},
});
@@ -66,8 +64,8 @@ export default function addComposerAutocomplete() {
}
}
- dropdown.hide();
- dropdown.active = false;
+ this.mentionsDropdown.hide();
+ this.mentionsDropdown.active = false;
if (absMentionStart) {
const typed = lastChunk.substring(relMentionStart).toLowerCase();
@@ -83,14 +81,14 @@ export default function addComposerAutocomplete() {
const suggestions = mentionables.buildSuggestions();
if (suggestions.length) {
- dropdown.items = suggestions;
- m.render($container[0], dropdown.render());
+ this.mentionsDropdown.items = suggestions;
+ m.render(this.$('.ComposerBody-mentionsDropdownContainer')[0], this.mentionsDropdown.render());
- dropdown.show();
+ this.mentionsDropdown.show();
const coordinates = this.attrs.composer.editor.getCaretCoordinates(absMentionStart);
- const width = dropdown.$().outerWidth();
- const height = dropdown.$().outerHeight();
- const parent = dropdown.$().offsetParent();
+ const width = this.mentionsDropdown.$().outerWidth();
+ const height = this.mentionsDropdown.$().outerHeight();
+ const parent = this.mentionsDropdown.$().offsetParent();
let left = coordinates.left;
let top = coordinates.top + 15;
@@ -106,19 +104,19 @@ export default function addComposerAutocomplete() {
top = Math.max(-(parent.offset().top - $(document).scrollTop()), top);
left = Math.max(-parent.offset().left, left);
- dropdown.show(left, top);
+ this.mentionsDropdown.show(left, top);
} else {
- dropdown.active = false;
- dropdown.hide();
+ this.mentionsDropdown.active = false;
+ this.mentionsDropdown.hide();
}
};
- dropdown.active = true;
+ this.mentionsDropdown.active = true;
buildSuggestions();
- dropdown.setIndex(0);
- dropdown.$().scrollTop(0);
+ this.mentionsDropdown.setIndex(0);
+ this.mentionsDropdown.$().scrollTop(0);
mentionables.search()?.then(buildSuggestions);
}