livid/traits/
mod.rs

1mod group;
2mod input;
3mod widget_base;
4mod widget_ext;
5
6pub use group::*;
7pub use input::*;
8pub use widget_base::*;
9pub use widget_ext::*;
10
11use crate::widget::Widget;
12
13#[derive(Debug)]
14pub struct ElementIter {
15    list: web_sys::HtmlCollection,
16    index: u32,
17}
18
19pub trait IsElementIterable {
20    fn iter(&self) -> ElementIter;
21}
22
23impl IsElementIterable for web_sys::HtmlCollection {
24    fn iter(&self) -> ElementIter {
25        ElementIter {
26            list: self.clone(),
27            index: 0,
28        }
29    }
30}
31
32impl Iterator for ElementIter {
33    type Item = Widget;
34    fn next(&mut self) -> Option<Self::Item> {
35        if let Some(item) = self.list.item(self.index) {
36            self.index += 1;
37            Some(Widget::from_elem(item))
38        } else {
39            None
40        }
41    }
42}