pub(crate) mod files; pub(crate) mod projects; use crate::html::elements::{a, div, h1, h2, img, link, p}; use crate::html::{Page, Render}; use actix_web::{Responder, get}; pub(crate) struct BasePage { page: Page, } impl BasePage { pub(crate) fn new(title: T) -> Self where T: Into, { let mut page = Page::new(title); // header let mut header = div::new("header", vec!["header"]); let name = p::new("name", vec!["name"], "AINDUSTRIES"); let mut buttons = div::new("buttons", vec!["nav-buttons"]); let home = a::new("home", vec!["nav-button"], "/", "Home"); let projects = a::new("projects", vec!["nav-button"], "/projects", "Projects"); buttons.append_element(home); buttons.append_element(projects); header.append_element(name); header.append_element(buttons); // background let image = img::new( "background", vec!["background"], "/static/img/background.png", ); // css let base = link::new("stylesheet", "/static/css/base.css"); // add elements to the page in order page.append_element_to_head(base); page.append_element_to_body(image); page.append_element_to_body(header); Self { page } } pub(crate) fn append_element_to_head(&mut self, element: impl Render + 'static) { self.page.append_element_to_head(element); } pub(crate) fn append_element_to_body(&mut self, element: impl Render + 'static) { self.page.append_element_to_body(element); } } impl Render for BasePage { fn render(&self) -> String { self.page.render() } } #[get("/")] async fn index() -> impl Responder { let mut page = BasePage::new("AINDUSTRIES"); // introduction let mut intro = div::new("intro", vec!["intro"]); let hi = h1::new("Hello and welcome!"); let detail = h2::new( "This here is a small website to show the passion I have for computers.
\ I have always had a good time creating and discovering new things.
\ Your may discover some of my projects here on this showcase.", ); intro.append_element(hi); intro.append_element(detail); // css let index = link::new("stylesheet", "static/css/index.css"); // add elements to the page in order page.append_element_to_head(index); page.append_element_to_body(intro); page.render() }