From ab1881cd9f2746ad8e75ba573be34041f95ab5a6 Mon Sep 17 00:00:00 2001 From: daurnimator Date: Thu, 28 Dec 2017 19:49:36 +1100 Subject: src/ldblib.js: Use window.prompt to get input in browser Doesn't work in web workers --- README.md | 1 + src/ldblib.js | 22 ++++++++++++++++------ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 0f197ce..1b58b91 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,7 @@ In the browser `require` and `package.loadlib` try to find a file by making sync - `os.rename` - `os.tmpname` - `os.execute` +- `debug.debug()` doesn't work from web workers due to lack of a method to get synchronous user input - [Weak tables](http://www.lua.org/manual/5.3/manual.html#2.5.2) diff --git a/src/ldblib.js b/src/ldblib.js index a189976..940c525 100644 --- a/src/ldblib.js +++ b/src/ldblib.js @@ -395,16 +395,28 @@ const dblib = { "upvaluejoin": db_upvaluejoin }; +let getinput; if (typeof process !== "undefined") { // Only with Node const readlineSync = require('readline-sync'); readlineSync.setDefaultOptions({ prompt: 'lua_debug> ' }); - - // TODO: if in browser, use a designated input in the DOM ? - const db_debug = function(L) { + getinput = function() { + return readlineSync.prompt(); + }; +} else if (typeof window !== "undefined") { + /* if in browser use window.prompt. Doesn't work from web workers. + See https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt + */ + getinput = function() { + let input = prompt("lua_debug>", ""); + return (input !== null) ? input : ""; + }; +} +if (getinput) { + dblib.debug = function(L) { for (;;) { - let input = readlineSync.prompt(); + let input = getinput(); if (input === "cont") return 0; @@ -420,8 +432,6 @@ if (typeof process !== "undefined") { // Only with Node lua.lua_settop(L, 0); /* remove eventual returns */ } }; - - dblib.debug = db_debug; } const luaopen_debug = function(L) { -- cgit v1.2.3-54-g00ecf