From 2659bb61a10998f8213e2bf7f2b4eafb3a4864c2 Mon Sep 17 00:00:00 2001 From: Teascade Date: Wed, 18 Apr 2018 22:43:50 +0300 Subject: [PATCH] Add css/js tags and make new page better a bit --- config.toml | 9 ++++-- src/builder.rs | 43 +++++++++++++++++++++++++--- src/new_page.rs | 4 +++ src/template.rs | 11 +++++++ src/templates/meta_tags/css_tag.html | 1 + src/templates/meta_tags/js_tag.html | 1 + 6 files changed, 63 insertions(+), 6 deletions(-) create mode 100644 src/templates/meta_tags/css_tag.html create mode 100644 src/templates/meta_tags/js_tag.html diff --git a/config.toml b/config.toml index 670f3cd..7d62119 100644 --- a/config.toml +++ b/config.toml @@ -2,8 +2,8 @@ website_name = "Test Website Name!" built_pages = ["test_page/about.toml", "test_page/other.toml"] use_default_css = true -javascript = [] -css = [] +javascript = ["test.js"] +css = ["test.css"] before_navbar_url = "test_page/resources/before_navbar.html" before_content_url = "test_page/resources/before_content.html" after_content_url = "test_page/resources/after_content.html" @@ -12,6 +12,11 @@ after_content_url = "test_page/resources/after_content.html" #google_robots = "all" #google_site_verification = "" +[resource.test] todo +source = "source_path" +destination = "destination_path" +is_recursive_folder = false + [navbar] items = ["about", "other", "google"] diff --git a/src/builder.rs b/src/builder.rs index d318681..7bc1fbe 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -12,6 +12,8 @@ const DEFAULT_CSS: &'static str = include_str!("templates/default-css.css"); const PAGE_TEMPLATE: &'static str = include_str!("templates/page-template.html"); const NAVBAR_ITEM: &'static str = include_str!("templates/navbar/item-template.html"); const NAVBAR_IMAGE_ITEM: &'static str = include_str!("templates/navbar/image-item-template.html"); +const CSS_TAG: &'static str = include_str!("templates/meta_tags/css_tag.html"); +const JS_TAG: &'static str = include_str!("templates/meta_tags/js_tag.html"); fn fetch_config() -> Result { match Config::new() { @@ -32,6 +34,8 @@ pub fn build(logger: &Logger, opt: &Opt, _: &BuildOpt) -> Result<(), Error> { logger.log(LogLevel::INFO, "Generating page templates"); let page_template = Template::new(PAGE_TEMPLATE); + let css_tag_template = Template::new(CSS_TAG); + let js_tag_template = Template::new(JS_TAG); let mut navbar_content = String::new(); if config.global_config.navbar.is_some() { @@ -46,14 +50,43 @@ pub fn build(logger: &Logger, opt: &Opt, _: &BuildOpt) -> Result<(), Error> { let configs = config.get_configs()?; let mut renders = Vec::new(); for config in configs.clone() { + logger.log( + LogLevel::DETAILER, + format!("Setting up to render {}", config.page_config.page.html_path), + ); + + // Generate CSS tagstags + logger.log(LogLevel::DETAILER, "Generating CSS tags"); + let mut css_string = String::new(); + let mut css_list = config.global_config.website.css.clone(); + if let Some(mut list) = config.page_config.page.css.clone() { + css_list.append(&mut list); + } + + for item in css_list { + let data = Template::css_tag_data_from(item); + css_string += &*css_tag_template.render(&data); + } + + // Generate JS tags + logger.log(LogLevel::DETAILER, "Generating JS tags"); + let mut js_string = String::new(); + let mut js_list = config.global_config.website.javascript.clone(); + if let Some(mut list) = config.page_config.page.javascript.clone() { + js_list.append(&mut list); + } + + for item in js_list { + let data = Template::css_tag_data_from(item); + js_string += &*js_tag_template.render(&data); + } + + // Generate and render Injections logger.log(LogLevel::DETAILER, "Rendering injections."); let (before_navbar, before_content, after_content) = renderer::render_injections(&logger, &config)?; - logger.log( - LogLevel::DETAILER, - format!("Rendering {}", config.page_config.page.html_path), - ); + logger.log(LogLevel::DETAILER, "Rendering"); let markdown = renderer::render_markdown_content(&config)?; let data = Template::page_data_from( @@ -62,6 +95,8 @@ pub fn build(logger: &Logger, opt: &Opt, _: &BuildOpt) -> Result<(), Error> { before_navbar, before_content, after_content, + css_string, + js_string, markdown, ); let rendered = page_template.render(&data); diff --git a/src/new_page.rs b/src/new_page.rs index 29c13af..926e460 100644 --- a/src/new_page.rs +++ b/src/new_page.rs @@ -108,6 +108,10 @@ pub fn generate_new_page(logger: &Logger, opt: &Opt, new_opt: &NewOpt) -> Result file_writer::write_file(&markdown_path, PLACEHOLDER_MARKDOWN, opt.overwrite)?; if !new_opt.no_modify_config { + if !opt.overwrite && PathBuf::from("config.toml").exists() { + return Err(Error::new(LogLevel::SEVERE, "Add --overwrite flag to overwrite config.toml, or --no-modify-config to not modify config.toml automatically.")); + } + logger.log( LogLevel::INFO, format!("Adding page config path to config.toml"), diff --git a/src/template.rs b/src/template.rs index 452a650..0fb3374 100644 --- a/src/template.rs +++ b/src/template.rs @@ -63,6 +63,12 @@ impl Template { result } + pub fn css_tag_data_from(link: String) -> Data { + hashmap!( + "link".to_owned() => link + ) + } + pub fn navbar_item_data_from(item: NavbarItem) -> Data { let map = hashmap!( "title".to_owned() => item.title, @@ -79,6 +85,8 @@ impl Template { before_navbar: String, before_content: String, after_content: String, + css_tags: String, + js_tags: String, content: String, ) -> Data { let favicon = config.page_config.page.favicon.unwrap_or( @@ -116,6 +124,9 @@ impl Template { "before_content".to_owned() => before_content, "after_content".to_owned() => after_content, + "css_links".to_owned() => css_tags, + "javascript_links".to_owned() => js_tags, + "use_default_css".to_owned() => config.global_config.website.use_default_css.to_string(), "navbar".to_owned() => config.global_config.navbar.is_some().to_string(), diff --git a/src/templates/meta_tags/css_tag.html b/src/templates/meta_tags/css_tag.html new file mode 100644 index 0000000..e6699e1 --- /dev/null +++ b/src/templates/meta_tags/css_tag.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/templates/meta_tags/js_tag.html b/src/templates/meta_tags/js_tag.html new file mode 100644 index 0000000..10d8897 --- /dev/null +++ b/src/templates/meta_tags/js_tag.html @@ -0,0 +1 @@ + \ No newline at end of file