thesandwi.ch/thecockpit/src/web/mod.rs
Isaac Mills 2cdd3aa886
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Secure the cockpit
2025-07-22 16:19:02 -06:00

51 lines
1.2 KiB
Rust

use std::{cell::RefCell, rc::Rc};
use ratzilla::{
backend::canvas::CanvasBackendOptions,
event::KeyCode,
ratatui::{
widgets::{Block, Borders},
Terminal,
},
web_sys, CanvasBackend, WebRenderer,
};
use wasm_bindgen::prelude::*;
mod utils;
use crate::app::App;
#[wasm_bindgen]
extern "C" {
fn alert(s: &str);
}
#[wasm_bindgen]
pub fn run(grid_id: &str) {
console_error_panic_hook::set_once();
let backend = CanvasBackend::new_with_options(
CanvasBackendOptions::new()
.grid_id(grid_id)
.font(String::from("16px Fira Code")),
)
.unwrap();
let terminal = Terminal::new(backend).unwrap();
let app = Rc::new(RefCell::new(App::new()));
terminal.on_key_event({
let app = Rc::clone(&app);
move |event| match event.code {
KeyCode::Left => app.borrow_mut().prev_tab(),
KeyCode::Right => app.borrow_mut().next_tab(),
KeyCode::Char(c) => app.borrow_mut().add_char_to_number_guess(c),
_ => {}
}
});
terminal.draw_web({
let app = Rc::clone(&app);
move |frame| app.borrow_mut().draw(frame)
})
}