Skip to content

Commit

Permalink
Run examples with php wasm
Browse files Browse the repository at this point in the history
  • Loading branch information
soyuka committed Oct 16, 2024
1 parent 9ee511f commit 321a169
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 0 deletions.
7 changes: 7 additions & 0 deletions include/footer.inc
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,13 @@ if (!empty($_SERVER['BASE_PAGE'])
echo '<script src="/cached.php?t=' . @filemtime($path) . '&amp;f=/js/' . $filename . '"></script>' . "\n";
}
?>
<?php
$jsfiles = ["interactive-examples.js"];
foreach ($jsfiles as $filename) {
$path = dirname(__DIR__) . '/js/' . $filename;
echo '<script type="module" src="/cached.php?t=' . @filemtime($path) . '&amp;f=/js/' . $filename . '"></script>' . "\n";
}
?>

<a id="toTop" href="javascript:;"><span id="toTopHover"></span><img width="40" height="40" alt="To Top" src="/images/[email protected]"></a>

Expand Down
58 changes: 58 additions & 0 deletions js/interactive-examples.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import phpBinary from "/js/php-web.mjs";

function createOutput(output) {
const container = document.createElement('div');
container.classList.add('screen', 'example-contents');
const title = document.createElement('p');
title.innerText = 'Output: ';
container.appendChild(title)
const div = document.createElement('div');
div.classList.add('examplescode');
container.appendChild(div);
const pre = document.createElement('pre');
pre.classList.add('examplescode');
pre.innerText = output;
div.appendChild(pre)
return container;
}

async function main() {
const buffer = [];
const {ccall} = await phpBinary({
print(data) {
if (!data) {
return;
}

if (buffer.length) {
buffer.push('\n');
}
buffer.push(data);
}
})

console.log("PHP wasm %s loaded.", ccall("phpw_exec", "string", ["string"], ["phpversion();"]));
let lastOutput = null

document.querySelectorAll('.example').forEach((example) => {
const button = document.createElement('button');
const phpcode = example.querySelector('.phpcode');

button.innerText = 'Run code';
button.onclick = function() {
if (lastOutput && lastOutput.parentNode) {
lastOutput.parentNode.removeChild(lastOutput)
}

ccall("phpw_run", null, ["string"], ['?>' + phpcode.innerText]);
lastOutput = createOutput(buffer.join(''))
phpcode.parentNode.appendChild(lastOutput);
buffer.length = 0;
};

phpcode.parentNode.insertBefore(button, phpcode);
});

}

main()
16 changes: 16 additions & 0 deletions js/php-web.mjs

Large diffs are not rendered by default.

Binary file added js/php-web.wasm
Binary file not shown.

0 comments on commit 321a169

Please sign in to comment.