use super::{Arm, Component, Element, KeyedFor, NonKeyedFor, SubApp, Text, WebSysNode};
pub enum Node {
NeverChange(WebSysNode),
TextExpression(Text),
Element(Element),
NonKeyedFor(NonKeyedFor),
KeyedFor(KeyedFor),
Arm(Arm),
Component(Component),
SubApp(SubApp),
}
impl Node {
pub(crate) fn remove_and_get_next_sibling(
&mut self,
real_parent: &web_sys::Node,
) -> Option<web_sys::Node> {
match self {
Node::NeverChange(item) => item.remove_and_get_next_sibling(real_parent),
Node::TextExpression(item) => item.remove_and_get_next_sibling(real_parent),
Node::Element(item) => item.remove_and_get_next_sibling(real_parent),
Node::NonKeyedFor(ref mut item) => item.remove_and_get_next_sibling(real_parent),
Node::KeyedFor(ref mut item) => item.remove_and_get_next_sibling(real_parent),
Node::Arm(ref mut item) => item.remove_and_get_next_sibling(real_parent),
Node::Component(ref mut item) => item.remove_and_get_next_sibling(real_parent),
Node::SubApp(_) => None,
}
}
pub(crate) fn remove_real_node(&mut self, real_parent: &web_sys::Node) {
match self {
Node::NeverChange(item) => item.remove_real_node(real_parent),
Node::TextExpression(item) => item.remove_real_node(real_parent),
Node::Element(item) => item.remove_real_node(real_parent),
Node::NonKeyedFor(item) => item.remove_real_node(real_parent),
Node::KeyedFor(item) => item.remove_real_node(real_parent),
Node::Arm(item) => item.remove_real_node(real_parent),
Node::Component(item) => item.remove_real_node(real_parent),
Node::SubApp(item) => item.remove_real_node(real_parent),
}
}
pub fn get_next_sibling(&self) -> Option<web_sys::Node> {
match self {
Node::NeverChange(item) => item.get_next_sibling(),
Node::TextExpression(item) => item.get_next_sibling(),
Node::Element(item) => item.get_next_sibling(),
Node::NonKeyedFor(item) => item.get_next_sibling(),
Node::KeyedFor(item) => item.get_next_sibling(),
Node::Arm(item) => item.get_next_sibling(),
Node::Component(item) => item.get_next_sibling(),
Node::SubApp(_) => None,
}
}
pub fn get_first_real_node(&self) -> Option<&web_sys::Node> {
match self {
Node::NeverChange(item) => item.get_first_real_node(),
Node::TextExpression(item) => item.get_first_real_node(),
Node::Element(item) => item.get_first_real_node(),
Node::NonKeyedFor(item) => item.get_first_real_node(),
Node::KeyedFor(item) => item.get_first_real_node(),
Node::Arm(item) => item.get_first_real_node(),
Node::Component(item) => item.get_first_real_node(),
Node::SubApp(_) => None,
}
}
pub(super) fn clone(&self, real_parent: &web_sys::Node) -> Self {
match self {
Node::NeverChange(item) => Node::NeverChange(item.clone(real_parent)),
Node::TextExpression(item) => Node::TextExpression(item.clone(real_parent)),
Node::Element(item) => Node::Element(item.clone(real_parent)),
Node::NonKeyedFor(item) => Node::NonKeyedFor(item.clone(real_parent)),
Node::KeyedFor(item) => Node::KeyedFor(item.clone(real_parent)),
Node::Arm(item) => Node::Arm(item.clone(real_parent)),
Node::Component(item) => Node::Component(item.clone(real_parent)),
Node::SubApp(_) => unreachable!(),
}
}
pub(super) fn start_clone(&self) -> Self {
match self {
Node::NeverChange(item) => Node::NeverChange(item.start_clone()),
Node::TextExpression(item) => Node::TextExpression(item.start_clone()),
Node::Element(item) => Node::Element(item.start_clone()),
Node::NonKeyedFor(item) => Node::NonKeyedFor(item.start_clone()),
Node::KeyedFor(item) => Node::KeyedFor(item.start_clone()),
Node::Arm(item) => Node::Arm(item.start_clone()),
Node::Component(item) => Node::Component(item.start_clone()),
Node::SubApp(_) => unreachable!(),
}
}
}