Clone in a terminal:
Commit c9e8f6d
Johan Mattsson - 2026-10-31T22:17:36+00:00
c9e8f6d9d5db1acd043fee9d513f9febd1ebf62fjohan.mattsson.m@gmail.com

Template

Changed files (10)

Diff

diff --git a/examples/main-component/Cargo.lock b/examples/main-component/Cargo.lockindex d20dd38..aee61cb 100644--- a/examples/main-component/Cargo.lock+++ b/examples/main-component/Cargo.lock@@ -518,7 +518,7 @@ dependencies = [  [[package]] name = "kaja-web"-version = "1.0.3"+version = "1.0.5" dependencies = [  "gloo",  "gloo-console",diff --git a/examples/main-component/package.json b/examples/main-component/package.jsonindex 7581fcc..5853461 100644--- a/examples/main-component/package.json+++ b/examples/main-component/package.json@@ -1,6 +1,6 @@ {   "name": "main-component",-  "version": "1.0.0",+  "version": "1.0.1",   "type": "module",   "files": [     "pkg"diff --git a/examples/web/run.sh b/examples/web/run.shold mode 100644new mode 100755diff --git a/kaja-web-template/Cargo.toml b/kaja-web-template/Cargo.tomlnew file mode 100644index 0000000..14bc1cd--- /dev/null+++ b/kaja-web-template/Cargo.toml@@ -0,0 +1,12 @@+[package]+name = "{{project-name}}"+version = "0.1.0"+edition = "2024"+description = "{{description}}"++[lib]+crate-type = ["cdylib"]++[dependencies]+kaja-web = "1.0"+wasm-bindgen = "0.2"diff --git a/kaja-web-template/cargo-generate.toml b/kaja-web-template/cargo-generate.tomlnew file mode 100644index 0000000..1a936db--- /dev/null+++ b/kaja-web-template/cargo-generate.toml@@ -0,0 +1,7 @@+[template]+cargo_generate_version = ">=0.18.0"++[placeholders.description]+type = "string"+prompt = "Project description"+default = "A Kaja Web application"diff --git a/kaja-web-template/index.html b/kaja-web-template/index.htmlnew file mode 100644index 0000000..bb6511d--- /dev/null+++ b/kaja-web-template/index.html@@ -0,0 +1,14 @@+<!DOCTYPE html>+<html lang="en">+<head>+    <meta charset="UTF-8">+    <meta name="viewport" content="width=device-width, initial-scale=1">+    <title>{{project-name}}</title>+</head>+<body>+    <script type="module">+        import init from "./pkg/{{crate_name}}.js";+        await init();+    </script>+</body>+</html>diff --git a/kaja-web-template/run.sh b/kaja-web-template/run.shnew file mode 100755index 0000000..f004f8e--- /dev/null+++ b/kaja-web-template/run.sh@@ -0,0 +1,5 @@+#!/bin/sh+set -e++wasm-pack build --target web --dev --out-dir pkg+python3 -m http.server 8000diff --git a/kaja-web-template/src/lib.src b/kaja-web-template/src/lib.srcnew file mode 100644index 0000000..3f4778d--- /dev/null+++ b/kaja-web-template/src/lib.src@@ -0,0 +1,7 @@+use wasm_bindgen::prelude::*;+use kaja_web::prelude::*;++#[wasm_bindgen(start)]+pub fn main() {+    // Your application starts here.+}diff --git a/src/lib.rs b/src/lib.rsindex 8b2b1ad..da6c7cd 100644--- a/src/lib.rs+++ b/src/lib.rs@@ -329,6 +329,48 @@ pub fn get_callback(name: &str) -> Option<js_sys::Function> {     None } +/// Generated component handle API. See kaja-web-component.+pub trait ComponentHandle {+    type State;++    fn set_attribute<T>(&self, name: &str, value: T) -> Result<()>+    where+        T: ToString;++    fn set_attribute_string(&self, name: &str, value: &str) -> Result<()>;++    fn get_attribute_string(&self, name: &str) -> Option<String>;++    fn get_attribute<T>(&self, name: &str) -> Option<T>+    where+        T: std::str::FromStr;++    fn get_attributes(&self) -> std::rc::Rc<std::cell::RefCell<Self::State>>;++    fn borrow(&self) -> std::cell::Ref<'_, Self::State>;++    fn borrow_mut(&self) -> std::cell::RefMut<'_, Self::State>;++    fn with_mut<F>(&self, f: F)+    where+        F: FnOnce(&mut Self::State);++    fn with<F>(&self, f: F)+    where+        F: FnOnce(&Self::State);++    fn get_id(&self) -> String;+}++/// HTML Component. See kaja-web-component.+pub trait Component: Default + ComponentHandle {+    fn connected(&self) {}+    fn disconnected(&self) {}+    fn attribute_changed(&self, name: &str, _old_value: &str, _new_value: &str) {+        log!("Attribute changed but no update handler for ", name);+    }+}+ /// Get HTML element by ID pub fn get_element_by_id(id: &str) -> Option<HtmlElement> {     let window = web_sys::window().ok_or(Error).ok()?;diff --git a/src/prelude.rs b/src/prelude.rsindex f523dd1..5babd13 100644--- a/src/prelude.rs+++ b/src/prelude.rs@@ -1,6 +1,6 @@ pub use crate::{-    CallbackRegistration, Error, InitComponentFn, InitFn, Result, SharedComponent,-    UpdateComponentFn, add_css_class, get_callback, get_cookie_value, get_element,+    CallbackRegistration, Component, ComponentHandle, Error, InitComponentFn, InitFn, Result,+    SharedComponent, UpdateComponentFn, add_css_class, get_callback, get_cookie_value, get_element,     get_element_by_id, get_elements, get_value, init_callbacks, inner_html, inner_text,     remove_css_class, try_get_value, try_inner_html, try_inner_text, };

Contact

Email: johan.mattsson.m@gmail.com
Mastodon: typo.social/@birdfont
GitHub: johanmattssonm
LinkedIn: johan-mattsson-2ab324112