From 236ecec0b0abed389bda9aedae0dae708c937002 Mon Sep 17 00:00:00 2001 From: Vinoth Kannan Date: Fri, 15 Dec 2017 16:40:40 +0530 Subject: [PATCH] Skip HTML pasting if image upload available --- .../discourse/components/composer-editor.js.es6 | 4 ++-- .../discourse/components/d-editor.js.es6 | 10 +++++----- .../javascripts/discourse/lib/utilities.js.es6 | 13 +++++++++++-- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/app/assets/javascripts/discourse/components/composer-editor.js.es6 b/app/assets/javascripts/discourse/components/composer-editor.js.es6 index 0388c7d3965..715cfb95e0d 100644 --- a/app/assets/javascripts/discourse/components/composer-editor.js.es6 +++ b/app/assets/javascripts/discourse/components/composer-editor.js.es6 @@ -432,9 +432,9 @@ export default Ember.Component.extend({ return; } - const { types } = clipboardData(e); + const { types, canUpload, canPasteHtml } = clipboardData(e, true); - if (types.includes("text/plain") || (types.includes("text/html") && this.siteSettings.enable_rich_text_paste)) { + if (!canUpload || canPasteHtml) { e.preventDefault(); } }); diff --git a/app/assets/javascripts/discourse/components/d-editor.js.es6 b/app/assets/javascripts/discourse/components/d-editor.js.es6 index e36329ff499..957abee25eb 100644 --- a/app/assets/javascripts/discourse/components/d-editor.js.es6 +++ b/app/assets/javascripts/discourse/components/d-editor.js.es6 @@ -655,7 +655,9 @@ export default Ember.Component.extend({ return; } - const { clipboard, types } = clipboardData(e); + const isComposer = $("#reply-control .d-editor-input").is(":focus"); + const { clipboard, canPasteHtml } = clipboardData(e, isComposer); + let plainText = clipboard.getData("text/plain"); let html = clipboard.getData("text/html"); let handled = false; @@ -671,7 +673,7 @@ export default Ember.Component.extend({ } } - if (this.siteSettings.enable_rich_text_paste && html && !handled) { + if (canPasteHtml && !handled) { const markdown = toMarkdown(html); if (!plainText || plainText.length < markdown.length) { @@ -680,9 +682,7 @@ export default Ember.Component.extend({ } } - const uploadFiles = types.includes("Files") && !plainText && !handled; - - if (handled || uploadFiles) { + if (handled) { e.preventDefault(); } }, diff --git a/app/assets/javascripts/discourse/lib/utilities.js.es6 b/app/assets/javascripts/discourse/lib/utilities.js.es6 index c79d47591e2..718257671e3 100644 --- a/app/assets/javascripts/discourse/lib/utilities.js.es6 +++ b/app/assets/javascripts/discourse/lib/utilities.js.es6 @@ -421,18 +421,27 @@ export function isAppleDevice() { !navigator.userAgent.match(/Trident/g); } -export function clipboardData(e) { +export function clipboardData(e, canUpload) { const clipboard = e.clipboardData || e.originalEvent.clipboardData || e.delegatedEvent.originalEvent.clipboardData; let types = clipboard.types; + let files = clipboard.files; if (!Array.isArray(types)) { types = Array.from(types); } - return { clipboard: clipboard, types: types }; + if (!Array.isArray(files)) { + files = Array.from(files); + } + + canUpload = files && canUpload && !types.includes("text/plain"); + const canUploadImage = canUpload && files.filter(f => f.type.match('^image/'))[0]; + const canPasteHtml = Discourse.SiteSettings.enable_rich_text_paste && types.includes("text/html") && !canUploadImage; + + return { clipboard: clipboard, types: types, canUpload: canUpload, canPasteHtml: canPasteHtml }; } // This prevents a mini racer crash