diff --git a/src/config.js b/src/config.js index e8b2739b1..847e1ed72 100644 --- a/src/config.js +++ b/src/config.js @@ -75,7 +75,6 @@ require.config({ "converse-dragresize": "src/converse-dragresize", "converse-fullscreen": "src/converse-fullscreen", "converse-headline": "src/converse-headline", - "converse-http-file-upload":"src/converse-http-file-upload", "converse-mam": "src/converse-mam", "converse-message-view": "src/converse-message-view", "converse-minimize": "src/converse-minimize", diff --git a/src/converse-chatview.js b/src/converse-chatview.js index 8723690c1..2dd248775 100644 --- a/src/converse-chatview.js +++ b/src/converse-chatview.js @@ -20,11 +20,11 @@ "tpl!help_message", "tpl!info", "tpl!new_day", + "tpl!toolbar_fileupload", "tpl!spinner", "tpl!spoiler_button", "tpl!status_message", "tpl!toolbar", - "converse-http-file-upload", "converse-chatboxes", "converse-message-view" ], factory); @@ -43,6 +43,7 @@ tpl_help_message, tpl_info, tpl_new_day, + tpl_toolbar_fileupload, tpl_spinner, tpl_spoiler_button, tpl_status_message, @@ -240,15 +241,17 @@ is_chatroom: false, // Leaky abstraction from MUC events: { + 'change input.fileupload': 'onFileSelection', 'click .close-chatbox-button': 'close', 'click .new-msgs-indicator': 'viewUnreadMessages', 'click .send-button': 'onFormSubmitted', 'click .toggle-call': 'toggleCall', 'click .toggle-clear': 'clearMessages', + 'click .toggle-compose-spoiler': 'toggleComposeSpoilerMessage', 'click .toggle-smiley ul.emoji-picker li': 'insertEmoji', 'click .toggle-smiley': 'toggleEmojiMenu', 'click .toggle-spoiler': 'toggleSpoilerMessage', - 'click .toggle-compose-spoiler': 'toggleComposeSpoilerMessage', + 'click .upload-file': 'toggleFileUpload', 'keypress .chat-textarea': 'keyPressed' }, @@ -296,6 +299,7 @@ ); this.el.querySelector('.chat-toolbar').innerHTML = toolbar(options); this.addSpoilerButton(options); + this.addFileUploadButton(); this.insertEmojiPicker(); return this; }, @@ -322,6 +326,22 @@ this.renderToolbar(); }, + toggleFileUpload (ev) { + this.el.querySelector('input.fileupload').click(); + }, + + onFileSelection (evt) { + this.model.sendFiles(evt.target.files); + }, + + addFileUploadButton (options) { + _converse.api.disco.supports(Strophe.NS.HTTPUPLOAD, _converse.domain).then((result) => { + this.el.querySelector('.chat-toolbar').insertAdjacentHTML( + 'beforeend', + tpl_toolbar_fileupload({'tooltip_upload_file': __('Choose a file to send')})); + }); + }, + addSpoilerButton (options) { /* Asynchronously adds a button for writing spoiler * messages, based on whether the contact's client supports diff --git a/src/converse-core.js b/src/converse-core.js index 5780e86ba..d6e838c77 100644 --- a/src/converse-core.js +++ b/src/converse-core.js @@ -38,6 +38,7 @@ Strophe.addNamespace('DELAY', 'urn:xmpp:delay'); Strophe.addNamespace('FORWARD', 'urn:xmpp:forward:0'); Strophe.addNamespace('HINTS', 'urn:xmpp:hints'); + Strophe.addNamespace('HTTPUPLOAD', 'urn:xmpp:http:upload:0'); Strophe.addNamespace('MAM', 'urn:xmpp:mam:2'); Strophe.addNamespace('NICK', 'http://jabber.org/protocol/nick'); Strophe.addNamespace('PUBSUB', 'http://jabber.org/protocol/pubsub'); diff --git a/src/converse-http-file-upload.js b/src/converse-http-file-upload.js deleted file mode 100644 index 0118b573e..000000000 --- a/src/converse-http-file-upload.js +++ /dev/null @@ -1,74 +0,0 @@ -/** - * Adds Support for Http File Upload (XEP-0363) - * - */ -(function (root, factory) { - define([ - "converse-core", - "tpl!toolbar_fileupload" - ], factory); -}(this, function (converse, tpl_toolbar_fileupload) { - "use strict"; - - const { Promise, Strophe, _ } = converse.env; - const u = converse.env.utils; - - Strophe.addNamespace('HTTPUPLOAD', 'urn:xmpp:http:upload:0'); - - converse.plugins.add('converse-http-file-upload', { - /* Plugin dependencies are other plugins which might be - * overridden or relied upon, and therefore need to be loaded before - * this plugin. - * - * If the setting "strict_plugin_dependencies" is set to true, - * an error will be raised if the plugin is not found. By default it's - * false, which means these plugins are only loaded opportunistically. - * - * NB: These plugins need to have already been loaded via require.js. - */ - dependencies: ["converse-chatboxes", "converse-chatview", "converse-muc-views"], - - overrides: { - ChatBoxView: { - events: { - 'click .upload-file': 'toggleFileUpload', - 'change input.fileupload': 'onFileSelection' - }, - - toggleFileUpload (ev) { - this.el.querySelector('input.fileupload').click(); - }, - - onFileSelection (evt) { - this.model.sendFiles(evt.target.files); - }, - - addFileUploadButton (options) { - const { __ } = this.__super__._converse; - this.el.querySelector('.chat-toolbar').insertAdjacentHTML( - 'beforeend', - tpl_toolbar_fileupload({'tooltip_upload_file': __('Choose a file to send')})); - }, - - renderToolbar (toolbar, options) { - const { _converse } = this.__super__; - const result = this.__super__.renderToolbar.apply(this, arguments); - _converse.api.disco.supports(Strophe.NS.HTTPUPLOAD, _converse.domain).then((result) => { - if (result.length) { - this.addFileUploadButton(); - } - }); - return result; - } - }, - - ChatRoomView: { - events: { - 'click .upload-file': 'toggleFileUpload', - 'change .input.fileupload': 'onFileSelection' - } - } - } - }); - return converse; -})); diff --git a/src/converse-message-view.js b/src/converse-message-view.js index d5b27007c..0a710b02d 100644 --- a/src/converse-message-view.js +++ b/src/converse-message-view.js @@ -3,15 +3,15 @@ // // Copyright (c) 2012-2018, the Converse.js developers // Licensed under the Mozilla Public License (MPLv2) -// + (function (root, factory) { define([ - "converse-core", - "xss", - "emojione", - "tpl!action", - "tpl!message", - "tpl!spoiler_message" + "converse-core", + "xss", + "emojione", + "tpl!action", + "tpl!message", + "tpl!spoiler_message" ], factory); }(this, function ( converse, diff --git a/src/converse-muc-views.js b/src/converse-muc-views.js index 4bea6aa6a..c25531200 100644 --- a/src/converse-muc-views.js +++ b/src/converse-muc-views.js @@ -497,17 +497,19 @@ className: 'chatbox chatroom hidden', is_chatroom: true, events: { + 'change .input.fileupload': 'onFileSelection', 'click .close-chatbox-button': 'close', 'click .configure-chatroom-button': 'getAndRenderConfigurationForm', - 'click .toggle-smiley': 'toggleEmojiMenu', - 'click .toggle-smiley ul.emoji-picker li': 'insertEmoji', - 'click .toggle-clear': 'clearChatRoomMessages', - 'click .toggle-call': 'toggleCall', - 'click .toggle-occupants': 'toggleOccupants', 'click .new-msgs-indicator': 'viewUnreadMessages', 'click .occupant': 'onOccupantClicked', - 'keypress .chat-textarea': 'keyPressed', - 'click .send-button': 'onFormSubmitted' + 'click .send-button': 'onFormSubmitted', + 'click .toggle-call': 'toggleCall', + 'click .toggle-clear': 'clearChatRoomMessages', + 'click .toggle-occupants': 'toggleOccupants', + 'click .toggle-smiley ul.emoji-picker li': 'insertEmoji', + 'click .toggle-smiley': 'toggleEmojiMenu', + 'click .upload-file': 'toggleFileUpload', + 'keypress .chat-textarea': 'keyPressed' }, initialize () { diff --git a/src/converse-otr.js b/src/converse-otr.js index 7c30bdc4e..a576662c7 100644 --- a/src/converse-otr.js +++ b/src/converse-otr.js @@ -10,10 +10,11 @@ * encryption of one-on-one chat messages. */ (function (root, factory) { - define([ "converse-chatview", - "bootstrap", - "tpl!toolbar_otr", - 'otr' + define([ + "converse-chatview", + "bootstrap", + "tpl!toolbar_otr", + 'otr' ], factory); }(this, function (converse, bootstrap, tpl_toolbar_otr, otr) { "use strict"; diff --git a/src/converse.js b/src/converse.js index bc44d6f4b..08344fcf0 100644 --- a/src/converse.js +++ b/src/converse.js @@ -13,7 +13,6 @@ if (typeof define !== 'undefined') { "converse-dragresize", // Allows chat boxes to be resized by dragging them "converse-fullscreen", "converse-headline", // Support for headline messages - "converse-http-file-upload",// Support for XEP-0363 "converse-mam", // XEP-0313 Message Archive Management "converse-minimize", // Allows chat boxes to be minimized "converse-muc", // XEP-0045 Multi-user chat