diff --git a/Cargo.lock b/Cargo.lock index 14e834d..7949417 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -690,12 +690,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "fs_extra" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" - [[package]] name = "fsevent-sys" version = "4.1.0" @@ -1297,15 +1291,6 @@ version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" -[[package]] -name = "itertools" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" -dependencies = [ - "either", -] - [[package]] name = "itoa" version = "1.0.15" @@ -2652,21 +2637,9 @@ dependencies = [ "mio 1.0.4", "pin-project-lite", "socket2", - "tokio-macros", "windows-sys 0.52.0", ] -[[package]] -name = "tokio-macros" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.101", -] - [[package]] name = "tokio-tungstenite" version = "0.21.0" @@ -3019,19 +2992,17 @@ dependencies = [ [[package]] name = "webdog" -version = "0.1.2" +version = "0.1.3" dependencies = [ "clap", "color-eyre", "extract-frontmatter", "eyre", - "fs_extra", "futures", "grass", "hotwatch", "html5ever 0.31.0", "include_dir", - "itertools", "kuchikiki", "lol_html", "minifier", diff --git a/Cargo.toml b/Cargo.toml index 78542fe..1148bfe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,20 +6,18 @@ license = "AGPL-3.0-or-later" name = "webdog" readme = "README.md" repository = "https://github.com/zyllian/webdog" -version = "0.1.2" +version = "0.1.3" [dependencies] clap = { version = "4", features = ["derive"] } color-eyre = { version = "0.6", optional = true } extract-frontmatter = "4" eyre = "0.6" -fs_extra = "1.2" futures = { version = "0.3", optional = true } grass = { version = "0.13", default-features = false } hotwatch = { version = "0.5", optional = true } html5ever = "0.31" include_dir = "0.7" -itertools = "0.14" kuchikiki = "0.8.8-speedreader" lol_html = "2" minifier = { version = "0.3", features = ["html"] } @@ -35,10 +33,7 @@ serde_yaml_ng = "0.10" syntect = "5" tera = "1" time = { version = "0.3", features = ["serde-human-readable"] } -tokio = { version = "1", features = [ - "macros", - "rt-multi-thread", -], optional = true } +tokio = { version = "1", features = ["rt-multi-thread"], optional = true } url = { version = "2", features = ["serde"] } walkdir = "2" warp = { version = "0.3", optional = true } diff --git a/src/builder.rs b/src/builder.rs index d08a916..7ca49a6 100644 --- a/src/builder.rs +++ b/src/builder.rs @@ -2,15 +2,15 @@ use std::{collections::HashMap, path::PathBuf}; -use eyre::{eyre, Context, OptionExt}; -use lol_html::{element, html_content::ContentType, HtmlRewriter, Settings}; +use eyre::{Context, OptionExt, eyre}; +use lol_html::{HtmlRewriter, Settings, element, html_content::ContentType}; use rayon::prelude::*; use serde::Serialize; use syntect::{highlighting::ThemeSet, parsing::SyntaxSet}; use tera::Tera; use url::Url; -use crate::{resource::ResourceBuilder, util, PageMetadata, Site, ROOT_PATH, SASS_PATH}; +use crate::{PageMetadata, ROOT_PATH, SASS_PATH, Site, resource::ResourceBuilder, util}; /// Default path for static webdog resources included with the site build. const WEBDOG_DEFAULT_PATH: &str = "webdog"; @@ -161,6 +161,7 @@ impl SiteBuilder { } /// Function to rewrite HTML wow. + #[allow(clippy::too_many_arguments)] pub fn rewrite_html( &self, html: String, @@ -169,6 +170,7 @@ impl SiteBuilder { scripts: &[String], styles: &[String], is_partial: bool, + webdog_path: &str, ) -> eyre::Result { use kuchikiki::traits::*; @@ -257,7 +259,9 @@ impl SiteBuilder { ); } el.append( - r#""#, + &format!( + r#""# + ), ContentType::Html, ); if self.serving { @@ -383,6 +387,12 @@ impl SiteBuilder { &page_metadata.scripts, &page_metadata.styles, page_metadata.is_partial, + &self + .site + .config + .webdog_path + .clone() + .unwrap_or_else(|| WEBDOG_DEFAULT_PATH.to_string()), )?; if let Some(data) = extra { diff --git a/src/extras.rs b/src/extras.rs index 94250bd..60e1d93 100644 --- a/src/extras.rs +++ b/src/extras.rs @@ -1,5 +1,4 @@ -use itertools::Itertools; -use lol_html::{element, RewriteStrSettings}; +use lol_html::{RewriteStrSettings, element}; use serde::{Deserialize, Serialize}; use crate::{builder::SiteBuilder, resource::ResourceTemplateData}; @@ -111,10 +110,12 @@ fn resource_list_outside( ) .map(|ts| (id, v, ts)) }) - .map_ok(|(id, v, ts)| ResourceTemplateData { - resource: v, - id: id.clone(), - readable_timestamp: ts, + .map(|v| { + v.map(|(id, v, ts)| ResourceTemplateData { + resource: v, + id: id.clone(), + readable_timestamp: ts, + }) }) .collect::>>()?, })?, diff --git a/src/resource.rs b/src/resource.rs index a59a4f7..f04f8a3 100644 --- a/src/resource.rs +++ b/src/resource.rs @@ -4,17 +4,16 @@ use std::{ }; use eyre::Context; -use itertools::Itertools; -use rss::{validation::Validate, ChannelBuilder, ItemBuilder}; +use rss::{ChannelBuilder, ItemBuilder, validation::Validate}; use serde::{Deserialize, Serialize}; -use time::{format_description::well_known::Rfc2822, OffsetDateTime}; +use time::{OffsetDateTime, format_description::well_known::Rfc2822}; use crate::{ + PageMetadata, builder::SiteBuilder, frontmatter::FrontMatterRequired, link_list::Link, util::{self, format_timestamp}, - PageMetadata, }; /// Metadata for resources. @@ -319,7 +318,7 @@ impl ResourceBuilder { let page_max = list.len() / items_per_page + (list.len() % items_per_page).min(1); let mut previous = None; let mut next; - for (page, iter) in list.iter().chunks(items_per_page).into_iter().enumerate() { + for (page, iter) in list.chunks(items_per_page).enumerate() { next = (page + 1 != page_max).then_some(page + 2); let out = builder.build_page_raw( PageMetadata { @@ -329,7 +328,7 @@ impl ResourceBuilder { }, "", ResourceListTemplateData { - resources: iter.copied().collect(), + resources: iter.to_vec(), tag, rss_enabled: config.rss.is_some(), page: page + 1, @@ -372,7 +371,7 @@ impl ResourceBuilder { // Build list of tags { - let links = tags + let mut links: Vec<_> = tags .iter() .map(|(tag, data)| { let count = data.len(); @@ -384,9 +383,9 @@ impl ResourceBuilder { count, ) }) - .sorted_by(|(_, a), (_, b)| b.cmp(a)) - .map(|(l, _)| l) .collect(); + links.sort_by(|(_, a), (_, b)| b.cmp(a)); + let links = links.into_iter().map(|(l, _)| l).collect(); let out = crate::link_list::render_basic_link_list( builder, &self.config.tag_list_template,