From b96faacf89fd8469f24e8f2835840c3364212889 Mon Sep 17 00:00:00 2001 From: Jorijn van der Graaf Date: Wed, 12 Nov 2025 16:25:12 +0100 Subject: [PATCH] value --- additional/env.js | 13 +++++++++++++ implementations/Crafter.CppDOM-HtmlElement.cpp | 15 +++++++++++++++ interfaces/Crafter.CppDOM-BindingsImport.cppm | 7 +++++++ interfaces/Crafter.CppDOM-HtmlElement.cppm | 4 ++++ 4 files changed, 39 insertions(+) diff --git a/additional/env.js b/additional/env.js index 62f5e57..776e159 100644 --- a/additional/env.js +++ b/additional/env.js @@ -630,6 +630,19 @@ let env = { element.parentNode.removeChild(element); } }, + getValue: function(ptr) { + const element = jsmemory.get(ptr); + if(element.value) { + return writeStringToWasm(element.value || ""); + } else { + return 0; + } + }, + setValue: function(ptr, value, valueLength) { + const element = jsmemory.get(ptr); + const val = decoder.decode(new Int8Array(window.crafter_webbuild_wasi.instance.exports.memory.buffer, value, valueLength)); + element.value = val; + }, addClickListener: addClickListener, removeClickListener: removeClickListener, addMouseOverListener: addMouseOverListener, diff --git a/implementations/Crafter.CppDOM-HtmlElement.cpp b/implementations/Crafter.CppDOM-HtmlElement.cpp index 921f277..e8e98ec 100644 --- a/implementations/Crafter.CppDOM-HtmlElement.cpp +++ b/implementations/Crafter.CppDOM-HtmlElement.cpp @@ -62,6 +62,21 @@ namespace Crafter { return CppDOMBindings::HasClass(ptr, className); } + std::string HtmlElementView::GetValue() { + const char* value = CppDOMBindings::GetValue(ptr); + if(value != nullptr) { + std::string result(value); + std::free(value); + return result; + } else { + return ""; + } + } + + void HtmlElementView::SetValue(const std::string_view value) { + CppDOMBindings::SetValue(ptr, value); + } + std::int32_t HtmlElementView::AddClickListener(std::function callback) { std::int32_t id = CppDOMBindings::clickHandlerMaxId++; clickHandlers.push_back(id); diff --git a/interfaces/Crafter.CppDOM-BindingsImport.cppm b/interfaces/Crafter.CppDOM-BindingsImport.cppm index 23ee974..8285003 100644 --- a/interfaces/Crafter.CppDOM-BindingsImport.cppm +++ b/interfaces/Crafter.CppDOM-BindingsImport.cppm @@ -138,4 +138,11 @@ export namespace Crafter::CppDOMBindings { } __attribute__((import_module("env"), import_name("deleteElement"))) void DeleteElement(void* ptr); + + // Value property functions + __attribute__((import_module("env"), import_name("getValue"))) const char* GetValue(void* ptr); + __attribute__((import_module("env"), import_name("setValue"))) void SetValue(void* ptr, const char* value, std::int32_t valueLength); + void SetValue(void* ptr, const std::string_view value) { + SetValue(ptr, value.data(), value.size()); + } } \ No newline at end of file diff --git a/interfaces/Crafter.CppDOM-HtmlElement.cppm b/interfaces/Crafter.CppDOM-HtmlElement.cppm index 71b64d0..986dec4 100644 --- a/interfaces/Crafter.CppDOM-HtmlElement.cppm +++ b/interfaces/Crafter.CppDOM-HtmlElement.cppm @@ -63,6 +63,10 @@ namespace Crafter { void ToggleClass(const std::string_view className); bool HasClass(const std::string_view className); + // Value property accessors + std::string GetValue(); + void SetValue(const std::string_view value); + std::int32_t AddClickListener(std::function callback); void RemoveClickListener(std::int32_t id);