mirror of
https://github.com/zyllian/webdog.git
synced 2025-06-27 08:56:49 -07:00
Compare commits
5 commits
Author | SHA1 | Date | |
---|---|---|---|
9125738498 | |||
230e22dbf8 | |||
abd591c8fa | |||
2330648b69 | |||
05d66c2143 |
5 changed files with 32 additions and 56 deletions
31
Cargo.lock
generated
31
Cargo.lock
generated
|
@ -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",
|
||||
|
|
|
@ -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 }
|
||||
|
|
|
@ -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<String> {
|
||||
use kuchikiki::traits::*;
|
||||
|
||||
|
@ -257,7 +259,9 @@ impl SiteBuilder {
|
|||
);
|
||||
}
|
||||
el.append(
|
||||
r#"<script type="text/javascript" src="/webdog/webdog.js" defer></script>"#,
|
||||
&format!(
|
||||
r#"<script type="text/javascript" src="/{webdog_path}/webdog.js" defer></script>"#
|
||||
),
|
||||
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 {
|
||||
|
|
|
@ -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::<eyre::Result<Vec<_>>>()?,
|
||||
})?,
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue