sauron

Sauron is an html web framework for building web-apps. It is heavily inspired by elm.

Github星跟蹤圖

sauron

Latest Version
Build Status
MIT licensed

sauron

One crate to rule the DOM

One crate to mind it

One crate to bring JSON

And in the Rust code bind it

This code, no other, is made by code elves

Who'd pawn parent process to get it themselves

Ruler of net troll and mortal and hacker

This code is a lib crate for Patreon backers

If trashed or buggy it cannot be remade

If found send to Ivan, the bandwidth is prepaid

-- The Harvard Lampoon & po8

Sauron is an html web framework for building web-apps with the goal of
closely adhering to The Elm Architecture, a paragon for elegant design.

As with elm, sauron follows the simplistic design of writing view code.

Example

use sauron::html::attributes::*;
use sauron::html::events::*;
use sauron::*;
use sauron::Component;
use sauron::Node;
use sauron::Program;
use sauron::Cmd;
use wasm_bindgen::prelude::*;
use log::*;

#[derive(Debug, PartialEq, Clone)]
pub enum Msg {
    Click,
}

pub struct App {
    click_count: u32,
}

impl App {
    pub fn new() -> Self {
        App { click_count: 0 }
    }
}

impl Component<Msg> for App {

    fn view(&self) -> Node<Msg> {
        div!(
            [class("some-class"), id("some-id"), attr("data-id", 1)],
            [
                input!(
                    [
                        class("client"),
                        type_("button"),
                        value("Click me!"),
                        onclick(, _, {
                            trace!("Button is clicked");
                            Msg::Click
                        }),
                    ],
                    [],
                ),
                text!("Clicked: {}", self.click_count),
            ],
        )
    }

    fn update(&mut self, msg: Msg) -> Cmd<Self, Msg> {
        trace!("App is updating from msg: {:?}", msg);
        match msg {
            Msg::Click => {
                self.click_count += 1;
                Cmd::none()
            }
        }
    }

}

#[wasm_bindgen(start)]
pub fn main() {
    Program::mount_to_body(App::new());
}

index.html

<html>
  <head>
    <meta content="text/html;charset=utf-8" http-equiv="Content-Type"/>
    <title>Minimal sauron app</title>
  </head>
  <body>
    <script src='pkg/minimal.js'></script>
    <script type=module>
        window.wasm_bindgen('pkg/minimal_bg.wasm')
            .catch(console.error);
    </script>
  </body>
</html>

Note: You need to use the nightly compiler with minimum version: rustc 1.37.0-nightly (17e62f77f 2019-07-01)

Build using

$> wasm-pack build --target no-modules

Look at the examples
and the build script for the details.

Demo examples

  • data-viewer - A resizable spreadsheet csv data viewer
  • svg_clock - A clock drawn using svg and window tick event.
  • svg_graph - A simple graph using svg

Prerequisite:

cargo install wasm-pack
cargo install basic-http-server

Warning: I repeat, You need to use the latest nightly compiler in order for this to work.

This project is based on the existing projects:

Performance:

Benchmark

Please support this project:

Become a patron

Please contact me: ivanceras[at]gmail.com

License: MIT

主要指標

概覽
名稱與所有者ivanceras/sauron
主編程語言Rust
編程語言Rust (語言數: 2)
平台
許可證MIT License
所有者活动
創建於2019-04-15 15:21:54
推送於2025-01-27 11:51:25
最后一次提交2025-01-27 19:51:25
發布數113
最新版本名稱0.61.9 (發布於 )
第一版名稱0.1.0 (發布於 )
用户参与
星數2k
關注者數29
派生數61
提交數2.3k
已啟用問題?
問題數40
打開的問題數4
拉請求數39
打開的拉請求數3
關閉的拉請求數2
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?