Pour tout problème contactez-nous par mail : support@froggit.fr | La FAQ :grey_question: | Rejoignez-nous sur le Chat :speech_balloon:

Skip to content
Snippets Groups Projects
page.rs 1.76 KiB
Newer Older
peterrabbit's avatar
peterrabbit committed
use super::css::StyleSheet;
use super::html::HtmlDoc;
use super::item::*;
peterrabbit's avatar
peterrabbit committed
use serde::{Deserialize, Serialize};

#[derive(Debug, Serialize, Deserialize, Clone)]
peterrabbit's avatar
peterrabbit committed
pub struct Page {
    template: PageTemplate,
    body: PageBody,
    pub metadata: PageMetadata,
    pub sub_pages: Vec<Page>,
    pub html: HtmlDoc,
peterrabbit's avatar
peterrabbit committed
}

#[derive(Debug, Serialize, Deserialize, Clone)]
peterrabbit's avatar
peterrabbit committed
pub struct PageTemplate {
    layout: StyleSheet,
    name: String,
    fixed_contents: Vec<ItemContent>,
peterrabbit's avatar
peterrabbit committed
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct PageBody(Vec<Item>);

impl std::fmt::Display for PageBody {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
        write!(
            f,
            "{}",
            &self
                .0
                .iter()
                .map(|i| i.to_string())
                .collect::<Vec<String>>()
                .join("")
        )
    }
}

#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct PageMetadata {
    pub title: String,
    pub lang: String,
    pub description: String,
    pub url_slug: String,
    pub css_src: Vec<String>,
    pub js_src: Vec<String>,
}

impl Page {
    pub fn build_html(&mut self) {
        self.html = HtmlDoc::from_page(self);
peterrabbit's avatar
peterrabbit committed
    pub fn text_from_key(&self, key: String) -> String {
peterrabbit's avatar
peterrabbit committed
        match &key[..] {
peterrabbit's avatar
peterrabbit committed
            "title" => self.metadata.title.to_owned(),
            "lang" => self.metadata.lang.to_owned(),
            "description" => self.metadata.description.to_owned(),
            "slug" => self.metadata.url_slug.to_owned(),
            "body" => self.body.to_string(),
            // "css" => self.css_src.as_ref().unwrap_or(&String::new()).to_owned(),
            // "js" => self.js_src.as_ref().unwrap_or(&String::new()).to_owned(),
peterrabbit's avatar
peterrabbit committed
            _ => String::new(),
        }
    }
}