diff --git a/src/js/chat.js b/src/js/chat.js index 8f57887..335d53d 100644 --- a/src/js/chat.js +++ b/src/js/chat.js @@ -20,6 +20,11 @@ export default class Chat { this.bindEvents(); } + clear() { + let chatArea = $('.messages'); + return chatArea.fadeOut(200, () => { chatArea.empty().show(); }); + } + // Log a message log(message, options) { let html = options && options.html === true || false; @@ -238,6 +243,15 @@ export default class Chat { console.log(err); }); } + }, { + command: 'clear', + description: 'Clears the chat screen', + paramaters: [], + multiple: true, + usage: '/clear', + action: () => { + this.clear(); + } }]; const color = () => { diff --git a/src/js/main.js b/src/js/main.js index fbc3954..dcef7a3 100644 --- a/src/js/main.js +++ b/src/js/main.js @@ -13,7 +13,6 @@ $(function() { const darkwire = new Darkwire(); const cryptoUtil = new CryptoUtil(); - let $window = $(window); let $participants = $('#participants'); let roomId = window.location.pathname.length ? window.location.pathname : null; @@ -67,19 +66,6 @@ $(function() { return sanitized; } - // Keyboard events - - $window.keydown(function(event) { - // When the client hits ENTER on their keyboard and chat message input is focused - if (event.which === 13 && !event.shiftKey && $('.inputMessage').is(':focus')) { - handleMessageSending(); - socket.emit('stop typing'); - chat.typing = false; - event.preventDefault(); - } - - }); - // Select message input when closing modal $('.modal').on('hidden.bs.modal', function(e) { chat.inputMessage.focus(); @@ -198,7 +184,7 @@ $(function() { darkwire.audio.soundEnabled = state; }); - function handleMessageSending() { + window.handleMessageSending = function() { let message = chat.inputMessage; let cleanedMessage = cleanInput(message.val()); let slashCommand = chat.parseCommand(cleanedMessage); @@ -220,7 +206,7 @@ $(function() { }).catch((err) => { console.log(err); }); - } + }; window.triggerFileTransfer = function(context) { const fileId = context.getAttribute('data-file'); diff --git a/src/js/window.js b/src/js/window.js index 02c0854..99992d6 100644 --- a/src/js/window.js +++ b/src/js/window.js @@ -4,6 +4,9 @@ export default class WindowHandler { constructor(darkwire, socket, chat) { this._isActive = false; this.fileHandler = new FileHandler(darkwire, socket, chat); + this.socket = socket; + this.chat = chat; + this.keyMapping = []; this.newMessages = 0; this.favicon = new Favico({ @@ -52,6 +55,32 @@ export default class WindowHandler { this._isActive = false; }; + // Keyboard events + window.onkeydown = (event) => { + // When the client hits ENTER on their keyboard and chat message input is focused + if (event.which === 13 && !event.shiftKey && $('.inputMessage').is(':focus')) { + handleMessageSending(); + this.socket.emit('stop typing'); + this.chat.typing = false; + event.preventDefault(); + } else { + this.keyMapping[event.keyCode] = event.type === 'keydown'; + } + }; + + window.onkeyup = (event) => { + /** + * 17: CTRL + * 91: Left CMD + * 93: Right CMD + * 75: K + */ + if ((this.keyMapping[17] || this.keyMapping[91] || this.keyMapping[93]) && this.keyMapping[75]) { + this.chat.clear(); + } + this.keyMapping = []; + }; + } }