function colorize(str) { const s = "" + (str.replace(/\^([0-9])/g, (str, color) => ``)) + ""; return s.replace(/]*><\/span[^>]*>/g, ''); } $(function() { var chatHideTimeout; var inputShown = false; function startHideChat() { if (chatHideTimeout) { clearTimeout(chatHideTimeout); } if (inputShown) { return; } chatHideTimeout = setTimeout(function() { if (inputShown) { return; } $('#chat').animate({ opacity: 0 }, 300); }, 7000); } handleResult = function(elem, wasEnter) { inputShown = false; $('#chatInputHas').hide(); startHideChat(); var obj = {}; if (wasEnter) { obj = { message: $(elem).val() }; } $(elem).val(''); $.post('http://chat/chatResult', JSON.stringify(obj), function(data) { console.log(data); }); }; $('#chatInput').fakeTextbox(); // // $('#chatInput')[0].onPress(function(e) { if (e.which == 13) { handleResult(this, true); } }); $(document).keyup(function(e) { if (e.keyCode == 27) { handleResult($('#chatInput')[0].getTextBox(), false); } }); $(document).keydown(function(e) { if (e.keyCode == 9) { e.preventDefault(); return false; } else if (e.keyCode == 33) { let buf = $('#chatBuffer'); buf.scrollTop(buf.scrollTop() - 50); } else if (e.keyCode == 34) { let buf = $('#chatBuffer'); buf.scrollTop(buf.scrollTop() + 50); } }); window.addEventListener('message', function(event) { var item = event.data; if (item.meta && item.meta == 'openChatBox') { inputShown = true; $('#chat').stop().css('opacity', '1'); $('#chatInputHas').show(); $('#chatInput')[0].doFocus(); return; } // TODO: use some templating stuff for this var colorR = parseInt(item.color[0]); var colorG = parseInt(item.color[1]); var colorB = parseInt(item.color[2]); var name = item.name.replace('<', '<'); var message = item.message.replace('<', '<'); name = colorize(name); message = colorize(message); var buf = $('#chatBuffer'); var nameStr = ''; if (name != '') { nameStr = '' + name + ': '; } buf.find('ul').append('
  • ' + nameStr + message + '
  • '); buf.scrollTop(buf[0].scrollHeight - buf.height()); $('#chat').stop().css('opacity', '1'); startHideChat(); }, false); });