use std::sync::Arc;
use crate::util::Utf16String;
use super::{DecoupledInjectedAttribute, DecoupledTemplateLogic};
pub struct DecoupledTemplateLogicMarkupHandler {
decoupled_template_logic: Arc<DecoupledTemplateLogic>,
inject_attributes: bool,
}
impl DecoupledTemplateLogicMarkupHandler {
#[must_use]
pub fn new(decoupled_template_logic: Arc<DecoupledTemplateLogic>) -> Self {
let inject_attributes = decoupled_template_logic.has_injected_attributes();
Self {
decoupled_template_logic,
inject_attributes,
}
}
#[must_use]
pub fn process_injected_attributes(
&self,
selectors: Option<&[Utf16String]>,
) -> Vec<Arc<DecoupledInjectedAttribute>> {
if !self.inject_attributes {
return Vec::new();
}
let Some(selectors) = selectors.filter(|values| !values.is_empty()) else {
return Vec::new();
};
let mut result = Vec::new();
for selector in selectors {
if let Some(attributes) = self
.decoupled_template_logic
.get_injected_attributes_for_selector(selector)
{
result.extend(attributes.iter().cloned());
}
}
result
}
}