#module #html5 #css #wasm-module #wasm #javascript

lewp

告别网页模板地狱。在Rust源代码中生成技术优化且始终有效的HTML5网站。

3个版本 (有重大变化)

0.3.0 2022年3月4日
0.2.0 2021年10月2日
0.0.0 2021年8月6日

#2 in #modules

MIT/Apache

1MB
23K SLoC

lewp-rs

这是 lewp 包的实际源代码。有关框架信息,请参阅仓库根目录,或访问文档页面


lib.rs:


Version Downloads MIT or Apache-2.0 License

告别网页模板地狱。在Rust源代码中生成技术优化且始终有效的HTML5网站。

此包目前正在发展。API更改可能随时发生,直到v1.0.0版本

提供解决方案

当使用lewp时,您在网页开发中可以得到以下好处

  • 代码库中不再有模板地狱
  • 网站中不再有空白字符错误
  • 技术优化,始终有效,已压缩的HTML5代码
  • 基于模块的开发,真正隔离
  • 在Rust中完全构建DOM

示例:Hello world!

use {
    lewp::{
        config::{ModuleConfig, PageConfig},
        html::{
            api::{h1, text},
            Nodes,
        },
        Module, Modules, RuntimeInformation,
        Page,
        Charset,
        LanguageTag,
        LewpError,
    },
    std::rc::Rc,
};

// This is one of your modules the webpage is build with.
struct HelloWorld {
    config: ModuleConfig,
    head_tags: Nodes,
    data: String,
}

impl HelloWorld {
    pub fn new() -> Self {
        Self {
            config: ModuleConfig::new(),
            head_tags: vec![],
            data: String::from("hello-world"),
        }
    }
}

// The [Module] trait is required for [lewp] to know it is a module. :-)
impl Module for HelloWorld {
    fn head_tags(&self) -> &Nodes {
        &self.head_tags
    }

    fn id(&self) -> &str {
        "hello-world"
    }

    fn config(&self) -> &ModuleConfig {
        &self.config
    }

    fn run(
        &mut self,
        _runtime_info: Rc<RuntimeInformation>,
    ) -> Result<(), LewpError> {
        Ok(())
    }

    fn view(&self) -> Nodes {
        vec![h1(vec![text(&self.data)])]
    }
}

// This struct defines the actual page. The containing members are
// required because they define the base on which [lewp] is working on.
struct HelloWorldPage {
    modules: Modules,
    config: PageConfig,
}

impl HelloWorldPage {
    /// Creates a new page.
    pub fn new(config: PageConfig) -> Self {
        Self {
            modules: vec![],
            config,
        }
    }
}

impl Page for HelloWorldPage {
    fn modules(&self) -> &Modules {
        &self.modules
    }
    fn modules_mut(&mut self) -> &mut Modules {
        &mut self.modules
    }

    fn title(&self) -> &str {
        "Hello World from lewp!"
    }

    fn description(&self) -> &str {
        "My first page using lewp!"
    }

    fn language(&self) -> LanguageTag {
        LanguageTag::parse("de-DE").unwrap()
    }

    fn charset(&self) -> Charset {
        Charset::Utf8
    }

    fn config(&self) -> &PageConfig {
        &self.config
    }

    fn run(&mut self) {
        self.add_module(HelloWorld::new().into_module_ptr());
    }
}

fn main() {
    let mut page = HelloWorldPage::new(PageConfig::new());
    println!("{}", page.build());
}

依赖

~5–13MB
~151K SLoC