From 55502265716f000a2c61c98fa093244e1310d97f Mon Sep 17 00:00:00 2001 From: silverwind Date: Sun, 1 Sep 2024 17:15:29 +0200 Subject: [PATCH] Improve textarea paste (#31948) - When pasting a URL over another URL, replace the URL instead of creating a useless `[url](url)`. This is the 1-line change [here](https://github.com/go-gitea/gitea/pull/31948/files#diff-be8e94d7e3da33b187381f53d28095107bd0cf29ae9a9e997e4f422f4a54479cR122). - Always run `initTextareaEvents`, previously it was not run when `dropzoneEl` was not present like when attachements are disabled on the server. Refactored the function to gracefully handle absent `dropzoneEl` and rename the function to a better name. --- web_src/js/features/comp/ComboMarkdownEditor.ts | 6 ++---- web_src/js/features/comp/EditorUpload.ts | 8 ++++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/web_src/js/features/comp/ComboMarkdownEditor.ts b/web_src/js/features/comp/ComboMarkdownEditor.ts index 69fe34269b..5f1807f373 100644 --- a/web_src/js/features/comp/ComboMarkdownEditor.ts +++ b/web_src/js/features/comp/ComboMarkdownEditor.ts @@ -3,7 +3,7 @@ import '@github/text-expander-element'; import $ from 'jquery'; import {attachTribute} from '../tribute.ts'; import {hideElem, showElem, autosize, isElemVisible} from '../../utils/dom.ts'; -import {initEasyMDEPaste, initTextareaUpload} from './EditorUpload.ts'; +import {initEasyMDEPaste, initTextareaEvents} from './EditorUpload.ts'; import {handleGlobalEnterQuickSubmit} from './QuickSubmit.ts'; import {renderPreviewPanelContent} from '../repo-editor.ts'; import {easyMDEToolbarActions} from './EasyMDEToolbarActions.ts'; @@ -110,9 +110,7 @@ class ComboMarkdownEditor { }); initTextareaMarkdown(this.textarea); - if (this.dropzone) { - initTextareaUpload(this.textarea, this.dropzone); - } + initTextareaEvents(this.textarea, this.dropzone); } async setupDropzone() { diff --git a/web_src/js/features/comp/EditorUpload.ts b/web_src/js/features/comp/EditorUpload.ts index e572692cbf..4cc031e5c8 100644 --- a/web_src/js/features/comp/EditorUpload.ts +++ b/web_src/js/features/comp/EditorUpload.ts @@ -119,7 +119,7 @@ function handleClipboardText(textarea, e, {text, isShiftDown}) { const {value, selectionStart, selectionEnd} = textarea; const selectedText = value.substring(selectionStart, selectionEnd); const trimmedText = text.trim(); - if (selectedText && isUrl(trimmedText)) { + if (selectedText && isUrl(trimmedText) && !isUrl(selectedText)) { e.preventDefault(); replaceTextareaSelection(textarea, `[${selectedText}](${trimmedText})`); } @@ -156,7 +156,7 @@ export function initEasyMDEPaste(easyMDE, dropzoneEl) { }); } -export function initTextareaUpload(textarea, dropzoneEl) { +export function initTextareaEvents(textarea, dropzoneEl) { let isShiftDown = false; textarea.addEventListener('keydown', (e) => { if (e.shiftKey) isShiftDown = true; @@ -166,7 +166,7 @@ export function initTextareaUpload(textarea, dropzoneEl) { }); textarea.addEventListener('paste', (e) => { const {images, text} = getPastedContent(e); - if (images.length) { + if (images.length && dropzoneEl) { handleUploadFiles(new TextareaEditor(textarea), dropzoneEl, images, e); } else if (text) { handleClipboardText(textarea, e, {text, isShiftDown}); @@ -176,7 +176,7 @@ export function initTextareaUpload(textarea, dropzoneEl) { if (!e.dataTransfer.files.length) return; handleUploadFiles(new TextareaEditor(textarea), dropzoneEl, e.dataTransfer.files, e); }); - dropzoneEl.dropzone.on(DropzoneCustomEventRemovedFile, ({fileUuid}) => { + dropzoneEl?.dropzone.on(DropzoneCustomEventRemovedFile, ({fileUuid}) => { const newText = removeAttachmentLinksFromMarkdown(textarea.value, fileUuid); if (textarea.value !== newText) textarea.value = newText; });