From 79731735c0b2998b0165ae4d036b5bb4bb3d2591 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Wed, 25 Jan 2023 20:50:34 -0500 Subject: [PATCH] feat: allow file uploads on mobile chat closes https://github.com/NodeBB/NodeBB/issues/11217 --- public/src/client/chats.js | 2 ++ public/src/modules/chat.js | 1 + public/src/modules/uploadHelpers.js | 21 +++++++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/public/src/client/chats.js b/public/src/client/chats.js index 1c27176959..d5ee5b8589 100644 --- a/public/src/client/chats.js +++ b/public/src/client/chats.js @@ -74,6 +74,7 @@ define('forum/chats', [ dragDropAreaEl: $('.chats-full'), pasteEl: $('[component="chat/input"]'), uploadFormEl: $('[component="chat/upload"]'), + uploadBtnEl: $('[component="chat/upload/button"]'), inputEl: $('[component="chat/input"]'), }); @@ -87,6 +88,7 @@ define('forum/chats', [ dragDropAreaEl: options.dragDropAreaEl, pasteEl: options.pasteEl, uploadFormEl: options.uploadFormEl, + uploadBtnEl: options.uploadBtnEl, route: '/api/post/upload', // using same route as post uploads callback: function (uploads) { const inputEl = options.inputEl; diff --git a/public/src/modules/chat.js b/public/src/modules/chat.js index 80f22a9b24..bd33274fc3 100644 --- a/public/src/modules/chat.js +++ b/public/src/modules/chat.js @@ -304,6 +304,7 @@ define('chat', [ dragDropAreaEl: chatModal.find('.modal-content'), pasteEl: chatModal, uploadFormEl: chatModal.find('[component="chat/upload"]'), + uploadBtnEl: $('[component="chat/upload/button"]'), inputEl: chatModal.find('[component="chat/input"]'), }); diff --git a/public/src/modules/uploadHelpers.js b/public/src/modules/uploadHelpers.js index 46d08d96b8..e532054288 100644 --- a/public/src/modules/uploadHelpers.js +++ b/public/src/modules/uploadHelpers.js @@ -36,6 +36,27 @@ define('uploadHelpers', ['alerts'], function (alerts) { }, }); } + + if (options.uploadBtnEl) { + const fileInput = formEl.find('input[name="files[]"]'); + options.uploadBtnEl.on('click', function () { + fileInput.trigger('click'); + }); + fileInput.on('change', function (e) { + const files = (e.target || {}).files || + ($(this).val() ? [{ name: $(this).val(), type: utils.fileMimeType($(this).val()) }] : null); + if (files) { + uploadHelpers.ajaxSubmit({ + uploadForm: formEl, + upload: { + files: files, + fileNames: Array.from(files).map(f => f.name), + }, + callback: options.callback, + }); + } + }); + } }; uploadHelpers.handleDragDrop = function (options) {