]> source.dussan.org Git - gitea.git/commitdiff
Improve textarea paste (#31948)
authorsilverwind <me@silverwind.io>
Sun, 1 Sep 2024 15:15:29 +0000 (17:15 +0200)
committerGitHub <noreply@github.com>
Sun, 1 Sep 2024 15:15:29 +0000 (15:15 +0000)
- 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
web_src/js/features/comp/EditorUpload.ts

index 69fe34269b30f1f7052452765a4ba99476896834..5f1807f3733ad32cda8d75dace32b713cebeafe5 100644 (file)
@@ -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() {
index e572692cbfd61c9e1592bd3d3bd6468c8c508a9f..4cc031e5c818d322ea5f6ddeeb97a8e1628d5438 100644 (file)
@@ -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;
   });