@@ -116,11 +116,12 @@
116 116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
contentDiv: E1('div.content'),
117 117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
viewConfig: E1('#chat-config'),
118 118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
viewPreview: E1('#chat-preview'),
119 119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
previewContent: E1('#chat-preview-content'),
120 120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
btnPreview: E1('#chat-preview-button'),
121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- views: document.querySelectorAll('.chat-view')
121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ views: document.querySelectorAll('.chat-view'),
122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ activeUserList: D.append(E1('#chat-user-list'), "user list placeholder")
122 123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
},
123 124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
me: F.user.name,
124 125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mxMsg: F.config.chat.initSize ? -F.config.chat.initSize : -50,
125 126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mnMsg: undefined/*lowest message ID we've seen so far (for history loading)*/,
126 127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pageIsActive: 'visible'===document.visibilityState,
@@ -128,10 +129,17 @@
128 129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
notificationBubbleColor: 'white',
129 130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
totalMessageCount: 0, // total # of inbound messages
130 131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
//! Number of messages to load for the history buttons
131 132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
loadMessageCount: Math.abs(F.config.chat.initSize || 20),
132 133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ajaxInflight: 0,
134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ usersLastSeen:{
135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Map of user names to their most recent message time
136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (JS Date object). Only messages received by the chat client
137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ are considered. */
138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Reminder: to convert a Julian time J to JS:
139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ new Date((J - 2440587.5) * 86400000) */
140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ },
133 141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/** Gets (no args) or sets (1 arg) the current input text field value,
134 142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
taking into account single- vs multi-line input. The getter returns
135 143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
a string and the setter returns this object. */
136 144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
inputValue: function(){
137 145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const e = this.inputElement();
@@ -367,11 +375,12 @@
367 375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
defaults:{
368 376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"images-inline": !!F.config.chat.imagesInline,
369 377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"edit-multiline": false,
370 378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"monospace-messages": false,
371 379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"chat-only-mode": false,
372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "audible-alert": true
380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "audible-alert": true,
381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "active-user-list": false
373 382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
374 383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
},
375 384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/** Plays a new-message notification sound IF the audible-alert
376 385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
setting is true, else this is a no-op. Returns this.
377 386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -407,10 +416,42 @@
407 416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
setCurrentView: function(e){
408 417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
this.e.views.forEach(function(E){
409 418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(e!==E) D.addClass(E,'hidden');
410 419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
});
411 420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return this.e.currentView = D.removeClass(e,'hidden');
421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ },
422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /**
423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Updates the "active user list" view.
424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ updateActiveUserList: function callee(){
426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(!callee.sortUsersSeen){
427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /** Array.sort() callback. Expects an array of user names and
428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sorts them in last-received message order (newest first). */
429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const usersLastSeen = this.usersLastSeen;
430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ callee.sortUsersSeen = function(l,r){
431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ l = usersLastSeen[l];
432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ r = usersLastSeen[r];
433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(l && r) return r - l;
434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ else if(l) return -1;
435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ else if(r) return 1;
436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ else return 0;
437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const self = this,
440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ users = Object.keys(this.usersLastSeen).sort(callee.sortUsersSeen);
441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(!users.length) return this;
442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const ael = this.e.activeUserList;
443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ D.clearElement(ael);
444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ users.forEach(function(u){
445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const uSpan = D.addClass(D.span(), 'chat-user');
446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const uDate = self.usersLastSeen[u];
447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ D.append(uSpan, u);
448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(uDate.$uColor){
449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ uSpan.style.backgroundColor = uDate.$uColor;
450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ D.append(ael, uSpan);
452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ });
412 453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
413 454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
414 455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
F.fetch.beforesend = ()=>cs.ajaxStart();
415 456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
F.fetch.aftersend = ()=>cs.ajaxEnd();
416 457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cs.e.inputCurrent = cs.e.inputSingle;
@@ -427,10 +468,13 @@
427 468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
tall vs wide. Can be toggled via settings popup. */
428 469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
document.body.classList.add('my-messages-right');
429 470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
430 471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(cs.settings.getBool('monospace-messages',false)){
431 472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
document.body.classList.add('monospace-messages');
473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(cs.settings.getBool('active-user-list',false)){
475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cs.e.activeUserList.classList.remove('hidden');
432 476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
433 477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cs.inputMultilineMode(cs.settings.getBool('edit-multiline',false));
434 478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cs.chatOnlyMode(cs.settings.getBool('chat-only-mode'));
435 479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cs.pageTitleOrig = cs.e.pageTitle.innerText;
436 480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const qs = (e)=>document.querySelector(e);
@@ -624,10 +668,46 @@
624 668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(cs.pageIsActive){
625 669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cs.e.pageTitle.innerText = cs.pageTitleOrig;
626 670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
627 671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}, true);
628 672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cs.setCurrentView(cs.e.viewMessages);
673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cs.e.activeUserList.addEventListener('click', function f(ev){
675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Filter messages on a user clicked in activeUserList */
676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ev.stopPropagation();
677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ev.preventDefault();
678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(!ev.target.classList.contains('chat-user')) return false;
679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const eUser = ev.target;
680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const uname = eUser.innerText;
681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ let eLast;
682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cs.setCurrentView(cs.e.viewMessages);
683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(eUser.classList.contains('selected')){
684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ eUser.classList.remove('selected');
685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cs.e.viewMessages.querySelectorAll(
686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ '.message-widget.hidden'
687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ).forEach(function(e){
688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ e.classList.remove('hidden');
689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ eLast = e;
690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ });
691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ delete f.$eSelected;
692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(f.$eSelected) f.$eSelected.classList.remove('selected');
694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ f.$eSelected = eUser;
695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ eUser.classList.add('selected');
696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cs.e.viewMessages.querySelectorAll(
697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ '.message-widget'
698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ).forEach(function(e){
699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(e.dataset.xfrom===uname){
700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ e.classList.remove('hidden');
701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ eLast = e;
702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ else e.classList.add('hidden');
704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ });
705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(eLast) eLast.scrollIntoView(false);
707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return false;
708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }, false);
629 709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return cs;
630 710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
})()/*Chat initialization*/;
631 711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
632 712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/**
633 713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Custom widget type for rendering messages (one message per
@@ -1060,10 +1140,25 @@
1060 1140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
boolValue: ()=>Chat.inputElement()===Chat.e.inputMulti,
1061 1141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
persistentSetting: 'edit-multiline',
1062 1142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
callback: function(){
1063 1143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Chat.inputToggleSingleMulti();
1064 1144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ },{
1146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ label: "Show recent user list",
1147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ boolValue: ()=>!Chat.e.activeUserList.classList.contains('hidden'),
1148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ persistentSetting: 'active-user-list',
1149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ callback: function(){
1150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ D.toggleClass(Chat.e.activeUserList,'hidden');
1151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(Chat.e.activeUserList.classList.contains('hidden')){
1152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* When hiding this element, undo all filtering */
1153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ D.removeClass(Chat.e.viewMessages.querySelectorAll('.message-widget.hidden'), 'hidden');
1154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*Ideally we'd scroll the final message into view
1155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ now, but because viewMessages is currently hidden behind
1156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ viewConfig, scrolling is a no-op. */
1157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Chat.scrollMessagesTo(1);
1158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1065 1160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
},{
1066 1161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
label: "Monospace message font",
1067 1162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
boolValue: ()=>document.body.classList.contains('monospace-messages'),
1068 1163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
persistentSetting: 'monospace-messages',
1069 1164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
callback: function(){
@@ -1228,10 +1323,18 @@
1228 1323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
should only be true when loading older messages. */
1229 1324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
f.processPost = function(m,atEnd){
1230 1325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
++Chat.totalMessageCount;
1231 1326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( m.msgid>Chat.mxMsg ) Chat.mxMsg = m.msgid;
1232 1327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !Chat.mnMsg || m.msgid<Chat.mnMsg) Chat.mnMsg = m.msgid;
1328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(m.xfrom && m.mtime){
1329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const d = new Date(m.mtime);
1330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const uls = Chat.usersLastSeen[m.xfrom];
1331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(!uls || uls<d){
1332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ d.$uColor = m.uclr;
1333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Chat.usersLastSeen[m.xfrom] = d;
1334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1233 1336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( m.mdel ){
1234 1337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* A record deletion notice. */
1235 1338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Chat.deleteMessageElem(m.mdel);
1236 1339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
1237 1340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -1240,10 +1343,12 @@
1240 1343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1241 1344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const row = new Chat.MessageWidget(m);
1242 1345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Chat.injectMessageElem(row.e.body,atEnd);
1243 1346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(m.isError){
1244 1347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Chat._gotServerError = m;
1348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
1349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Chat.updateActiveUserList();
1245 1350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1246 1351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}/*processPost()*/;
1247 1352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}/*end static init*/
1248 1353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
jx.msgs.forEach((m)=>f.processPost(m,atEnd));
1249 1354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if('visible'===document.visibilityState){
1250 1355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!