@@ -127,13 +127,11 @@
127 127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
inputWrapper: E1("#chat-input-area"),
128 128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
inputLine: E1('#chat-input-line'),
129 129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fileSelectWrapper: E1('#chat-input-file-area'),
130 130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
viewMessages: E1('#chat-messages-wrapper'),
131 131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
btnSubmit: E1('#chat-message-submit'),
132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- inputSingle: E1('#chat-input-single'),
133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- inputMulti: E1('#chat-input-multi'),
134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- inputCurrent: undefined/*one of inputSingle or inputMulti*/,
132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ inputField: E1('#chat-input-field'),
135 133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
inputFile: E1('#chat-input-file'),
136 134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
contentDiv: E1('div.content'),
137 135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
viewConfig: E1('#chat-config'),
138 136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
viewPreview: E1('#chat-preview'),
139 137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
previewContent: E1('#chat-preview-content'),
@@ -169,56 +167,23 @@
169 167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
taking into account single- vs multi-line input. The getter returns
170 168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
a string and the setter returns this object. */
171 169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
inputValue: function(){
172 170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const e = this.inputElement();
173 171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(arguments.length){
174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- e.value = arguments[0];
172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ e.innerText = arguments[0];
175 173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return this;
176 174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return e.value;
175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return e.innerText;
178 176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
},
179 177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/** Asks the current user input field to take focus. Returns this. */
180 178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
inputFocus: function(){
181 179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
this.inputElement().focus();
182 180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return this;
183 181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
},
184 182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/** Returns the current message input element. */
185 183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
inputElement: function(){
186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return this.e.inputCurrent;
187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- },
188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /** Toggles between single- and multi-line edit modes. Returns this. */
189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- inputToggleSingleMulti: function(){
190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const old = this.e.inputCurrent;
191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if(this.e.inputCurrent === this.e.inputSingle){
192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- this.e.inputCurrent = this.e.inputMulti;
193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- this.e.inputLine.classList.remove('single-line');
194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- this.e.inputCurrent = this.e.inputSingle;
196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- this.e.inputLine.classList.add('single-line');
197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const m = this.e.viewMessages,
199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sTop = m.scrollTop,
200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- mh1 = m.clientHeight;
201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- D.addClass(old, 'hidden');
202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- D.removeClass(this.e.inputCurrent, 'hidden');
203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const mh2 = m.clientHeight;
204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- m.scrollTo(0, sTop + (mh1-mh2));
205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- this.e.inputCurrent.value = old.value;
206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- old.value = '';
207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return this;
208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- },
209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /**
210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- If passed true or no arguments, switches to multi-line mode
211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if currently in single-line mode. If passed false, switches
212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- to single-line mode if currently in multi-line mode. Returns
213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- this.
214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- inputMultilineMode: function(yes){
216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if(!arguments.length) yes = true;
217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if(yes && this.e.inputCurrent === this.e.inputMulti) return this;
218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- else if(!yes && this.e.inputCurrent === this.e.inputSingle) return this;
219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- else return this.inputToggleSingleMulti();
184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return this.e.inputField;
220 185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
},
221 186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/** Enables (if yes is truthy) or disables all elements in
222 187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
* this.disableDuringAjax. */
223 188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
enableAjaxComponents: function(yes){
224 189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
D[yes ? 'enable' : 'disable'](this.disableDuringAjax);
@@ -392,17 +357,25 @@
392 357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return e ? overlapsElemView(e, this.e.viewMessages) : false;
393 358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
},
394 359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
settings:{
395 360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
get: (k,dflt)=>F.storage.get(k,dflt),
396 361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
getBool: (k,dflt)=>F.storage.getBool(k,dflt),
397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- set: (k,v)=>F.storage.set(k,v),
362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set: function(k,v){
363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ F.storage.set(k,v);
364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ F.page.dispatchEvent('chat-setting',{key: k, value: v});
365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ },
398 366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Toggles the boolean setting specified by k. Returns the
399 367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
new value.*/
400 368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
toggle: function(k){
401 369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const v = this.getBool(k);
402 370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
this.set(k, !v);
403 371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return !v;
372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ },
373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ addListener: function(setting, f){
374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ F.page.addEventListener('chat-setting', function(ev){
375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(ev.detail.key===setting) f(ev.detail);
376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }, false);
404 377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
},
405 378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
defaults:{
406 379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"images-inline": !!F.config.chat.imagesInline,
407 380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"edit-multiline": false,
408 381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"monospace-messages": false,
@@ -449,11 +422,13 @@
449 422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return e;
450 423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
451 424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
this.e.views.forEach(function(E){
452 425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(e!==E) D.addClass(E,'hidden');
453 426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
});
454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- this.e.currentView = D.removeClass(e,'hidden');
427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ this.e.currentView = e;
428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(this.e.currentView.$beforeShow) this.e.currentView.$beforeShow();
429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ D.removeClass(e,'hidden');
455 430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
this.animate(this.e.currentView, 'anim-fade-in-fast');
456 431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return this.e.currentView;
457 432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
},
458 433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/**
459 434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Updates the "active user list" view if we are not currently
@@ -499,10 +474,35 @@
499 474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Object.keys(this.usersLastSeen).sort(
500 475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
callee.sortUsersSeen
501 476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
).forEach(callee.addUserElem);
502 477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return this;
503 478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
},
479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /** Show or hide the active user list. Returns this object. */
480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ showActiveUserList: function(yes){
481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(0===arguments.length) yes = true;
482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ this.e.activeUserListWrapper.classList[
483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ yes ? 'remove' : 'add'
484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ]('hidden');
485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ D.removeClass(Chat.e.activeUserListWrapper, 'collapsed');
486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(Chat.e.activeUserListWrapper.classList.contains('hidden')){
487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* When hiding this element, undo all filtering */
488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Chat.setUserFilter(false);
489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*Ideally we'd scroll the final message into view
490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ now, but because viewMessages is currently hidden behind
491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ viewConfig, scrolling is a no-op. */
492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Chat.scrollMessagesTo(1);
493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Chat.updateActiveUserList();
495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Chat.animate(Chat.e.activeUserListWrapper, 'anim-flip-v');
496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return this;
498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ },
499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ showActiveUserTimestamps: function(yes){
500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(0===arguments.length) yes = true;
501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ this.e.activeUserList.classList[yes ? 'add' : 'remove']('timestamps');
502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return this;
503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ },
504 504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/**
505 505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Applies user name filter to all current messages, or clears
506 506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
the filter if uname is falsy.
507 507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
508 508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
setUserFilter: function(uname){
@@ -545,35 +545,10 @@
545 545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
546 546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
547 547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cs.animate.$disabled = true;
548 548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
F.fetch.beforesend = ()=>cs.ajaxStart();
549 549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
F.fetch.aftersend = ()=>cs.ajaxEnd();
550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cs.e.inputCurrent = cs.e.inputSingle;
551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Install default settings... */
552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Object.keys(cs.settings.defaults).forEach(function(k){
553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const v = cs.settings.get(k,cs);
554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if(cs===v) cs.settings.set(k,cs.settings.defaults[k]);
555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- });
556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if(window.innerWidth<window.innerHeight){
557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Alignment of 'my' messages: right alignment is conventional
558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for mobile chat apps but can be difficult to read in wide
559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- windows (desktop/tablet landscape mode), so we default to a
560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- layout based on the apparent "orientation" of the window:
561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tall vs wide. Can be toggled via settings popup. */
562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- document.body.classList.add('my-messages-right');
563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if(cs.settings.getBool('monospace-messages',false)){
565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- document.body.classList.add('monospace-messages');
566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if(cs.settings.getBool('active-user-list',false)){
568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cs.e.activeUserListWrapper.classList.remove('hidden');
569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if(cs.settings.getBool('active-user-list-timestamps',false)){
571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cs.e.activeUserList.classList.add('timestamps');
572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cs.inputMultilineMode(cs.settings.getBool('edit-multiline',false));
574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cs.chatOnlyMode(cs.settings.getBool('chat-only-mode'));
575 550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cs.pageTitleOrig = cs.e.pageTitle.innerText;
576 551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const qs = (e)=>document.querySelector(e);
577 552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const argsToArray = function(args){
578 553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return Array.prototype.slice.call(args,0);
579 554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
@@ -1194,47 +1169,59 @@
1194 1169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
});
1195 1170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
BlobXferState.clear();
1196 1171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Chat.inputValue("").inputFocus();
1197 1172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
1198 1173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const inputWidgetKeydown = function(ev){
1174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const inputWidgetKeydown = function f(ev){
1175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(!f.$toggle){
1176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ f.$toggle = function(currentMode){
1177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ currentMode = !currentMode;
1178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Chat.settings.set('edit-multiline', currentMode);
1179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
1180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1200 1181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(13 === ev.keyCode){
1182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const multi = Chat.settings.getBool('edit-multiline', false);
1201 1183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(ev.shiftKey){
1202 1184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ev.preventDefault();
1203 1185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ev.stopPropagation();
1204 1186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Shift-enter will run preview mode UNLESS preview mode is
1205 1187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
active AND the input field is empty, in which case it will
1206 1188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch back to message view. */
1207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if(Chat.e.currentView===Chat.e.viewPreview
1208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && !Chat.e.inputCurrent.value){
1209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Chat.setCurrentView(Chat.e.viewMessages);
1210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
1211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Chat.e.btnPreview.click();
1212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
1189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const text = Chat.inputValue().trim();
1190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(Chat.e.currentView===Chat.e.viewPreview && !text) Chat.setCurrentView(Chat.e.viewMessages);
1191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ else if(!text) f.$toggle(multi);
1192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ else Chat.e.btnPreview.click();
1213 1193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return false;
1214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if((Chat.e.inputSingle===ev.target)
1215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || (ev.ctrlKey && Chat.e.inputMulti===ev.target)){
1194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if(!multi || (ev.ctrlKey && multi)){
1216 1195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* ^^^ note that it is intended that both ctrl-enter and enter
1217 1196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
work for single-line input mode. */
1218 1197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ev.preventDefault();
1219 1198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ev.stopPropagation();
1220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Chat.submitMessage();
1199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const text = Chat.inputValue().trim();
1200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(!text) f.$toggle(multi);
1201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ else Chat.submitMessage();
1221 1202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return false;
1222 1203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1223 1204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1224 1205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
1225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Chat.e.inputSingle
1226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- .addEventListener('keydown', inputWidgetKeydown, false);
1227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Chat.e.inputMulti
1228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- .addEventListener('keydown', inputWidgetKeydown, false);
1206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Chat.e.inputField.addEventListener('keydown', inputWidgetKeydown, false);
1229 1207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Chat.e.btnSubmit.addEventListener('click',(e)=>{
1230 1208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
e.preventDefault();
1231 1209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Chat.submitMessage();
1232 1210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return false;
1233 1211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
});
1234 1212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (function(){/*Set up #chat-settings-button */
1213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (function(){/*Set up #chat-settings-button and related bits */
1214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(window.innerWidth<window.innerHeight){
1215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ // Must be set up before config view is...
1216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Alignment of 'my' messages: right alignment is conventional
1217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for mobile chat apps but can be difficult to read in wide
1218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ windows (desktop/tablet landscape mode), so we default to a
1219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ layout based on the apparent "orientation" of the window:
1220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tall vs wide. Can be toggled via settings. */
1221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ document.body.classList.add('my-messages-right');
1222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1236 1223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const settingsButton = document.querySelector('#chat-settings-button');
1237 1224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const optionsMenu = E1('#chat-config-options');
1238 1225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const cbToggle = function(ev){
1239 1226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ev.preventDefault();
1240 1227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ev.stopPropagation();
@@ -1248,27 +1235,11 @@
1248 1235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/** Internal acrobatics to allow certain settings toggles to access
1249 1236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
related toggles. */
1250 1237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const namedOptions = {
1251 1238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
activeUsers:{
1252 1239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
label: "Show active users list",
1253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- boolValue: ()=>!Chat.e.activeUserListWrapper.classList.contains('hidden'),
1254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- persistentSetting: 'active-user-list',
1255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- callback: function(){
1256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- D.toggleClass(Chat.e.activeUserListWrapper,'hidden');
1257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- D.removeClass(Chat.e.activeUserListWrapper, 'collapsed');
1258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if(Chat.e.activeUserListWrapper.classList.contains('hidden')){
1259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* When hiding this element, undo all filtering */
1260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Chat.setUserFilter(false);
1261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*Ideally we'd scroll the final message into view
1262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- now, but because viewMessages is currently hidden behind
1263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- viewConfig, scrolling is a no-op. */
1264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Chat.scrollMessagesTo(1);
1265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
1266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Chat.updateActiveUserList();
1267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Chat.animate(Chat.e.activeUserListWrapper, 'anim-flip-v');
1268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
1269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
1240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ boolValue: 'active-user-list'
1270 1241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1271 1242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
1272 1243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(1){
1273 1244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Per user request, toggle the list of users on and off if the
1274 1245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
legend element is tapped. */
@@ -1284,61 +1255,59 @@
1284 1255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}/*namedOptions.activeUsers additional setup*/
1285 1256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Settings menu entries... Remember that they will be rendered in
1286 1257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
reverse order and the most frequently-needed ones "should"
1287 1258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(arguably) be closer to the start of this list so that they
1288 1259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
will be rendered within easier reach of the settings button. */
1260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /**
1261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Settings ops structure:
1262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ label: string for the UI
1264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ boolValue: string (name of Chat.settings setting) or a
1266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ function which returns true or false.
1267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ select: SELECT element (instead of boolValue)
1269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ callback: optional handler to call after setting is modified.
1271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ If a setting has a boolValue set, that gets transformed into a
1273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ checkbox which toggles the given persistent setting (if
1274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ boolValue is a string) AND listens for changes to that setting
1275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fired via Chat.settings.set() so that the checkbox can stay in
1276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sync with external changes to that setting. Various Chat UI
1277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ elements stay in sync with the config UI via those settings
1278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ events.
1279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
1289 1280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const settingsOps = [{
1290 1281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
label: "Multi-line input",
1291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- boolValue: ()=>Chat.inputElement()===Chat.e.inputMulti,
1292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- persistentSetting: 'edit-multiline',
1293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- callback: function(){
1294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Chat.inputToggleSingleMulti();
1295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
1282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ boolValue: 'edit-multiline'
1296 1283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
},{
1297 1284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
label: "Left-align my posts",
1298 1285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
boolValue: ()=>!document.body.classList.contains('my-messages-right'),
1299 1286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
callback: function f(){
1300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- document.body.classList.toggle('my-messages-right');
1287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ document.body.classList[
1288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ this.checkbox.checked ? 'remove' : 'add'
1289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ]('my-messages-right');
1301 1290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1302 1291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
},{
1303 1292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
label: "Show images inline",
1304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- boolValue: ()=>Chat.settings.getBool('images-inline'),
1305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- callback: function(){
1306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const v = Chat.settings.toggle('images-inline');
1307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- F.toast.message("Image mode set to "+(v ? "inline" : "hyperlink")+".");
1308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
1293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ boolValue: 'images-inline'
1309 1294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
},{
1310 1295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
label: "Timestamps in active users list",
1311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- boolValue: ()=>Chat.e.activeUserList.classList.contains('timestamps'),
1312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- persistentSetting: 'active-user-list-timestamps',
1313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- callback: function(){
1314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- D.toggleClass(Chat.e.activeUserList,'timestamps');
1315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* If the timestamp option is activated but
1316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- namedOptions.activeUsers is not currently checked then
1317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- toggle that option on as well. */
1318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if(Chat.e.activeUserList.classList.contains('timestamps')
1319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && !namedOptions.activeUsers.boolValue()){
1320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- namedOptions.activeUsers.checkbox.checked = true;
1321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- namedOptions.activeUsers.callback();
1322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Chat.settings.set(namedOptions.activeUsers.persistentSetting, true);
1323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
1324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
1296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ boolValue: 'active-user-list-timestamps'
1325 1297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
},
1326 1298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
namedOptions.activeUsers,{
1327 1299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
label: "Monospace message font",
1328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- boolValue: ()=>document.body.classList.contains('monospace-messages'),
1329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- persistentSetting: 'monospace-messages',
1330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- callback: function(){
1331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- document.body.classList.toggle('monospace-messages');
1300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ boolValue: 'monospace-messages',
1301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ callback: function(setting){
1302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ document.body.classList[
1303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ setting.value ? 'add' : 'remove'
1304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ]('monospace-messages');
1332 1305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1333 1306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
},{
1334 1307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
label: "Chat-only mode",
1335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- boolValue: ()=>Chat.isChatOnlyMode(),
1336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- persistentSetting: 'chat-only-mode',
1337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- callback: function(){
1338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Chat.toggleChatOnlyMode();
1339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
1308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ boolValue: 'chat-only-mode'
1340 1309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}];
1341 1310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1342 1311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/** Set up selection list of notification sounds. */
1343 1312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(1){
1344 1313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const selectSound = D.select();
@@ -1375,63 +1344,113 @@
1375 1344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
settingsOps.forEach(function f(op){
1376 1345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const line = D.addClass(D.div(), 'menu-entry');
1377 1346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const btn = D.append(
1378 1347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
D.addClass(D.label(), 'cbutton'/*bootstrap skin hijacks 'button'*/),
1379 1348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
op.label);
1380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const callback = function(ev){
1381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- op.callback(ev);
1382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if(op.persistentSetting){
1383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Chat.settings.set(op.persistentSetting, op.boolValue());
1384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
1385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- };
1386 1349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(op.hasOwnProperty('select')){
1387 1350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
D.append(line, btn, op.select);
1388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- op.select.addEventListener('change', callback, false);
1351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(op.callback){
1352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ op.select.addEventListener('change', (ev)=>op.callback(ev), false);
1353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1389 1354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if(op.hasOwnProperty('boolValue')){
1390 1355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(undefined === f.$id) f.$id = 0;
1391 1356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
++f.$id;
1357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if('string' ===typeof op.boolValue){
1358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const key = op.boolValue;
1359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ op.boolValue = ()=>Chat.settings.getBool(key);
1360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ op.persistentSetting = key;
1361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1392 1362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const check = op.checkbox
1393 1363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
= D.attr(D.checkbox(1, op.boolValue()),
1394 1364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
'aria-label', op.label);
1395 1365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const id = 'cfgopt'+f.$id;
1396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if(op.boolValue()) check.checked = true;
1366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ check.checked = op.boolValue();
1367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ op.checkbox = check;
1397 1368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
D.attr(check, 'id', id);
1398 1369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
D.attr(btn, 'for', id);
1399 1370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
D.append(line, check);
1400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- check.addEventListener('change', callback);
1401 1371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
D.append(line, btn);
1402 1372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
1403 1373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
line.addEventListener('click', callback);
1404 1374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
D.append(line, btn);
1405 1375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1406 1376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
D.append(optionsMenu, line);
1377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(op.persistentSetting){
1378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Chat.settings.addListener(
1379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ op.persistentSetting,
1380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ function(setting){
1381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(op.checkbox) op.checkbox.checked = !!setting.value;
1382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ else if(op.select) op.select.value = setting.value;
1383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(op.callback) op.callback(setting);
1384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
1386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(op.checkbox){
1387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ op.checkbox.addEventListener(
1388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 'change', function(){
1389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Chat.settings.set(op.persistentSetting, op.checkbox.checked)
1390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }, false);
1391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if(op.callback && op.checkbox){
1393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ op.checkbox.addEventListener('change', (ev)=>op.callback(ev), false);
1394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1407 1395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
});
1408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if(0 && settingsOps.selectSound){
1409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- D.append(optionsMenu, settingsOps.selectSound);
1410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
1411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- //settingsButton.click()/*for for development*/;
1412 1396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
})()/*#chat-settings-button setup*/;
1413 1397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (function(){
1399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Install default settings... must come after
1400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ chat-settings-button setup so that the listeners which that
1401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ installs are notified via the properties getting initialized
1402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ here. */
1403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Chat.settings.addListener('monospace-messages',function(s){
1404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ document.body.classList[s.value ? 'add' : 'remove']('monospace-messages');
1405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ })
1406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Chat.settings.addListener('active-user-list',function(s){
1407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Chat.showActiveUserList(s.value);
1408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ });
1409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Chat.settings.addListener('active-user-list-timestamps',function(s){
1410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Chat.showActiveUserTimestamps(s.value);
1411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ });
1412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Chat.settings.addListener('chat-only-mode',function(s){
1413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Chat.chatOnlyMode(s.value);
1414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ });
1415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Chat.settings.addListener('edit-multiline',function(s){
1416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Chat.e.inputLine.classList[
1417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ s.value ? 'remove' : 'add'
1418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ]('single-line');
1419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ });
1420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const valueKludges = {
1421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Convert certain string-format values to other types... */
1422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "false": false,
1423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "true": true
1424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
1425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Object.keys(Chat.settings.defaults).forEach(function(k){
1426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ var v = Chat.settings.get(k,Chat);
1427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(Chat===v) v = Chat.settings.defaults[k];
1428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(valueKludges.hasOwnProperty(v)) v = valueKludges[v];
1429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Chat.settings.set(k,v)
1430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* fires event listeners so that the Config area checkboxes
1431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ get in sync */;
1432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ });
1433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ })();
1434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1414 1435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(function(){/*set up message preview*/
1415 1436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const btnPreview = Chat.e.btnPreview;
1416 1437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Chat.setPreviewText = function(t){
1417 1438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
this.setCurrentView(this.e.viewPreview);
1418 1439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
this.e.previewContent.innerHTML = t;
1419 1440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
this.e.viewPreview.querySelectorAll('a').forEach(addAnchorTargetBlank);
1420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- this.e.inputCurrent.focus();
1441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ this.inputFocus();
1421 1442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
1422 1443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Chat.e.viewPreview.querySelector('#chat-preview-close').
1423 1444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
addEventListener('click', ()=>Chat.setCurrentView(Chat.e.viewMessages), false);
1424 1445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
let previewPending = false;
1425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const elemsToEnable = [
1426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- btnPreview, Chat.e.btnSubmit,
1427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Chat.e.inputSingle, Chat.e.inputMulti];
1446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const elemsToEnable = [btnPreview, Chat.e.btnSubmit, Chat.e.inputField];
1428 1447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const submit = function(ev){
1429 1448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ev.preventDefault();
1430 1449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ev.stopPropagation();
1431 1450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(previewPending) return false;
1432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const txt = Chat.e.inputCurrent.value;
1451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const txt = Chat.inputValue();
1433 1452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(!txt){
1434 1453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Chat.setPreviewText('');
1435 1454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
previewPending = false;
1436 1455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return false;
1437 1456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1438 1457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!