Minimální Matrix chatovací klient Matrix, zaměřený na výkon, offline funkčnost a širokou podporu prohlížeče. Na tom se stále pracuje a ještě není připraveno na hlavní vysílací čas. Hlášení o chybách jsou vítána, ale nezadávejte prosím žádné požadavky na funkce ani jiné chybějící věci, abyste byli na stejné úrovni jako Element Web.
47 lines
1.6 KiB
HTML
47 lines
1.6 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
</head>
|
|
<body>
|
|
<a id="link" href="#">Download</a>
|
|
<script type="text/javascript">
|
|
var link = document.getElementById("link");
|
|
|
|
function downloadBlob(blob, filename) {
|
|
var url = URL.createObjectURL(blob);
|
|
link.href = url;
|
|
link.download = filename;
|
|
link.click();
|
|
URL.revokeObjectURL(url);
|
|
}
|
|
|
|
function toBase64(buffer) {
|
|
const bytes = new Uint8Array(buffer);
|
|
let binaryStr = "";
|
|
for (let i = 0; i < bytes.byteLength; i++) {
|
|
binaryStr += String.fromCharCode(bytes[i]);
|
|
}
|
|
return btoa(binaryStr);
|
|
}
|
|
|
|
function downloadBuffer(buffer, mimeType, filename) {
|
|
var url = "data:" + mimeType + ";base64," + toBase64(buffer);
|
|
link.href = url;
|
|
link.download = filename;
|
|
link.click();
|
|
}
|
|
|
|
window.addEventListener("message", async function(event) {
|
|
if (event.origin === window.location.origin) {
|
|
if (event.data.type === "downloadBuffer") {
|
|
await downloadBuffer(event.data.buffer, event.data.mimeType, event.data.filename);
|
|
} else if (event.data.type === "downloadBlob") {
|
|
await downloadBlob(event.data.blob, event.data.filename);
|
|
}
|
|
}
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|