diff options
-rw-r--r-- | javascript/olm_post.js | 20 | ||||
-rw-r--r-- | javascript/olm_pre.js | 30 |
2 files changed, 34 insertions, 16 deletions
diff --git a/javascript/olm_post.js b/javascript/olm_post.js index 8951c11..54e42c5 100644 --- a/javascript/olm_post.js +++ b/javascript/olm_post.js @@ -419,4 +419,22 @@ olm_exports["get_library_version"] = restore_stack(function() { getValue(buf+2, 'i8'), ]; }); -}(); + +})(); + +// export the olm functions into the environment. +// +// make sure that we do this *after* populating olm_exports, so that we don't +// get a half-built window.Olm if there is an exception. + +if (typeof module !== 'undefined' && module.exports) { + // node / browserify + module.exports = olm_exports; +} + +if (typeof(window) !== 'undefined') { + // We've been imported directly into a browser. Define the global 'Olm' object. + // (we do this even if module.exports was defined, because it's useful to have + // Olm in the global scope for browserified and webpacked apps.) + window["Olm"] = olm_exports; +} diff --git a/javascript/olm_pre.js b/javascript/olm_pre.js index 50bf8c2..ae7aba5 100644 --- a/javascript/olm_pre.js +++ b/javascript/olm_pre.js @@ -2,32 +2,32 @@ var olm_exports = {}; var get_random_values; var process; // Shadow the process object so that emscripten won't get // confused by browserify -if (typeof(global) !== 'undefined' && global["window"]) { - // We're running with browserify - module["exports"] = olm_exports; - global["window"]["Olm"] = olm_exports; - get_random_values = function(buf) { - window.crypto.getRandomValues(buf); - }; -} else if (typeof(window) !== 'undefined') { - // We've been imported directly into a browser. - window["Olm"] = olm_exports; + +if (typeof(window) !== 'undefined') { + // We've in a browser (directly, via browserify, or via webpack). get_random_values = function(buf) { window.crypto.getRandomValues(buf); }; } else if (module["exports"]) { // We're running in node. - module["exports"] = olm_exports; var nodeCrypto = require("crypto"); get_random_values = function(buf) { var bytes = nodeCrypto.randomBytes(buf.length); buf.set(bytes); - } + }; process = global["process"]; } else { throw new Error("Cannot find global to attach library to"); } -var init = function() { - var module; // Shadow the Node 'module' object so that emscripten won't try - // to fiddle with it. +(function() { + /* applications should define OLM_OPTIONS in the environment to override + * emscripten module settings */ + var Module = {}; + if (typeof(OLM_OPTIONS) !== 'undefined') { + for (var key in OLM_OPTIONS) { + if (OLM_OPTIONS.hasOwnProperty(key)) { + Module[key] = OLM_OPTIONS[key]; + } + } + } |