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/entity.rs
//! Person and organization entity page HTML fragment renderers.
use crate::output::NodeOutput;
use super::HtmlConfig;
use super::components::{render_cases_list, render_entity_detail};
use super::escape::{escape_attr, truncate};
use super::jsonld::{
build_org_og_description, build_person_og_description, render_org_json_ld,
render_person_json_ld,
};
use super::thumbnail::og_image_attr;
/// Generate a person page HTML fragment.
///
/// # Errors
///
/// Returns an error if the rendered HTML exceeds the size limit.
pub fn render_person(
node: &NodeOutput,
cases: &[(String, String)],
config: &HtmlConfig,
) -> Result<String, String> {
let mut html = String::with_capacity(4096);
let og_title = truncate(&node.name, 120);
let og_description = build_person_og_description(node);
html.push_str(&format!(
"<article class=\"loom-person\" itemscope itemtype=\"https://schema.org/Person\" \
data-og-title=\"{}\" \
data-og-description=\"{}\" \
data-og-type=\"profile\" \
data-og-url=\"/{}\"{}>\n",
escape_attr(&og_title),
escape_attr(&og_description),
escape_attr(node.slug.as_deref().unwrap_or(&node.id)),
og_image_attr(node.thumbnail.as_deref(), config),
));
render_entity_detail(&mut html, node, config);
render_cases_list(&mut html, cases);
render_person_json_ld(&mut html, node);
html.push_str("</article>\n");
super::check_size(&html)
}
/// Generate an organization page HTML fragment.
///
/// # Errors
///
/// Returns an error if the rendered HTML exceeds the size limit.
pub fn render_organization(
node: &NodeOutput,
cases: &[(String, String)],
config: &HtmlConfig,
) -> Result<String, String> {
let mut html = String::with_capacity(4096);
let og_title = truncate(&node.name, 120);
let og_description = build_org_og_description(node);
html.push_str(&format!(
"<article class=\"loom-organization\" itemscope itemtype=\"https://schema.org/Organization\" \
data-og-title=\"{}\" \
data-og-description=\"{}\" \
data-og-type=\"profile\" \
data-og-url=\"/{}\"{}>\n",
escape_attr(&og_title),
escape_attr(&og_description),
escape_attr(node.slug.as_deref().unwrap_or(&node.id)),
og_image_attr(node.thumbnail.as_deref(), config),
));
render_entity_detail(&mut html, node, config);
render_cases_list(&mut html, cases);
render_org_json_ld(&mut html, node);
html.push_str("</article>\n");
super::check_size(&html)
}