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/countries.rs
//! Country name resolution from ISO 3166-1 alpha-2 codes.
//!
//! Re-exports core functions from [`crate::countries`] and adds
//! HTML-specific helpers (jurisdiction formatting, slug extraction).
use crate::domain::Jurisdiction;
// Re-export core functions so existing `use super::countries::*` in HTML modules still works.
pub(crate) use crate::countries::{country_name, is_special_scope};
/// Extract a country or scope code from a case slug like `cases/id/corruption/2024/...`.
///
/// Returns the second path segment when it is a valid jurisdiction code
/// (2-letter ISO country code or special scope like `multinational`, `int`).
pub(crate) fn extract_country_from_case_slug(slug: &str) -> Option<String> {
let parts: Vec<&str> = slug.split('/').collect();
if parts.len() >= 2 {
let candidate = parts[1];
if crate::countries::is_valid_jurisdiction_code(candidate) {
return Some(candidate.to_string());
}
}
None
}
/// Format jurisdiction as linked HTML (country part links to /countries/{code}).
/// Special scopes (INT, EU, MULTINATIONAL) are NOT linked.
pub(crate) fn format_jurisdiction_linked(j: &Jurisdiction) -> String {
let country_display = country_name(&j.country);
let country_html = if is_special_scope(&j.country) {
country_display
} else {
format!(
"<a href=\"/countries/{}\" class=\"loom-country-link\">{}</a>",
j.country.to_lowercase(),
country_display
)
};
match &j.subdivision {
Some(sub) => format!("{country_html}, {sub}"),
None => country_html,
}
}
pub(crate) fn format_jurisdiction(j: &Jurisdiction) -> String {
let country = country_name(&j.country);
match &j.subdivision {
Some(sub) => format!("{country}, {sub}"),
None => country,
}
}