aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsilverwind <me@silverwind.io>2023-05-16 06:45:36 +0200
committerGitHub <noreply@github.com>2023-05-16 04:45:36 +0000
commitbdd3007c879c190e4f632ff65c4b393d7374653e (patch)
tree4b7208ea4fdb264c0064ee93aa00770a373d3d93
parentb926f96da777baf3a0e61fd6e6e19cb969cb0780 (diff)
downloadgitea-bdd3007c879c190e4f632ff65c4b393d7374653e.tar.gz
gitea-bdd3007c879c190e4f632ff65c4b393d7374653e.zip
Fix WEBP image copying (#24743)
Fix regression from https://github.com/go-gitea/gitea/pull/23801, where I forgot that the new module will not throw, so the `catch` handlers were never triggered and in turn, the WEBP was not converted to PNG.
-rw-r--r--web_src/js/features/copycontent.js27
1 files changed, 11 insertions, 16 deletions
diff --git a/web_src/js/features/copycontent.js b/web_src/js/features/copycontent.js
index e51953625d..646fafeb0f 100644
--- a/web_src/js/features/copycontent.js
+++ b/web_src/js/features/copycontent.js
@@ -4,18 +4,14 @@ import {convertImage} from '../utils.js';
const {i18n} = window.config;
-async function doCopy(content, btn) {
- const success = await clippie(content);
- showTemporaryTooltip(btn, success ? i18n.copy_success : i18n.copy_error);
-}
-
export function initCopyContent() {
const btn = document.getElementById('copy-content');
if (!btn || btn.classList.contains('disabled')) return;
btn.addEventListener('click', async () => {
if (btn.classList.contains('is-loading')) return;
- let content, isImage;
+ let content;
+ let isRasterImage = false;
const link = btn.getAttribute('data-link');
// when data-link is present, we perform a fetch. this is either because
@@ -28,7 +24,7 @@ export function initCopyContent() {
const contentType = res.headers.get('content-type');
if (contentType.startsWith('image/') && !contentType.startsWith('image/svg')) {
- isImage = true;
+ isRasterImage = true;
content = await res.blob();
} else {
content = await res.text();
@@ -43,15 +39,14 @@ export function initCopyContent() {
content = Array.from(lineEls).map((el) => el.textContent).join('');
}
- try {
- await doCopy(content, btn);
- } catch {
- if (isImage) { // convert image to png as last-resort as some browser only support png copy
- try {
- await doCopy(await convertImage(content, 'image/png'), btn);
- } catch {
- showTemporaryTooltip(btn, i18n.copy_error);
- }
+ // try copy original first, if that fails and it's an image, convert it to png
+ const success = await clippie(content);
+ if (success) {
+ showTemporaryTooltip(btn, i18n.copy_success);
+ } else {
+ if (isRasterImage) {
+ const success = await clippie(await convertImage(content, 'image/png'));
+ showTemporaryTooltip(btn, success ? i18n.copy_success : i18n.copy_error);
} else {
showTemporaryTooltip(btn, i18n.copy_error);
}