matrix-react-sdk
Version:
SDK for matrix.org using React
62 lines (57 loc) • 8.04 kB
JavaScript
;
/*
Copyright 2024 New Vector Ltd.
Copyright 2022 The Matrix.org Foundation C.I.C.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
Please see LICENSE files in the repository root for full details.
*/
let hasCalled = false;
function remoteRender(event) {
const data = event.data;
// If we're handling secondary calls, start from scratch
if (hasCalled) {
document.body.replaceWith(document.createElement("BODY"));
}
hasCalled = true;
const img = document.createElement("span"); // we'll mask it as an image
img.id = "img";
const a = document.createElement("a");
a.id = "a";
a.rel = "noreferrer noopener";
a.download = data.download;
// @ts-ignore
a.style = data.style;
a.style.fontFamily = "Arial, Helvetica, Sans-Serif";
a.href = window.URL.createObjectURL(data.blob);
a.appendChild(img);
a.appendChild(document.createTextNode(data.textContent));
// Apply image style after so we can steal the anchor's colour.
// Style copied from a rendered version of mx_MFileBody_download_icon
if (data.imgStyle) {
// @ts-ignore
img.style = data.imgStyle;
} else {
img.style.width = "20px";
img.style.height = "20px";
img.style.webkitMaskSize = "20px";
img.style.webkitMaskPosition = "center";
img.style.webkitMaskRepeat = "no-repeat";
img.style.display = "inline-block";
img.style.webkitMaskImage = `url('${data.imgSrc}')`;
img.style.backgroundColor = `${a.style.color}`;
}
const body = document.body;
// Don't display scrollbars if the link takes more than one line to display.
body.style.margin = "0px";
body.style.overflow = "hidden";
body.appendChild(a);
if (event.data.auto) {
a.click(); // try to trigger download automatically
}
}
window.onmessage = function (e) {
if (e.origin === window.location.origin) {
if (e.data.blob) remoteRender(e);
}
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJoYXNDYWxsZWQiLCJyZW1vdGVSZW5kZXIiLCJldmVudCIsImRhdGEiLCJkb2N1bWVudCIsImJvZHkiLCJyZXBsYWNlV2l0aCIsImNyZWF0ZUVsZW1lbnQiLCJpbWciLCJpZCIsImEiLCJyZWwiLCJkb3dubG9hZCIsInN0eWxlIiwiZm9udEZhbWlseSIsImhyZWYiLCJ3aW5kb3ciLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJibG9iIiwiYXBwZW5kQ2hpbGQiLCJjcmVhdGVUZXh0Tm9kZSIsInRleHRDb250ZW50IiwiaW1nU3R5bGUiLCJ3aWR0aCIsImhlaWdodCIsIndlYmtpdE1hc2tTaXplIiwid2Via2l0TWFza1Bvc2l0aW9uIiwid2Via2l0TWFza1JlcGVhdCIsImRpc3BsYXkiLCJ3ZWJraXRNYXNrSW1hZ2UiLCJpbWdTcmMiLCJiYWNrZ3JvdW5kQ29sb3IiLCJjb2xvciIsIm1hcmdpbiIsIm92ZXJmbG93IiwiYXV0byIsImNsaWNrIiwib25tZXNzYWdlIiwiZSIsIm9yaWdpbiIsImxvY2F0aW9uIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3VzZXJjb250ZW50L2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIyIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmxldCBoYXNDYWxsZWQgPSBmYWxzZTtcbmZ1bmN0aW9uIHJlbW90ZVJlbmRlcihldmVudDogTWVzc2FnZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgZGF0YSA9IGV2ZW50LmRhdGE7XG5cbiAgICAvLyBJZiB3ZSdyZSBoYW5kbGluZyBzZWNvbmRhcnkgY2FsbHMsIHN0YXJ0IGZyb20gc2NyYXRjaFxuICAgIGlmIChoYXNDYWxsZWQpIHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZXBsYWNlV2l0aChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiQk9EWVwiKSk7XG4gICAgfVxuICAgIGhhc0NhbGxlZCA9IHRydWU7XG5cbiAgICBjb25zdCBpbWc6IEhUTUxTcGFuRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpOyAvLyB3ZSdsbCBtYXNrIGl0IGFzIGFuIGltYWdlXG4gICAgaW1nLmlkID0gXCJpbWdcIjtcblxuICAgIGNvbnN0IGE6IEhUTUxBbmNob3JFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XG4gICAgYS5pZCA9IFwiYVwiO1xuICAgIGEucmVsID0gXCJub3JlZmVycmVyIG5vb3BlbmVyXCI7XG4gICAgYS5kb3dubG9hZCA9IGRhdGEuZG93bmxvYWQ7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGEuc3R5bGUgPSBkYXRhLnN0eWxlO1xuICAgIGEuc3R5bGUuZm9udEZhbWlseSA9IFwiQXJpYWwsIEhlbHZldGljYSwgU2Fucy1TZXJpZlwiO1xuICAgIGEuaHJlZiA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGRhdGEuYmxvYik7XG4gICAgYS5hcHBlbmRDaGlsZChpbWcpO1xuICAgIGEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZGF0YS50ZXh0Q29udGVudCkpO1xuXG4gICAgLy8gQXBwbHkgaW1hZ2Ugc3R5bGUgYWZ0ZXIgc28gd2UgY2FuIHN0ZWFsIHRoZSBhbmNob3IncyBjb2xvdXIuXG4gICAgLy8gU3R5bGUgY29waWVkIGZyb20gYSByZW5kZXJlZCB2ZXJzaW9uIG9mIG14X01GaWxlQm9keV9kb3dubG9hZF9pY29uXG4gICAgaWYgKGRhdGEuaW1nU3R5bGUpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpbWcuc3R5bGUgPSBkYXRhLmltZ1N0eWxlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGltZy5zdHlsZS53aWR0aCA9IFwiMjBweFwiO1xuICAgICAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gXCIyMHB4XCI7XG4gICAgICAgIGltZy5zdHlsZS53ZWJraXRNYXNrU2l6ZSA9IFwiMjBweFwiO1xuICAgICAgICBpbWcuc3R5bGUud2Via2l0TWFza1Bvc2l0aW9uID0gXCJjZW50ZXJcIjtcbiAgICAgICAgaW1nLnN0eWxlLndlYmtpdE1hc2tSZXBlYXQgPSBcIm5vLXJlcGVhdFwiO1xuICAgICAgICBpbWcuc3R5bGUuZGlzcGxheSA9IFwiaW5saW5lLWJsb2NrXCI7XG4gICAgICAgIGltZy5zdHlsZS53ZWJraXRNYXNrSW1hZ2UgPSBgdXJsKCcke2RhdGEuaW1nU3JjfScpYDtcbiAgICAgICAgaW1nLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGAke2Euc3R5bGUuY29sb3J9YDtcbiAgICB9XG5cbiAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQuYm9keTtcbiAgICAvLyBEb24ndCBkaXNwbGF5IHNjcm9sbGJhcnMgaWYgdGhlIGxpbmsgdGFrZXMgbW9yZSB0aGFuIG9uZSBsaW5lIHRvIGRpc3BsYXkuXG4gICAgYm9keS5zdHlsZS5tYXJnaW4gPSBcIjBweFwiO1xuICAgIGJvZHkuc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xuICAgIGJvZHkuYXBwZW5kQ2hpbGQoYSk7XG5cbiAgICBpZiAoZXZlbnQuZGF0YS5hdXRvKSB7XG4gICAgICAgIGEuY2xpY2soKTsgLy8gdHJ5IHRvIHRyaWdnZXIgZG93bmxvYWQgYXV0b21hdGljYWxseVxuICAgIH1cbn1cblxud2luZG93Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChlOiBNZXNzYWdlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZS5vcmlnaW4gPT09IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pIHtcbiAgICAgICAgaWYgKGUuZGF0YS5ibG9iKSByZW1vdGVSZW5kZXIoZSk7XG4gICAgfVxufTtcbiJdLCJt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