Add pending event listener on the VTag (#2300)

* Add pending event listener on the VTag

* Remove deprecated set_listener and rename add_listener

* Add return value comment
This commit is contained in:
Alexander Mescheryakov 2021-12-28 19:01:33 +03:00 committed by GitHub
parent 5181e1aca7
commit f0fb40650e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -8,6 +8,7 @@ use std::borrow::Cow;
use std::cmp::PartialEq;
use std::hint::unreachable_unchecked;
use std::marker::PhantomData;
use std::mem;
use std::ops::Deref;
use std::rc::Rc;
use wasm_bindgen::JsCast;
@ -430,8 +431,22 @@ impl VTag {
.insert(key, value.into_prop_value());
}
/// Add event listener on the [VTag]'s [Element].
/// Returns `true` if the listener has been added, `false` otherwise.
pub fn add_listener(&mut self, listener: Rc<dyn Listener>) -> bool {
if let Listeners::Pending(listeners) = &mut self.listeners {
let mut listeners = mem::take(listeners).into_vec();
listeners.push(Some(listener));
self.set_listeners(listeners.into_boxed_slice());
true
} else {
false
}
}
/// Set event listeners on the [VTag]'s [Element]
pub fn set_listener(&mut self, listeners: Box<[Option<Rc<dyn Listener>>]>) {
pub fn set_listeners(&mut self, listeners: Box<[Option<Rc<dyn Listener>>]>) {
self.listeners = Listeners::Pending(listeners);
}