Packages
rbt_weave
0.2.67
0.2.67
0.2.66
0.2.65
0.2.64
0.2.63
0.2.62
0.2.61
0.2.60
0.2.59
0.2.58
0.2.57
0.2.56
0.2.55
0.2.54
0.2.53
0.2.52
0.2.51
0.2.50
0.2.49
0.2.48
0.2.47
0.2.46
0.2.45
0.2.44
0.2.43
0.2.42
0.2.41
0.2.40
0.2.39
0.2.38
0.2.37
0.2.36
0.2.35
0.2.34
0.2.33
0.2.32
0.2.31
0.2.30
0.2.29
0.2.28
0.2.27
0.2.26
0.2.25
0.2.24
0.2.23
0.2.22
0.2.21
0.2.20
0.2.19
0.2.18
0.2.17
0.2.16
0.2.15
0.2.14
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.0
Graph conflict detection and image processing NIFs for OSINT knowledge graphs, powered by Rust.
Current section
Files
Jump to
Current section
Files
crates/weave-content/src/html/mod.rs
//! Static HTML generator for case and entity pages.
//!
//! Produces semantic HTML fragments (no `<html>`/`<head>`/`<body>` wrapper)
//! suitable for embedding in a Phoenix layout. Each fragment includes
//! `data-og-*` attributes on the root element for meta tag extraction,
//! Schema.org microdata, and a `<script type="application/ld+json">` block.
//!
//! # Module structure
//!
//! - [`case`] — case page renderer
//! - [`entity`] — person and organization page renderers
//! - [`pages`] — tag, country, and sitemap page renderers
//! - [`components`] — reusable section renderers (sources, timeline, etc.)
//! - [`countries`] — ISO 3166-1 country name resolution
//! - [`escape`] — HTML escaping and inline markdown
//! - [`thumbnail`] — thumbnail URL rewriting
//! - [`dl`] — definition list field helpers
//! - [`jsonld`] — JSON-LD structured data builders
#![allow(clippy::format_push_string)]
mod case;
mod components;
pub(crate) mod countries;
mod dl;
mod entity;
pub(crate) mod escape;
mod jsonld;
mod pages;
mod thumbnail;
// Re-export the public API (preserving backward compatibility)
pub use case::render_case;
pub use entity::{render_organization, render_person};
pub use pages::{
CountryIndexEntry, TagCaseEntry, TagIndexEntry, render_countries_index, render_country_page,
render_sitemap, render_tag_page, render_tag_page_scoped, render_tags_index,
};
/// Configuration for HTML generation.
#[derive(Debug, Default, Clone)]
pub struct HtmlConfig {
/// Base URL for rewriting thumbnail image sources.
///
/// When set, original thumbnail URLs are rewritten to
/// `{base_url}/thumbnails/{sha256_hex[0..32]}.webp` using the same
/// deterministic key as `weave-image::thumbnail_key`.
///
/// Example: `http://files.web.garage.localhost:3902`
pub thumbnail_base_url: Option<String>,
}
/// Maximum size for a single HTML fragment file (2 MB).
const MAX_FRAGMENT_BYTES: usize = 2_097_152;
fn check_size(html: &str) -> Result<String, String> {
if html.len() > MAX_FRAGMENT_BYTES {
Err(format!(
"HTML fragment exceeds {MAX_FRAGMENT_BYTES} bytes ({} bytes)",
html.len()
))
} else {
Ok(html.to_string())
}
}
#[cfg(test)]
mod tests;