terrazzo-terminal 0.2.7

A simple web-based terminal emulator built on Terrazzo.
#![cfg(feature = "server")]

use terrazzo::declare_asset;
use terrazzo::declare_scss_asset;

pub fn install_assets() {
    terrazzo::install_assets();
    declare_asset!("/assets/index.html")
        .mime(terrazzo::mime::TEXT_HTML_UTF_8.as_ref())
        .install();
    declare_asset!("/assets/bootstrap.js").install();
    declare_asset!("/assets/jsdeps/dist/jsdeps.js").install();
    declare_asset!("/assets/images/favicon.ico").install();
    declare_scss_asset!("target/css/terrazzo-terminal.scss").install();
    install_icons();
    install_pdfjs();
    install_xterm();
    install_wasm();
}

fn install_icons() {
    #[cfg(not(feature = "client"))]
    fn install_icon(mut asset: terrazzo::static_assets::AssetBuilder) {
        let path = std::path::Path::new("icons").join(asset.asset_name);
        let path = path.as_os_str().to_str().unwrap();
        asset.asset_name = path.into();
        asset.install();
    }

    #[cfg(feature = "client")]
    fn install_icon(_: &'static str) {}

    #[cfg(any(feature = "terminal", feature = "text-editor"))]
    install_icon(super::icons::close_tab());
    install_icon(super::icons::key_icon());
    install_icon(super::icons::menu());

    #[cfg(feature = "terminal")]
    {
        install_icon(super::icons::add_tab());
        install_icon(super::icons::terminal());
    }

    #[cfg(feature = "text-editor")]
    {
        install_icon(super::icons::chevron_double_right());
        install_icon(super::icons::collapse_vert());
        install_icon(super::icons::diff());
        install_icon(super::icons::download());
        install_icon(super::icons::file());
        install_icon(super::icons::folder());
        install_icon(super::icons::loading());
        install_icon(super::icons::new_file());
        install_icon(super::icons::new_folder());
        install_icon(super::icons::refresh());
        install_icon(super::icons::search());
        install_icon(super::icons::slash());
        install_icon(super::icons::text_editor());
    }

    #[cfg(feature = "converter")]
    {
        install_icon(super::icons::converter());
        install_icon(super::icons::copy());
    }

    #[cfg(any(feature = "converter", feature = "text-editor"))]
    install_icon(super::icons::done());

    #[cfg(feature = "port-forward")]
    {
        install_icon(super::icons::add_port_forward());
        install_icon(super::icons::hub());
        install_icon(super::icons::port_forward_loading());
        install_icon(super::icons::port_forward_pending());
        install_icon(super::icons::port_forward_synchronized());
    }

    #[cfg(any(feature = "port-forward", feature = "text-editor"))]
    install_icon(super::icons::trash());

    #[cfg(feature = "logs-panel")]
    {
        install_icon(super::icons::chevron_bar_up());
        install_icon(super::icons::chevron_bar_down());
    }

    install_icon(super::icons::split_horz());
    install_icon(super::icons::split_vert());
    install_icon(super::icons::close_app());
}

fn install_xterm() {
    declare_asset!("/assets/jsdeps/node_modules/@xterm/xterm/css/xterm.css").install();
}

fn install_pdfjs() {
    #[cfg(feature = "text-editor")]
    {
        declare_asset!("/assets/pdfjs/pdf.min.mjs")
            .asset_name("pdfjs/pdf.min.mjs")
            .mime("text/javascript; charset=utf-8")
            .install();
        declare_asset!("/assets/pdfjs/pdf.worker.min.mjs")
            .asset_name("pdfjs/pdf.worker.min.mjs")
            .mime("text/javascript; charset=utf-8")
            .install();
        declare_asset!("/assets/pdfjs/pdfjs-loader.js")
            .asset_name("pdfjs/pdfjs-loader.js")
            .mime("text/javascript; charset=utf-8")
            .install();
    }
}

fn install_wasm() {
    declare_asset!("/target/assets/wasm/terrazzo_terminal.js")
        .asset_name("wasm/terrazzo_terminal.js")
        .install();
    declare_asset!("/target/assets/wasm/terrazzo_terminal_bg.wasm")
        .asset_name("wasm/terrazzo_terminal_bg.wasm")
        .install();
    #[cfg(all(
        not(feature = "client"),
        any(feature = "terminal", feature = "text-editor")
    ))]
    terrazzo::declare_assets_dir!(
        "wasm/snippets",
        "$CARGO_MANIFEST_DIR/target/assets/wasm/snippets"
    );
}