This is an attempt to make a playground for the Rhai scripting language using WebAssembly.
The master
branch is automatically built and deployed here.
A known-good build is published on https://rhaiscript.github.io/playground/stable/.
It is still a work-in-progress, but it is possible to embed the playground for use on another web page.
<style>
iframe.rhaiPlayground {
width: 100%;
height: 400px;
border: 0;
}
</style>
<pre><code class="language-rhai">fn hello_rhai(msg) {
print("Hello world! " + msg);
}
hello_rhai("Embed the Rhai Playground to run Rhai code!");
</code></pre>
<script>
const ORIGIN = "https://rhaiscript.github.io";
const PATH = "/playground/stable/";
let nextPlaygroundIdx = 0;
function loadPlayground(el) {
const id = "" + nextPlaygroundIdx++;
const iframe = document.createElement("iframe");
iframe.style = el.style;
iframe.className = el.className;
iframe.classList.add("rhaiPlayground");
iframe.src = ORIGIN + PATH + "#embed-" + id;
el.replaceWith(iframe);
const code = el.innerText;
const onMessage = ev => {
if (
ev.data.from === "rhai-playground" &&
ev.data.req === "embed-loaded" &&
ev.data.id === id
) {
iframe.contentWindow.postMessage(
{
to: "rhai-playground",
req: "embed-init",
code,
},
ORIGIN,
);
// window.removeEventListener("message", onMessage);
}
}
window.addEventListener("message", onMessage);
}
document.querySelectorAll("code.language-rhai").forEach(el => {
loadPlayground(el);
});
</script>
npm install
# Builds the project and opens it in a new browser tab. Auto-reloads when the project changes.
npm start
# Use the Open SSL legacy provider if using Node 17 and above.
#export NODE_OPTIONS=--openssl-legacy-provider
# Builds the project and places it into the `dist` folder.
npm run build
# Runs tests in Firefox
npm test -- --firefox
# Runs tests in Chrome
npm test -- --chrome
# Runs tests in Safari
npm test -- --safari
-
Cargo.toml
contains the standard Rust metadata. You put your Rust dependencies in here. You must change this file with your details (name, description, version, authors, categories) -
package.json
contains the standard npm metadata. You put your JavaScript dependencies in here. You must change this file with your details (author, name, version) -
webpack.config.js
contains the Webpack configuration. You shouldn't need to change this, unless you have very special needs. -
The
js
folder contains your JavaScript code (index.js
is used to hook everything into Webpack, you don't need to change it). -
The
src
folder contains your Rust code. -
The
static
folder contains any files that you want copied as-is into the final build. It contains anindex.html
file which loads theindex.js
file. -
The
tests
folder contains your Rust unit tests.