diff --git a/js/src/standalone.js b/js/src/standalone.js index e74d3156..e762487c 100644 --- a/js/src/standalone.js +++ b/js/src/standalone.js @@ -1,11 +1,17 @@ const msgpack = require('msgpack-lite'); -const pako = require('pako'); +const fflate = require('fflate'); const TFEdit = require('./transferFunctionEditor'); +const serialize = require('./core/lib/helpers/serialize'); const K3D = require('./core/Core'); const ThreeJsProvider = require('./providers/threejs/provider'); const MsgpackCodec = msgpack.createCodec({ preset: true }); +window.Float16Array = require('./core/lib/helpers/float16Array'); + +MsgpackCodec.addExtPacker(0x20, Float16Array, (val) => val); +MsgpackCodec.addExtUnpacker(0x20, (val) => Float16Array(val.buffer)); + require('katex/dist/katex.min.css'); require('dat.gui/build/dat.gui.css'); @@ -14,37 +20,45 @@ function msgpackDecode(data) { } function CreateK3DAndLoadBinarySnapshot(data, targetDOMNode) { - let K3DInstance; - - data = pako.inflate(data); - data = msgpackDecode(data); - - try { - K3DInstance = new K3D( - ThreeJsProvider, - targetDOMNode, - data.plot, - ); - } catch (e) { - console.log(e); - return null; - } - - return K3DInstance.setSnapshot(data).then(() => { - setTimeout(() => { - if (data.plot.camera.length > 0) { - K3DInstance.setCamera(data.plot.camera); - K3DInstance.render(); + return new Promise((resolve, reject) => { + let K3DInstance; + + fflate.unzlib(new Uint8Array(data), (err, decompressData) => { + if (!err) { + data = decompressData; } - }, 10); - return K3DInstance; + data = msgpackDecode(data); + + try { + K3DInstance = new K3D( + ThreeJsProvider, + targetDOMNode, + data.plot, + ); + } catch (e) { + console.log(e); + return reject(e); + } + + K3DInstance.setSnapshot(data).then(() => { + setTimeout(() => { + if (data.plot.camera.length > 0) { + K3DInstance.setCamera(data.plot.camera); + K3DInstance.render(); + } + }, 10); + + resolve(K3DInstance); + }); + }); }); } module.exports = { K3D, msgpackDecode, + serialize, CreateK3DAndLoadBinarySnapshot, TransferFunctionEditor: TFEdit.transferFunctionEditor, TransferFunctionModel: TFEdit.transferFunctionModel, diff --git a/package.json b/package.json index 5d2a3b55..0797ac83 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "main": "js/src/labplugin.js", "repository": { "type": "git", - "url": "https://github.com/K3D-tools/K3D-jupyter.git.git" + "url": "https://github.com/K3D-tools/K3D-jupyter" }, "scripts": { "build": "jlpm run build:labextension:dev",