click event

This commit is contained in:
Jorijn van der Graaf 2025-11-09 22:43:52 +01:00
commit f40afe684a
13 changed files with 151 additions and 20 deletions

View file

@ -19,9 +19,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
const decoder = new TextDecoder();
const encoder = new TextEncoder();
let memorycounter = -1;
const jsmemory = new Map();
const eventHandlers = new Map();
function freeJs(ptr) {
jsmemory.delete(ptr);
@ -37,10 +39,35 @@ function setInnerHTML(ptr, html, htmlLenght) {
jsmemory.get(ptr).innerHTML = decoder.decode(new Int8Array(window.crafter_webbuild_wasi.instance.exports.memory.buffer, html, htmlLenght));
}
function addClickListener(ptr, handlerID) {
const element = jsmemory.get(ptr);
// Create a handler that will trigger a notification to C++
const handler = function(event) {
const { ExecuteClickHandler } = window.crafter_webbuild_wasi.instance.exports;
ExecuteClickHandler(handlerID);
};
eventHandlers.set(`${ptr}-${handlerID}`, handler);
element.addEventListener("click", handler);
}
function removeClickListener(ptr, handlerID) {
const element = jsmemory.get(ptr);
const handler = eventHandlers.get(`${ptr}-${handlerID}`);
element.removeEventListener("click", handler);
eventHandlers.delete(handlerID);
}
let env = {
freeJs:freeJs,
getElementById:getElementById,
setInnerHTML:setInnerHTML,
freeJs: freeJs,
getElementById: getElementById,
setInnerHTML: setInnerHTML,
addClickListener: addClickListener,
removeClickListener: removeClickListener,
}
window.crafter_webbuild_env = env;