110 lines
4 KiB
JavaScript
110 lines
4 KiB
JavaScript
#include users.js
|
|
#include utility.js
|
|
#include ui/messages.jsx
|
|
#include ui/view.js
|
|
|
|
Umi.UI.Hooks = (function() {
|
|
let sendMessage;
|
|
|
|
return {
|
|
SetCallbacks: (sendMessageFunc) => {
|
|
sendMessage = sendMessageFunc;
|
|
},
|
|
AddHooks: function() {
|
|
const msgForm = $i('umi-msg-form');
|
|
const msgText = $i('umi-msg-text');
|
|
|
|
window.addEventListener('keydown', function(ev) {
|
|
if((ev.ctrlKey && ev.key !== 'v') || ev.altKey)
|
|
return;
|
|
|
|
if(!ev.target.matches('input, textarea, select, button'))
|
|
msgText.focus();
|
|
});
|
|
|
|
msgForm.addEventListener('submit', ev => {
|
|
ev.preventDefault();
|
|
|
|
if(typeof sendMessage !== 'function')
|
|
return;
|
|
|
|
const textField = ev.target.elements.namedItem('text');
|
|
if(textField instanceof HTMLTextAreaElement) {
|
|
let text = textField.value;
|
|
textField.value = '';
|
|
|
|
text = text.replace(/\t/g, ' ');
|
|
if(text.length > 0)
|
|
sendMessage(text);
|
|
}
|
|
});
|
|
|
|
msgText.addEventListener('keyup', function(ev) {
|
|
const isScrolledToBottom = Umi.UI.Messages.IsScrolledToBottom();
|
|
|
|
const elemParent = msgText.parentNode;
|
|
let height = 40;
|
|
|
|
if(mami.settings.get('expandTextBox') && msgText.scrollHeight > msgText.clientHeight)
|
|
height = msgText.scrollHeight;
|
|
|
|
if(height > 40)
|
|
elemParent.style.height = height.toString() + 'px';
|
|
else
|
|
elemParent.style.height = null;
|
|
|
|
if(isScrolledToBottom)
|
|
Umi.UI.Messages.ScrollIfNeeded();
|
|
});
|
|
|
|
msgText.addEventListener('keydown', function(ev) {
|
|
if(ev.key === 'Tab' && (!ev.shiftKey || !ev.ctrlKey)) {
|
|
ev.preventDefault();
|
|
|
|
const text = Umi.UI.View.GetText();
|
|
if(text.length < 1)
|
|
return;
|
|
|
|
const start = Umi.UI.View.GetPosition();
|
|
let position = start,
|
|
snippet = '';
|
|
while(position >= 0 && text.charAt(position - 1) !== ' ' && text.charAt(position - 1) !== "\n") {
|
|
--position;
|
|
snippet = text.charAt(position) + snippet;
|
|
}
|
|
|
|
let insertText = undefined;
|
|
|
|
if(snippet.indexOf(':') === 0) {
|
|
let emoteRank = 0;
|
|
if(Umi.User.hasCurrentUser())
|
|
emoteRank = Umi.User.getCurrentUser().perms.rank;
|
|
const emotes = MamiEmotes.findByName(emoteRank, snippet.substring(1), true);
|
|
if(emotes.length > 0)
|
|
insertText = ':' + emotes[0] + ':';
|
|
} else {
|
|
const users = Umi.Users.Find(snippet);
|
|
if(users.length === 1)
|
|
insertText = users[0].name;
|
|
}
|
|
|
|
if(insertText !== undefined) {
|
|
Umi.UI.View.SetText(text.slice(0, start - snippet.length) + text.slice(start));
|
|
Umi.UI.View.SetPosition(start - snippet.length);
|
|
Umi.UI.View.EnterAtCursor(insertText);
|
|
Umi.UI.View.SetPosition(Umi.UI.View.GetPosition() + insertText.length);
|
|
Umi.UI.View.SetPosition(Umi.UI.View.GetPosition(), true);
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
if((ev.key === 'Enter' || ev.key === 'NumpadEnter') && ev.shiftKey === mami.settings.get('newLineOnEnter')) {
|
|
ev.preventDefault();
|
|
msgForm.requestSubmit();
|
|
return;
|
|
}
|
|
});
|
|
},
|
|
};
|
|
})();
|