use maud::{html, Markup, PreEscaped}; use peach_network::network; use rouille::Request; use crate::{ templates, utils::{flash::FlashRequest, theme}, AP_IFACE, }; // ROUTE: /settings/network /// Read the wireless interface mode (WiFi AP or client) and selectively render /// the activation button for the deactivated mode. fn render_mode_toggle_button() -> Markup { match network::state(AP_IFACE) { Ok(Some(state)) if state == "up" => { html! { a id="connectWifi" class="button button-primary center" href="/settings/network/wifi/activate" title="Enable WiFi" { "Enable WiFi" } } } _ => html! { a id="deployAccessPoint" class="button button-primary center" href="/settings/network/ap/activate" title="Deploy Access Point" { "Deploy Access Point" } }, } } fn render_buttons() -> Markup { html! { (PreEscaped("")) div id="buttons" { a class="button button-primary center" href="/settings/network/wifi/add" title="Add WiFi Network" { "Add WiFi Network" } a id="configureDNS" class="button button-primary center" href="/settings/network/dns" title="Configure DNS" { "Configure DNS" } (PreEscaped("")) (render_mode_toggle_button()) a id="listWifi" class="button button-primary center" href="/settings/network/wifi" title="List WiFi Networks" { "List WiFi Networks" } // TODO: uncomment this once data usage feature is in place // a id="viewUsage" class="button button-primary center" href="/settings/network/wifi/usage" title="View Data Usage" { "View Data Usage" } a id="viewStatus" class="button button-primary center" href="/status/network" title="View Network Status" { "View Network Status" } } } } /// Network settings menu template builder. pub fn build_template(request: &Request) -> PreEscaped { let (flash_name, flash_msg) = request.retrieve_flash(); let menu_template = html! { (PreEscaped("")) div class="card center" { (render_buttons()) // render flash message if cookies were found in the request @if let (Some(name), Some(msg)) = (flash_name, flash_msg) { (PreEscaped("")) (templates::flash::build_template(name, msg)) } } }; let body = templates::nav::build_template(menu_template, "Network Settings", Some("/settings")); let theme = theme::get_theme(); templates::base::build_template(body, theme) }