fn transform_inside()

in rust/src/main.rs [236:282]


fn transform_inside(node: NodeRef) {
    let local_attrs: kuchiki::Attributes;
    if let kuchiki::NodeData::Element(x) = node.data() {
        local_attrs = x.clone().attributes.into_inner();
        {
            let mut x_attr = (x.attributes).borrow_mut();
            for (key, value) in x_attr.clone().map.into_iter() {
                // Remove all parameters that are not schema.org related
                if !(key.local.starts_with("item")
                    || key.local.starts_with("content")
                    || key.local.starts_with("date"))
                {
                    x_attr.remove(key.local);
                } else {
                    if value.value.len() < 1 {
                        x_attr.remove(key.local);
                    }
                }
            }
        }
        // Clean indide schema.org/Question tags
        if local_attrs.contains("itemprop") && !local_attrs.contains("itemtype") {
            if local_attrs.get("itemprop").unwrap() == "url" {
                node.detach();
            } else {
                inside_props(node.clone());
                remove_empty_nodes(node.clone());
                return;
            }
        }
    }
    // Post order traversal
    for child in node.children() {
        transform_inside(child.clone());
    }
    if let kuchiki::NodeData::Element(x) = node.data() {
        let x_attr = x.clone().attributes.into_inner();
        if !x_attr.contains("itemtype") && !x_attr.contains("itemprop") {
            for child in node.children() {
                node.insert_after(child)
            }
            node.detach();
        }
    } else {
        node.detach();
    }
}