1
0
Fork 0
forked from forgejo/forgejo

Improvements for Content Copy (#21842)

It now supports copying Markdown, SVG and Images (not in Firefox
currently because of lacking
[`ClipboardItem`](https://developer.mozilla.org/en-US/docs/Web/API/ClipboardItem)
support, but can be enabled in `about:config` and works). It will fetch
the data if in a rendered view or when it's an image.

Followup to https://github.com/go-gitea/gitea/pull/21629.
This commit is contained in:
silverwind 2022-11-21 10:59:42 +01:00 committed by GitHub
parent e4eaa68a2b
commit c2fb27beb4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 144 additions and 29 deletions

View file

@ -85,3 +85,51 @@ export function translateMonth(month) {
export function translateDay(day) {
return new Date(Date.UTC(2022, 7, day)).toLocaleString(getCurrentLocale(), {weekday: 'short'});
}
// convert a Blob to a DataURI
export function blobToDataURI(blob) {
return new Promise((resolve, reject) => {
try {
const reader = new FileReader();
reader.addEventListener('load', (e) => {
resolve(e.target.result);
});
reader.addEventListener('error', () => {
reject(new Error('FileReader failed'));
});
reader.readAsDataURL(blob);
} catch (err) {
reject(err);
}
});
}
// convert image Blob to another mime-type format.
export function convertImage(blob, mime) {
return new Promise(async (resolve, reject) => {
try {
const img = new Image();
const canvas = document.createElement('canvas');
img.addEventListener('load', () => {
try {
canvas.width = img.naturalWidth;
canvas.height = img.naturalHeight;
const context = canvas.getContext('2d');
context.drawImage(img, 0, 0);
canvas.toBlob((blob) => {
if (!(blob instanceof Blob)) return reject(new Error('imageBlobToPng failed'));
resolve(blob);
}, mime);
} catch (err) {
reject(err);
}
});
img.addEventListener('error', () => {
reject(new Error('imageBlobToPng failed'));
});
img.src = await blobToDataURI(blob);
} catch (err) {
reject(err);
}
});
}