1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
(function(){
const form = document.querySelector('#chat-form');
let mxMsg = -50;
if( window.fossilChatInitSize ) mxMsg = -window.fossilChatInitSize;
const F = window.fossil, D = F.dom;
const _me = F.user.name;
/* State for paste and drag/drop */
const BlobXferState = {
dropDetails: document.querySelector('#chat-drop-details'),
blob: undefined
};
/** Updates the paste/drop zone with details of the pasted/dropped
data. */
const updateDropZoneContent = function(blob){
const bx = BlobXferState, dd = bx.dropDetails;
bx.blob = blob;
D.clearElement(dd);
if(!blob){
form.file.value = '';
return;
|
|
>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
(function(){
const form = document.querySelector('#chat-form');
let mxMsg = -50;
if( window.fossilChatInitSize ) mxMsg = -window.fossilChatInitSize;
const F = window.fossil, D = F.dom;
const _me = F.user.name;
/* State for paste and drag/drop */
const BlobXferState = {
dropDetails: document.querySelector('#chat-drop-details'),
blob: undefined
};
/** Updates the paste/drop zone with details of the pasted/dropped
data. The argument must be a Blob or Blob-like object (File) or
it can be falsy to reset/clear that state.*/
const updateDropZoneContent = function(blob){
const bx = BlobXferState, dd = bx.dropDetails;
bx.blob = blob;
D.clearElement(dd);
if(!blob){
form.file.value = '';
return;
|
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
item = items[0];
if(!item || !item.type) return;
//console.debug("pasted item =",item);
if('file'===item.kind){
updateDropZoneContent(false/*clear prev state*/);
updateDropZoneContent(items[0].getAsFile());
}else if(false && 'string'===item.kind){
/* ----^^^^^ disabled for now:
The intent here is that if form.msg is not active, populate
it with this text, but whether populating it from ctrl-v when
it does not have focus is a feature or a bug is debatable.
*/
if(document.activeElement !== form.msg){
/* Overwrite input field if it DOES NOT have focus,
otherwise let it do its own paste handling. */
item.getAsString((v)=>form.msg.value = v);
}
}
};
if(true){/* Add help button for drag/drop/paste zone */
const help = D.div();
form.file.parentNode.insertBefore(help, form.file);
F.helpButtonlets.create(
help,
"Select a file to upload, drag/drop a file into this spot, ",
"or paste an image from the clipboard if supported by ",
"your environment."
);
}
////////////////////////////////////////////////////////////
// File drag/drop visual notification.
const dropHighlight = form.file /* target zone */;
const dropEvents = {
drop: function(ev){
|
|
<
|
|
|
<
>
<
|
|
|
<
<
<
>
|
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
item = items[0];
if(!item || !item.type) return;
//console.debug("pasted item =",item);
if('file'===item.kind){
updateDropZoneContent(false/*clear prev state*/);
updateDropZoneContent(items[0].getAsFile());
}else if(false && 'string'===item.kind){
/* ----^^^^^ disabled for now: the intent here is that if
form.msg is not active, populate it with this text, but
whether populating it from ctrl-v when it does not have focus
is a feature or a bug is debatable. It seems useful but may
violate the Principle of Least Surprise. */
if(document.activeElement !== form.msg){
/* Overwrite input field if it DOES NOT have focus,
otherwise let it do its own paste handling. */
item.getAsString((v)=>form.msg.value = v);
}
}
};
if(true){/* Add help button for drag/drop/paste zone */
form.file.parentNode.insertBefore(
F.helpButtonlets.create(
document.querySelector('#chat-input-file-area .help-buttonlet')
), form.file
);
}
////////////////////////////////////////////////////////////
// File drag/drop visual notification.
const dropHighlight = form.file /* target zone */;
const dropEvents = {
drop: function(ev){
|