From c9b8aab0e0adeec34926e5aa8c3c31bef0a39655 Mon Sep 17 00:00:00 2001 From: Richard Lewis Date: Sun, 3 Dec 2017 19:44:59 +0000 Subject: [PATCH] Workings for future posterity - Can't access iframe content from parent. iframe needs to initiate. Postmessage data up the stack. --- src/components/structures/RoomView.js | 3 +++ src/components/views/elements/AppTile.js | 22 +++++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js index 1fda05fb76..cf3320b607 100644 --- a/src/components/structures/RoomView.js +++ b/src/components/structures/RoomView.js @@ -468,6 +468,9 @@ module.exports = React.createClass({ unsentMessageError: this._getUnsentMessageError(this.state.room), }); break; + case 'picture_snapshot': + this.uploadFile(payload.file); + break; case 'notifier_enabled': case 'upload_failed': case 'upload_started': diff --git a/src/components/views/elements/AppTile.js b/src/components/views/elements/AppTile.js index db722bd66d..a0eb7efe52 100644 --- a/src/components/views/elements/AppTile.js +++ b/src/components/views/elements/AppTile.js @@ -32,6 +32,7 @@ import AppWarning from './AppWarning'; import MessageSpinner from './MessageSpinner'; import WidgetUtils from '../../../WidgetUtils'; import dis from '../../../dispatcher'; +import domtoimage from 'dom-to-image'; const ALLOWED_APP_URL_SCHEMES = ['https:', 'http:']; @@ -222,7 +223,14 @@ export default React.createClass({ }, _onSnapshotClick(e) { - console.log("Snapshot widget ID ", this.props.id); + const iframe = this.refs.appFrame; + domtoimage.toPng(iframe).then(function(dataUrl) { + console.log("Image data URL:", dataUrl); + dis.dispatch({ + action: 'picture_snapshot', + file: dataURLtoBlob(dataUrl), + }, true); + }); }, /* If user has permission to modify widgets, delete the widget, @@ -428,3 +436,15 @@ export default React.createClass({ ); }, }); + +function dataURLtoBlob(dataurl) { + const arr = dataurl.split(','); + const mime = arr[0].match(/:(.*?);/)[1]; + const bstr = atob(arr[1]); + let n = bstr.length; + const u8arr = new Uint8Array(n); + while (n--) { + u8arr[n] = bstr.charCodeAt(n); + } + return new Blob([u8arr], {type: mime}); +}