diff --git a/src/Yavsc/wwwroot/js/chat.js b/src/Yavsc/wwwroot/js/chat.js
index b0f9e1ae..9611cd71 100644
--- a/src/Yavsc/wwwroot/js/chat.js
+++ b/src/Yavsc/wwwroot/js/chat.js
@@ -49,6 +49,15 @@ window.ChatHubHandler = (function ($) {
ulist.appendTo($view);
notifications.appendTo($view);
+
+ var onUserDisconnected = function (uname) {
+ $('#u' + uname).remove();
+ };
+
+ var onUserConnected = function (username) {
+ addChatUser(username);
+ };
+
var chat = $.connection.chatHub;
// Create a function that the hub can call back to display messages.
chat.client.addMessage = function (name, room, message) {
@@ -148,7 +157,7 @@ window.ChatHubHandler = (function ($) {
}).appendTo(roomview);
if (chanType == 'r')
chans.push(chanName);
- else if (chanType == 'u')
+ else if (chanType == 'u' || chanType == 'a')
userlist.push(chanName);
setActiveChan(chanId);
};
@@ -161,15 +170,23 @@ window.ChatHubHandler = (function ($) {
if (userlist.some(function(uname){ return uname == userName ; }))
setActiveChan('u' + userName);
else
- buildChan('@', 'u', userName, chat.server.sendPV); };
+ if (userName[0]=='?') buildChan('@?', 'a', userName.slice(1), chat.server.sendPV);
+ else buildChan('@', 'u', userName, chat.server.sendPV);
+ };
$view.data('chans').split(',').forEach(function (chan) {
buildRoom(chan);
});
-
- function onCx() {
+ var getUsers = function () {
+ $.get('/api/chat/users').done(function (users) {
+ $.each(users, function () {
+ var user = this;
+ addChatUser(user.UserName);
+ });
+ });
+ };
+ function onCx(recting) {
setTimeout(function () {
- if (is_auth) getUsers();
chans.forEach(function (room) {
chat.server.join(room).done(function (chatInfo) {
setActiveChan('r' + chatInfo.Name);
@@ -186,7 +203,7 @@ window.ChatHubHandler = (function ($) {
// Start the connection.
$.connection.hub.start().done(function () {
- onCx();
+ onCx(false);
});
$.connection.hub.disconnected(function () {
@@ -194,9 +211,9 @@ window.ChatHubHandler = (function ($) {
onDisCx();
setTimeout(function () {
$.connection.hub.start().done(function () {
- onCx();
- }, 30000); // Re-start connection after 30 seconds
- });
+ onCx(true);
+ }); }
+ , 30000); // Re-start connection after 30 seconds
});
chanName.keydown(function (event) {
@@ -234,14 +251,7 @@ window.ChatHubHandler = (function ($) {
.appendTo(ulist);
};
- var getUsers = function () {
- $.get('/api/chat/users').done(function (users) {
- $.each(users, function () {
- var user = this;
- addChatUser(user.UserName);
- });
- });
- };
+
// This optional function html-encodes messages for display in the page.
function htmlEncode(value) {
@@ -249,13 +259,6 @@ window.ChatHubHandler = (function ($) {
return encodedValue;
}
- var onUserDisconnected = function (uname) {
- $('#u' + uname).remove();
- };
-
- var onUserConnected = function (username) {
- addChatUser(username);
- };
$(window).unload(function () { chat.server.abort(); });
diff --git a/src/Yavsc/wwwroot/js/chat.min.js b/src/Yavsc/wwwroot/js/chat.min.js
index cd63e4b2..6711e3f1 100644
--- a/src/Yavsc/wwwroot/js/chat.min.js
+++ b/src/Yavsc/wwwroot/js/chat.min.js
@@ -1,7 +1,14 @@
-window.ChatHubHandler=(function($){$.fn.filterByData=function(prop,val){return this.filter(function(){return $(this).data(prop)==val;});};var ChatView=function($view,full){if(!full)throw new Error('not implemented');var chans=[];var frontRoomName;var ulist=$('
').addClass('userlist');var notifications=$('').addClass('notifs');ulist.appendTo($view);notifications.appendTo($view);var chat=$.connection.chatHub;chat.client.addMessage=function(name,room,message){$('#room_'+room).append(''+htmlEncode(name)+' : '+htmlEncode(message)+' ');};chat.client.addPV=function(name,message){if(!$('#mute').prop('checked')){audio.play();}
-$('#pv_'+name).append(''+htmlEncode(name)+' : '+htmlEncode(message)+' ');};chat.client.notifyRoom=function(tag,targetid,message){if(tag==='connected'||tag==='reconnected')onUserConnected(targetid,message);else if(tag==='disconnected')onUserDisconnected(targetid,message);$(' ').addClass(tag).append(tag+': '+targetid+' ').append(message).addClass(tag).appendTo($('#room_'+targetid));};chat.client.notifyUser=function(tag,targetid,message){if(tag==='connected'||tag==='reconnected')onUserConnected(targetid,message);else if(tag==='disconnected')onUserDisconnected(targetid,message);$(' ').append(tag+': '+targetid).append(message).addClass(tag).appendTo(notifications);};var setActiveRoom=function(room){var frontRoom;if(frontRoomName!==''){frontRoom=$('#vroom_'+frontRoomName);frontRoom.addClass('hidden');$('#sel_'+frontRoomName).addClass('btn-primary');}
-frontRoomName=room;frontRoom=$('#vroom_'+room);$('#sel_'+room).removeClass('btn-primary');frontRoom.removeClass('hidden');};var chatbar=$('
');var roomjoin=$('
');var roomlist=$('
');roomlist.appendTo(chatbar);$('Join : ').appendTo(roomjoin);var chanName=$(' ');chanName.appendTo(roomjoin);roomjoin.appendTo(chatbar);chatbar.appendTo($view);var chatlist=$('
');chatlist.appendTo($view);var buildRoom=function(room){var roomTag=$(''+room+' ').addClass('btn');roomTag.prop('id','sel_'+room).click(function(){setActiveRoom(room);$(this).removeClass('btn-primary');});roomTag.appendTo(roomlist);var roomview=$('
').addClass('container');roomview.appendTo(chatlist);roomview.prop('id','vroom_'+room);var msglist=$('').addClass('mesglist');msglist.prop('id','room_'+room);msglist.appendTo(roomview);$(' ').prop('id','inp_'+room).prop('enable',false).prop('hint','hello').prop('title','send to '+room).addClass('form-control').keydown(function(ev){if(ev.which==13){if(this.value.length==0)return;chat.server.send(room,this.value);this.value='';}}).appendTo(roomview);chans.push(room);setActiveRoom(room);};$view.data('chans').split(',').forEach(function(chan){buildRoom(chan);});function onCx(){setTimeout(function(){getUsers();},120);$('#chatview').removeClass('disabled');chans.forEach(function(room){chat.server.join(room).done(function(chatInfo){setActiveRoom(chatInfo.Name);});});}
-function onDisCx(){$('#chatview').addClass('disabled');}
-$.connection.hub.start().done(function(){onCx();});$.connection.hub.disconnected(function(){onDisCx();setTimeout(function(){$.connection.hub.start().done(function(){onCx();},30000);});});chanName.keydown(function(event){if(event.which==13){if(this.value.length==0)return;buildRoom(this.value);chat.server.join(this.value).done(function(chatInfo){setActiveRoom(chatInfo.Name);});this.value='';}});var pvuis;var audio=new Audio('/sounds/bell.mp3');var sendPV=function(){var msg=$('#pv').val();$.each(pvuis.CXs,function(){chat.server.sendPV(this,msg);});$('#discussion').append(''+htmlEncode(pvuis.UserName)+'<< '+htmlEncode(msg)+' ');$('#pv').val('');};$('#pv').keydown(function(event){if(event.which==13){sendPV();}});$('#command').keydown(function(event){if(event.which==13){}});var addChatUser=function(uname){$('#u_'+uname).remove();$(' '+uname+' ').prop('id','u_'+uname).css('cursor','pointer').click(function(){setPrivateTarget(this);}).appendTo(ulist);};var getUsers=function(){$.get('/api/chat/users').done(function(users){$.each(users,function(){var user=this;addChatUser(user.UserName);});});};function htmlEncode(value){var encodedValue=$('
').text(value).html();return encodedValue;}
-var setPrivateTarget=function(li){$('#rooms').addClass('hidden');$('#sendpvbox').removeClass('hidden');pvuis={CXs:$(li).data('cxids'),UserName:$(li).data('name')};$('#sendpvdest').html(pvuis.UserName);$('#pvs').focus();};var setPublic=function(){$('#rooms').removeClass('hidden');$('#sendpvbox').addClass('hidden');$('#message').focus();};$('#pubChan').css('cursor','pointer');$('#pubChan').click(setPublic);setPublic();var onUserDisconnected=function(uname){$('#u_'+uname).remove();};var onUserConnected=function(username){addChatUser(username);};$(window).unload(function(){chat.server.abort();});};$(document).ready(function($){ChatView($('#chatview'),true);});})(window.jQuery);
\ No newline at end of file
+window.ChatHubHandler=(function($){$.fn.filterByData=function(prop,val){return this.filter(function(){return $(this).data(prop)==val;});};var ChatView=function($view,full){if(!full)throw new Error('not implemented');var chans=[];var is_auth=$view.data('is_auth');var userlist=[];var frontChanId;var ulist=$('').addClass('userlist');var notifications=$('').addClass('notifs');ulist.appendTo($view);notifications.appendTo($view);var onUserDisconnected=function(uname){$('#u'+uname).remove();};var onUserConnected=function(username){addChatUser(username);};var chat=$.connection.chatHub;chat.client.addMessage=function(name,room,message){var $userTag=$(""+htmlEncode(name)+" ").click(function(){buildPv(name);});var $li=$(' ');$userTag.appendTo($li)
+$li.append(' '+htmlEncode(message));$li.appendTo($('#r'+room));};chat.client.addPV=function(name,message){if(!$('#mute').prop('checked')){audio.play();}
+buildPv(name);$('#u'+name).append(''+htmlEncode(name)+' : '+htmlEncode(message)+' ');};chat.client.notifyRoom=function(tag,targetid,message){if(tag==='connected'||tag==='reconnected')onUserConnected(targetid,message);else if(tag==='disconnected')onUserDisconnected(targetid,message);$(' ').addClass(tag).append(tag+': '+targetid+' ').append(message).addClass(tag).appendTo($('#room_'+targetid));};chat.client.notifyUser=function(tag,targetid,message){if(tag==='connected'||tag==='reconnected')onUserConnected(targetid,message);else if(tag==='disconnected')onUserDisconnected(targetid,message);$(' ').append(tag+': '+targetid).append(message).addClass(tag).appendTo(notifications);};var setActiveChan=function(chanId){if(frontChanId!=chanId){$('#sel_'+frontChanId).addClass('btn-primary');$('#v'+frontChanId).addClass('hidden');}
+frontChanId=chanId;$('#sel_'+chanId).removeClass('btn-primary');$('#v'+chanId).removeClass('hidden');$('#inp_'+chanId).focus();};var chatbar=$('
');var roomjoin=$('
');var roomlist=$('
');roomlist.appendTo(chatbar);$('Join : ').appendTo(roomjoin);var chanName=$(' ');chanName.appendTo(roomjoin);roomjoin.appendTo(chatbar);chatbar.appendTo($view);var chatlist=$('
');chatlist.appendTo($view);var buildChan=function(chdp,chanType,chanName,sendCmd){var chanId=chanType+chanName;var roomTag=$(''+chdp+chanName+' ').addClass('btn');roomTag.prop('id','sel_'+chanId).click(function(){setActiveChan(chanId);$(this).removeClass('btn-primary');});roomTag.appendTo(roomlist);var roomview=$('
').addClass('container');roomview.appendTo(chatlist);roomview.prop('id','v'+chanId);var msglist=$('').addClass('mesglist');msglist.prop('id',chanId);msglist.appendTo(roomview);$(' ').prop('id','inp_'+chanId).prop('enable',false).prop('hint','hello').prop('title','send to '+chanName).addClass('form-control').keydown(function(ev){if(ev.which==13){if(this.value.length==0)return;sendCmd(chanName,this.value);this.value='';}}).appendTo(roomview);if(chanType=='r')
+chans.push(chanName);else if(chanType=='u'||chanType=='a')
+userlist.push(chanName);setActiveChan(chanId);};var buildRoom=function(roomName){if(chans.some(function(cname){return cname==roomName;}))
+setActiveChan('r'+roomName);else
+buildChan('#','r',roomName,chat.server.send);};var buildPv=function(userName){if(userlist.some(function(uname){return uname==userName;}))
+setActiveChan('u'+userName);else
+if(userName[0]=='?')buildChan('@?','a',userName.slice(1),chat.server.sendPV);else buildChan('@','u',userName,chat.server.sendPV);};$view.data('chans').split(',').forEach(function(chan){buildRoom(chan);});var getUsers=function(){$.get('/api/chat/users').done(function(users){$.each(users,function(){var user=this;addChatUser(user.UserName);});});};function onCx(recting){setTimeout(function(){chans.forEach(function(room){chat.server.join(room).done(function(chatInfo){setActiveChan('r'+chatInfo.Name);});});},120);$view.removeClass('disabled');}
+function onDisCx(){$view.addClass('disabled');}
+$.connection.hub.start().done(function(){onCx(false);});$.connection.hub.disconnected(function(){onDisCx();setTimeout(function(){$.connection.hub.start().done(function(){onCx(true);});},30000);});chanName.keydown(function(event){if(event.which==13){if(this.value.length==0)return;buildRoom(this.value);chat.server.join(this.value).done(function(chatInfo){setActiveChan('r'+chatInfo.Name);});this.value='';}});var audio=new Audio('/sounds/bell.mp3');$('#command').keydown(function(event){if(event.which==13){}});var addChatUser=function(uname){$('#u'+uname).remove();$(' '+uname+' ').prop('id','u_'+uname).css('cursor','pointer').click(function(){buildPv(uname);}).appendTo(ulist);};function htmlEncode(value){var encodedValue=$('
').text(value).html();return encodedValue;}
+$(window).unload(function(){chat.server.abort();});};$(document).ready(function($){ChatView($('#chatview'),true);});})(window.jQuery);
\ No newline at end of file