hypermedia 0.0.0

hypermedia utilities
Documentation
use super::*;

pub trait Select {
  fn select<T: JsCast>(&self, selector: &str) -> T;

  fn select_optional<T: JsCast>(&self, selector: &str) -> Option<T>;

  fn select_all<T: JsCast>(&self, selector: &str) -> Vec<T>;
}

impl<D: Deref<Target = DocumentFragment>> Select for D {
  fn select<T: JsCast>(&self, selector: &str) -> T {
    self
      .select_optional::<T>(selector)
      .expect("selector returned no elements")
  }

  fn select_optional<T: JsCast>(&self, selector: &str) -> Option<T> {
    self
      .query_selector(selector)
      .expect("invalid selector")
      .map(|element| element.cast::<T>())
  }

  fn select_all<T: JsCast>(&self, selector: &str) -> Vec<T> {
    let list = self.query_selector_all(selector).expect("invalid selector");
    let mut nodes = Vec::new();
    for i in 0..list.length() {
      let node = list.item(i).unwrap();
      nodes.push(node.cast::<T>());
    }
    nodes
  }
}