webfluent 0.4.0-alpha

The Web-First Language — compiles to HTML, CSS, JavaScript, and PDF. 50+ built-in components, reactivity, routing, i18n, SSG, and template engine.
Documentation
use crate::config::ProjectConfig;

/// Generate the HTML entry point (`index.html`) for a WebFluent project.
pub fn generate_html(config: &ProjectConfig) -> String {
    let title = if config.meta.title.is_empty() {
        &config.name
    } else {
        &config.meta.title
    };

    let lang = if config.meta.lang.is_empty() {
        "en"
    } else {
        &config.meta.lang
    };

    let description_meta = if config.meta.description.is_empty() {
        String::new()
    } else {
        format!(r#"    <meta name="description" content="{}">"#, config.meta.description)
    };

    let favicon_link = if config.meta.favicon.is_empty() {
        String::new()
    } else {
        format!(r#"    <link rel="icon" href="{}">"#, config.meta.favicon)
    };

    format!(
        r#"<!DOCTYPE html>
<html lang="{}">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{}</title>
{}{}    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div id="app"></div>
    <script src="app.js"></script>
</body>
</html>"#,
        lang,
        title,
        if description_meta.is_empty() { String::new() } else { format!("{}\n", description_meta) },
        if favicon_link.is_empty() { String::new() } else { format!("{}\n", favicon_link) },
    )
}