$(document).ready(() => { $(".siimple-tabs-item").click(function() { var t = $(this); var tab = $(t.parents('tabs').first()); tab.find('form').each((i,elm) => { var elm = $(elm); if(elm.attr('name') == t.attr('for')) elm.removeClass('hidden'); else elm.addClass('hidden'); }); t.parent().find('.siimple-tabs-item').each((i, elm) => { var elm = $(elm); if(elm.attr('for') === t.attr('for')) elm.addClass('siimple-tabs-tab--selected'); else elm.removeClass('siimple-tabs-tab--selected'); }); }); $('.message-me, .message-other').click(function() { activateMessage(this); }); $('#selected_clip > .siimple-close').click(function() { deactivateMessages(); }); $('#send_box').keypress(function(e) { if(e.originalEvent.charCode == 13 && !e.shiftKey) { send(); e.preventDefault(); } }); $('#send_box').bind('input propertychange keyup', function() { var height = ($(window).height()*0.0165).toFixed(0)*20; var sheight = this.scrollHeight; if(sheight < height) { $(this).height(0); height = this.scrollHeight; $(this).height(height - 20); $('#reply_clip').css('bottom', (this.scrollHeight + 10) + 'px'); $('#selected_clip').css('bottom', (this.scrollHeight + 10) + 'px'); } }); }); function calcHeight(value) { let numberOfLineBreaks = (value.match(/\n/g) || []).length; // min-height + lines x line-height + padding + border let newHeight = 20 + numberOfLineBreaks * 20 + 12 + 2; return newHeight; } // Create WebSocket connection. const socket = new WebSocket('ws://'+window.location.host+'/ws/'); var callbacks = []; var myinfo = { kunjika: "", name: "" }; var users = {}; // Connection opened socket.addEventListener('open', function (event) { $('#progressbar').toggleClass('hidden'); }); // Listen for messages socket.addEventListener('message', function (event) { var j = JSON.parse(event.data); console.log(j); switch(j.cmd) { case 'resp': if(j.result == 'Err') { if($('#chat_panel').hasClass('hidden')) { $('[name="error_msg"]').text(j.message); $('[name="error_msg"]').removeClass('hidden'); callbacks = []; } else { pushStatus(j.message); } } else if(j.result == 'Ok'){ if(callbacks.length > 0) { callbacks[0](); callbacks.shift(); } } break; case 'text': pushMessage(j.kunjika, j.text, j.reply); break; case 'connected': users[j.kunjika] = j.name; pushStatus('Vyakti '+j.name+' connected as '+j.kunjika); break; case 'disconnected': delete users[j.kunjika]; pushStatus('Vyakti '+j.name+' disconnected as '+j.kunjika); break; } }); function connect(frm) { var frm = $(frm); $('#progressbar').addClass('hidden'); var data = {}; frm.serializeArray().forEach(el => { data[el.name] = el.value; }); if(data['length'] !== undefined) { data['length'] = parseInt(data['length']); } callbacks.push(() => { socket.send(JSON.stringify(Object.assign({cmd: frm.attr('cmd')}, data))); }); callbacks.push(() => { cleanMessage(); $('#progressbar').addClass('hidden'); $('#send_box').text(''); $('#connect_panel').addClass('hidden'); $('[name="error_msg"]').addClass('hidden'); $('#chat_panel').removeClass('hidden'); $('#send_box').focus(); myinfo.kunjika = data.kunjika; myinfo.name = data.name; }); socket.send(JSON.stringify(Object.assign({cmd: 'seinfo'}, data))); } function leave() { callbacks.push(() => { $('#chat_panel').addClass('hidden'); $('#reply_clip').addClass('hidden'); $('#selected_clip').addClass('hidden'); $('#action_clip').addClass('hidden'); $('#connect_panel').removeClass('hidden'); myinfo.kunjika = ""; myinfo.name = ""; }); socket.send(JSON.stringify({ cmd: "leave" })); } function pushMessage(sender, text, reply = null) { var isMe = myinfo.kunjika == sender; var area = $('#message_area'); var elm = $('
', {class: 'siimple--my-0 siimple--pt-1'}).append(reply))
);
}
elm.append($('').append(text));
elm.click(function() {
activateMessage(this);
});
area.append(elm);
//to bottom
var scroll = $("#message_area_scroll");
scroll.scrollTop(scroll[0].scrollHeight);
}
function pushStatus(text) {
var area = $('#message_area');
var elm = $('', {class: 'status'});
elm.append($('', {class: 'siimple-tag siimple-tag--dark'}).append(text));
area.append(elm);
//to bottom
var scroll = $("#message_area_scroll");
scroll.scrollTop(scroll[0].scrollHeight);
}
function deactivateMessages() {
$('.active').each(function() {
$(this).removeClass('active');
});
$('#selected_clip').addClass('hidden');
}
function activateMessage(t) {
var t = $(t);
t.toggleClass('active');
if($('.active').length == 0)
$('#selected_clip').addClass('hidden');
else
$('#selected_clip').removeClass('hidden');
}
function selectedMessageToText() {
var text = "";
$('.active').each(function() {
$(this).find('pre').each(function() {
text += $(this).text() + '\n'
});
});
return text.trim();
}
function prepareReply() {
var text = selectedMessageToText();
var el = $('#reply_clip');
el.removeClass('hidden');
el.attr('msg', text);
$('#reply_clip > span').text(text.substr(0, 15)+ '...');
deactivateMessages();
}
function send() {
var text = $('#send_box').val().trim();
if(text.length == 0) return;
socket.send(JSON.stringify({
cmd: "text",
text: text,
reply: $('#reply_clip').attr('msg')
}));
$('#send_box').val('');
$('#reply_clip').attr('msg', '');
$('#reply_clip').addClass('hidden');
$('#reply_clip > span').text('');
}
function copyMessagesToClipboard() {
var $temp = $("