ソースを参照

Upload files on drag-and-drop.

Fixes #1188.
Emmanuel Gil Peyrot 6 年 前
コミット
0d4603d80d
2 ファイル変更33 行追加2 行削除
  1. 16 1
      dist/converse.js
  2. 17 1
      src/converse-chatview.js

+ 16 - 1
dist/converse.js

@@ -59022,7 +59022,9 @@ _converse_headless_converse_core__WEBPACK_IMPORTED_MODULE_5__["default"].plugins
         'click .toggle-smiley': 'toggleEmojiMenu',
         'click .toggle-smiley': 'toggleEmojiMenu',
         'click .upload-file': 'toggleFileUpload',
         'click .upload-file': 'toggleFileUpload',
         'input .chat-textarea': 'inputChanged',
         'input .chat-textarea': 'inputChanged',
-        'keydown .chat-textarea': 'keyPressed'
+        'keydown .chat-textarea': 'keyPressed',
+        'dragover .chat-textarea': 'onDragOver',
+        'drop .chat-textarea': 'onDrop'
       },
       },
 
 
       initialize() {
       initialize() {
@@ -59128,6 +59130,19 @@ _converse_headless_converse_core__WEBPACK_IMPORTED_MODULE_5__["default"].plugins
         this.model.sendFiles(evt.target.files);
         this.model.sendFiles(evt.target.files);
       },
       },
 
 
+      onDragOver(evt) {
+        evt.preventDefault();
+      },
+
+      onDrop(evt) {
+        /* There are no files to be dropped, this isn’t a file transfer
+         * operation.
+         */
+        if (evt.dataTransfer.files.length == 0) return;
+        evt.preventDefault();
+        this.model.sendFiles(evt.dataTransfer.files);
+      },
+
       async addFileUploadButton(options) {
       async addFileUploadButton(options) {
         const result = await _converse.api.disco.supports(Strophe.NS.HTTPUPLOAD, _converse.domain);
         const result = await _converse.api.disco.supports(Strophe.NS.HTTPUPLOAD, _converse.domain);
 
 

+ 17 - 1
src/converse-chatview.js

@@ -296,7 +296,9 @@ converse.plugins.add('converse-chatview', {
                 'click .toggle-smiley': 'toggleEmojiMenu',
                 'click .toggle-smiley': 'toggleEmojiMenu',
                 'click .upload-file': 'toggleFileUpload',
                 'click .upload-file': 'toggleFileUpload',
                 'input .chat-textarea': 'inputChanged',
                 'input .chat-textarea': 'inputChanged',
-                'keydown .chat-textarea': 'keyPressed'
+                'keydown .chat-textarea': 'keyPressed',
+                'dragover .chat-textarea': 'onDragOver',
+                'drop .chat-textarea': 'onDrop',
             },
             },
 
 
             initialize () {
             initialize () {
@@ -398,6 +400,20 @@ converse.plugins.add('converse-chatview', {
                 this.model.sendFiles(evt.target.files);
                 this.model.sendFiles(evt.target.files);
             },
             },
 
 
+            onDragOver (evt) {
+                evt.preventDefault();
+            },
+
+            onDrop (evt) {
+                /* There are no files to be dropped, this isn’t a file transfer
+                 * operation.
+                 */
+                if (evt.dataTransfer.files.length == 0)
+                    return;
+                evt.preventDefault();
+                this.model.sendFiles(evt.dataTransfer.files);
+            },
+
             async addFileUploadButton (options) {
             async addFileUploadButton (options) {
                 const result = await _converse.api.disco.supports(Strophe.NS.HTTPUPLOAD, _converse.domain);
                 const result = await _converse.api.disco.supports(Strophe.NS.HTTPUPLOAD, _converse.domain);
                 if (result.length) {
                 if (result.length) {