Improve textarea paste

- Always initialize the paste code, previously it was not initialized
  when this.dropzone was not there which is the case when attachements
  are disabled on the server.
- When pasting a URL over another URL, replace the URL instead of
  creating a nested markdown link.
This commit is contained in:
silverwind 2024-08-30 15:25:58 +02:00
parent e5e40787dc
commit a2e54fe256
No known key found for this signature in database
GPG Key ID: 2E62B41C93869443
2 changed files with 6 additions and 8 deletions

View 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() {

View 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;
});