@@ -127,10 +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!
+ btnAttach: E1('#chat-message-attach'),
132 133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
inputField: E1('#chat-input-field'),
133 134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
inputFile: E1('#chat-input-file'),
134 135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
contentDiv: E1('div.content'),
135 136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
viewConfig: E1('#chat-config'),
136 137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
viewPreview: E1('#chat-preview'),
@@ -381,12 +382,11 @@
381 382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"edit-compact-mode": true,
382 383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"monospace-messages": true,
383 384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"chat-only-mode": false,
384 385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"audible-alert": true,
385 386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"active-user-list": false,
386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "active-user-list-timestamps": false,
387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "hide-attachment-widget": false
387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "active-user-list-timestamps": false
388 388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
389 389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
},
390 390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/** Plays a new-message notification sound IF the audible-alert
391 391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
setting is true, else this is a no-op. Returns this.
392 392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -1036,11 +1036,11 @@
1036 1036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}/*_handleLegendClicked()*/
1037 1037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
1038 1038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return cf;
1039 1039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
})()/*MessageWidget*/;
1040 1040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const BlobXferState = (function(){/*drag/drop bits...*/
1041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const BlobXferState = (function(){
1042 1042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* State for paste and drag/drop */
1043 1043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const bxs = {
1044 1044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dropDetails: document.querySelector('#chat-drop-details'),
1045 1045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob: undefined,
1046 1046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
clear: function(){
@@ -1059,22 +1059,22 @@
1059 1059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
D.clearElement(dd);
1060 1060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(!blob){
1061 1061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Chat.e.inputFile.value = '';
1062 1062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
1063 1063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- D.append(dd, "Name: ", blob.name,
1064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ D.append(dd, "Attached: ", blob.name,
1065 1065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
D.br(), "Size: ",blob.size);
1066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const btn = D.button("Cancel");
1067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ D.append(dd, D.br(), btn);
1068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ btn.addEventListener('click', ()=>updateDropZoneContent(), false);
1066 1069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(blob.type && (blob.type.startsWith("image/") || blob.type==='BITMAP')){
1067 1070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const img = D.img();
1068 1071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
D.append(dd, D.br(), img);
1069 1072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const reader = new FileReader();
1070 1073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
reader.onload = (e)=>img.setAttribute('src', e.target.result);
1071 1074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
reader.readAsDataURL(blob);
1072 1075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const btn = D.button("Cancel");
1074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- D.append(dd, D.br(), btn);
1075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- btn.addEventListener('click', ()=>updateDropZoneContent(), false);
1076 1076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
1077 1077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Chat.e.inputFile.addEventListener('change', function(ev){
1078 1078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
updateDropZoneContent(this.files && this.files[0] ? this.files[0] : undefined)
1079 1079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
});
1080 1080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Handle image paste from clipboard. TODO: figure out how we can
@@ -1107,53 +1107,27 @@
1107 1107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ev.preventDefault();
1108 1108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return false;
1109 1109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
1110 1110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Chat.e.inputField.addEventListener('paste', onPastePlainText, false);
1111 1111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Add help button for drag/drop/paste zone */
1113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Chat.e.inputFile.parentNode.insertBefore(
1114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- F.helpButtonlets.create(
1115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Chat.e.fileSelectWrapper.querySelector('.help-buttonlet')
1116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ), Chat.e.inputFile
1117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
1118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ////////////////////////////////////////////////////////////
1119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- // File drag/drop visual notification.
1120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const dropHighlight = Chat.e.inputFile /* target zone */;
1121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const dropEvents = {
1122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- drop: function(ev){
1123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- D.removeClass(dropHighlight, 'dragover');
1124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- },
1125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- dragenter: function(ev){
1126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ev.preventDefault();
1127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ev.dataTransfer.dropEffect = "copy";
1128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- D.addClass(dropHighlight, 'dragover');
1129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return false;
1130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- },
1131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- dragleave: function(ev){
1132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- D.removeClass(dropHighlight, 'dragover');
1133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- },
1134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- dragend: function(ev){
1135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- D.removeClass(dropHighlight, 'dragover');
1136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
1137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- };
1138 1112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const noDragDropEvents = function(ev){
1139 1113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* contenteditable tries to do its own thing with dropped data,
1140 1114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
which is not compatible with how we use it, so... */
1141 1115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ev.dataTransfer.effectAllowed = 'none';
1142 1116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ev.dataTransfer.dropEffect = 'none';
1143 1117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ev.preventDefault();
1144 1118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ev.stopPropagation();
1145 1119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return false;
1146 1120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
1147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Object.keys(dropEvents).forEach(
1121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ['drop','dragenter','dragleave','dragend'].forEach(
1148 1123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(k)=>{
1149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Chat.e.inputFile.addEventListener(k, dropEvents[k], true);
1150 1124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Chat.inputElement().addEventListener(k, noDragDropEvents, false);
1151 1125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1152 1126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
1153 1127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return bxs;
1154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- })()/*drag/drop*/;
1128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ })()/*drag/drop/paste*/;
1155 1129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1156 1130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const tzOffsetToString = function(off){
1157 1131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const hours = Math.round(off/60), min = Math.round(off % 30);
1158 1132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return ''+(hours + (min ? '.5' : ''));
1159 1133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
@@ -1286,10 +1260,12 @@
1286 1260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Chat.e.btnSubmit.addEventListener('click',(e)=>{
1287 1261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
e.preventDefault();
1288 1262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Chat.submitMessage();
1289 1263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return false;
1290 1264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
});
1265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Chat.e.btnAttach.addEventListener(
1266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 'click', ()=>Chat.e.inputFile.click(), false);
1291 1267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1292 1268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(function(){/*Set up #chat-settings-button and related bits */
1293 1269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(window.innerWidth<window.innerHeight){
1294 1270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
// Must be set up before config view is...
1295 1271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Alignment of 'my' messages: right alignment is conventional
@@ -1399,16 +1375,11 @@
1399 1375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
},{
1400 1376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
label: "Timestamps in active users list",
1401 1377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
hint: "Whether to show last-message timestamps.",
1402 1378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
boolValue: 'active-user-list-timestamps'
1403 1379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
},
1404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- namedOptions.activeUsers,{
1405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- label: "Hide file attachment widget",
1406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- boolValue: "hide-attachment-widget",
1407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- hint: "Hides the file attachment widget, gaining more "+
1408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "screen space for messages."
1409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }];
1380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ namedOptions.activeUsers];
1410 1381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1411 1382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/** Set up selection list of notification sounds. */
1412 1383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(1){
1413 1384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const selectSound = D.select();
1414 1385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
D.option(selectSound, "", "(no audio)");
@@ -1530,15 +1501,10 @@
1530 1501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Chat.settings.addListener('edit-compact-mode',function(s){
1531 1502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Chat.e.inputLine.classList[
1532 1503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
s.value ? 'add' : 'remove'
1533 1504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
]('compact');
1534 1505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
});
1535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Chat.settings.addListener('hide-attachment-widget',function(s){
1536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Chat.e.fileSelectWrapper.classList[
1537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- s.value ? 'add' : 'remove'
1538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ]('hidden');
1539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- });
1540 1506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Chat.settings.addListener('edit-ctrl-send',function(s){
1541 1507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const label = (s.value ? "Ctrl-" : "")+"Enter submits messages.";
1542 1508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const eInput = Chat.inputElement();
1543 1509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
eInput.dataset.placeholder = eInput.dataset.placeholder0 + " " +label;
1544 1510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Chat.e.btnSubmit.title = label;
1545 1511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!