diff options
author | wxiaoguang <wxiaoguang@gmail.com> | 2023-04-03 18:06:57 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-03 18:06:57 +0800 |
commit | 5cc0801de90d16b4d528e62de11c9b525be5d122 (patch) | |
tree | 7deaaa2ec388cd91b6b072783d2e4524ef9be263 /web_src/js/features/comp/ImagePaste.js | |
parent | d67e40684f43b0eb744cad26e0265002f033dbc3 (diff) | |
download | gitea-5cc0801de90d16b4d528e62de11c9b525be5d122.tar.gz gitea-5cc0801de90d16b4d528e62de11c9b525be5d122.zip |
Introduce GitHub markdown editor, keep EasyMDE as fallback (#23876)
The first step of the plan
* #23290
Thanks to @silverwind for the first try in #15394 . Close #10729 and a
lot of related issues.
The EasyMDE is not removed, now it works as a fallback, users can switch
between these two editors.
Editor list:
* Issue / PR comment
* Issue / PR comment edit
* Issue / PR comment quote reply
* PR diff view, inline comment
* PR diff view, inline comment edit
* PR diff view, inline comment quote reply
* Release editor
* Wiki editor
Some editors have attached dropzone
Screenshots:
<details>
![image](https://user-images.githubusercontent.com/2114189/229363558-7e44dcd4-fb6d-48a0-92f8-bd12f57bb0a0.png)
![image](https://user-images.githubusercontent.com/2114189/229363566-781489c8-5306-4347-9714-d71af5d5b0b1.png)
![image](https://user-images.githubusercontent.com/2114189/229363771-1717bf5c-0f2a-4fc2-ba84-4f5b2a343a11.png)
![image](https://user-images.githubusercontent.com/2114189/229363793-ad362d0f-a045-47bd-8f9d-05a9a842bb39.png)
</details>
---------
Co-authored-by: silverwind <me@silverwind.io>
Diffstat (limited to 'web_src/js/features/comp/ImagePaste.js')
-rw-r--r-- | web_src/js/features/comp/ImagePaste.js | 47 |
1 files changed, 26 insertions, 21 deletions
diff --git a/web_src/js/features/comp/ImagePaste.js b/web_src/js/features/comp/ImagePaste.js index da41e7611a..9145b24062 100644 --- a/web_src/js/features/comp/ImagePaste.js +++ b/web_src/js/features/comp/ImagePaste.js @@ -88,38 +88,43 @@ class CodeMirrorEditor { } -export function initEasyMDEImagePaste(easyMDE, $dropzone) { +const uploadClipboardImage = async (editor, dropzone, e) => { + const $dropzone = $(dropzone); const uploadUrl = $dropzone.attr('data-upload-url'); const $files = $dropzone.find('.files'); if (!uploadUrl || !$files.length) return; - const uploadClipboardImage = async (editor, e) => { - const pastedImages = clipboardPastedImages(e); - if (!pastedImages || pastedImages.length === 0) { - return; - } - e.preventDefault(); - e.stopPropagation(); + const pastedImages = clipboardPastedImages(e); + if (!pastedImages || pastedImages.length === 0) { + return; + } + e.preventDefault(); + e.stopPropagation(); - for (const img of pastedImages) { - const name = img.name.slice(0, img.name.lastIndexOf('.')); + for (const img of pastedImages) { + const name = img.name.slice(0, img.name.lastIndexOf('.')); - const placeholder = `![${name}](uploading ...)`; - editor.insertPlaceholder(placeholder); - const data = await uploadFile(img, uploadUrl); - editor.replacePlaceholder(placeholder, `![${name}](/attachments/${data.uuid})`); + const placeholder = `![${name}](uploading ...)`; + editor.insertPlaceholder(placeholder); + const data = await uploadFile(img, uploadUrl); + editor.replacePlaceholder(placeholder, `![${name}](/attachments/${data.uuid})`); - const $input = $(`<input name="files" type="hidden">`).attr('id', data.uuid).val(data.uuid); - $files.append($input); - } - }; + const $input = $(`<input name="files" type="hidden">`).attr('id', data.uuid).val(data.uuid); + $files.append($input); + } +}; +export function initEasyMDEImagePaste(easyMDE, dropzone) { + if (!dropzone) return; easyMDE.codemirror.on('paste', async (_, e) => { - return uploadClipboardImage(new CodeMirrorEditor(easyMDE.codemirror), e); + return uploadClipboardImage(new CodeMirrorEditor(easyMDE.codemirror), dropzone, e); }); +} - $(easyMDE.element).on('paste', async (e) => { - return uploadClipboardImage(new TextareaEditor(easyMDE.element), e.originalEvent); +export function initTextareaImagePaste(textarea, dropzone) { + if (!dropzone) return; + $(textarea).on('paste', async (e) => { + return uploadClipboardImage(new TextareaEditor(textarea), dropzone, e.originalEvent); }); } |