//! A module that handles the user interface tab for setting page view in the `websurfx` frontend. use crate::handler::{file_path, FileType}; use maud::{html, Markup}; use std::fs::read_dir; /// A helper function that helps in building the list of all available colorscheme/theme names /// present in the colorschemes and themes folder respectively. /// /// # Arguments /// /// * `style_type` - It takes the style type of the values `theme` and `colorscheme` as an /// argument. /// /// # Error /// /// Returns a list of colorscheme/theme names as a vector of tuple strings on success otherwise /// returns a standard error message. fn style_option_list( style_type: &str, ) -> Result, Box> { let mut style_option_names: Vec<(String, String)> = Vec::new(); for file in read_dir(format!( "{}static/{}/", file_path(FileType::Theme)?, style_type, ))? { let style_name = file?.file_name().to_str().unwrap().replace(".css", ""); style_option_names.push((style_name.clone(), style_name.replace('-', " "))); } Ok(style_option_names) } /// A functions that handles the html code for the user interface tab for the settings page for the search page. /// /// # Error /// /// It returns the compiled html markup code for the user interface tab on success otherwise /// returns a standard error message. pub fn user_interface() -> Result> { Ok(html!( div class="user_interface tab"{ h1{"User Interface"} h3{"select theme"} p class="description"{ "Select the theme from the available themes to be used in user interface" } select name="themes"{ @for (k,v) in style_option_list("themes")?{ option value=(k){(v)} } } h3{"select color scheme"} p class="description"{ "Select the color scheme for your theme to be used in user interface" } select name="colorschemes"{ @for (k,v) in style_option_list("colorschemes")?{ option value=(k){(v)} } } h3{"select animation"} p class="description"{ "Select the animation for your theme to be used in user interface" } select name="animations"{ option value=""{"none"} @for (k,v) in style_option_list("animations")?{ option value=(k){(v)} } } } )) }