virtual-node 0.5.0

A standalone Virtual DOM
Documentation
use crate::VElement;

use crate::event::{insert_non_delegated_event, set_events_id, ElementEventsId, VirtualEvents};
use web_sys::Element;

use crate::event::ELEMENT_EVENTS_ID_PROP;
use js_sys::Reflect;

impl VElement {
    pub(super) fn add_events(
        &self,
        element: &Element,
        events: &VirtualEvents,
        events_id: ElementEventsId,
    ) {
        set_events_id(element, events, events_id);
        Reflect::set(
            element,
            &ELEMENT_EVENTS_ID_PROP.into(),
            &format!("{}{}", events.events_id_props_prefix(), events_id.get()).into(),
        )
        .unwrap();

        let needs_create_closures = self.events.has_events();
        if needs_create_closures {
            for (onevent, callback) in self.events.events() {
                if onevent.is_delegated() {
                    events.insert_event(events_id, onevent.clone(), callback.clone(), None);
                } else {
                    insert_non_delegated_event(element, onevent, callback, events_id, events);
                }
            }
        }
    }
}