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:
parent
e4eaa68a2b
commit
c2fb27beb4
12 changed files with 144 additions and 29 deletions
|
@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue