use matching::ElementFlags;
use parser::{AttrSelector, SelectorImpl};
use string_cache::{Atom, Namespace};
pub trait Element: Sized {
type Impl: SelectorImpl;
fn parent_element(&self) -> Option<Self>;
fn first_child_element(&self) -> Option<Self>;
fn last_child_element(&self) -> Option<Self>;
fn prev_sibling_element(&self) -> Option<Self>;
fn next_sibling_element(&self) -> Option<Self>;
fn is_html_element_in_html_document(&self) -> bool;
fn get_local_name<'a>(&'a self) -> &'a Atom;
fn get_namespace<'a>(&'a self) -> &'a Namespace;
fn match_non_ts_pseudo_class(&self, pc: <Self::Impl as SelectorImpl>::NonTSPseudoClass) -> bool;
fn get_id(&self) -> Option<Atom>;
fn has_class(&self, name: &Atom) -> bool;
fn match_attr<F>(&self, attr: &AttrSelector, test: F) -> bool where F: Fn(&str) -> bool;
fn is_empty(&self) -> bool;
fn is_root(&self) -> bool;
fn each_class<F>(&self, callback: F) where F: FnMut(&Atom);
fn insert_flags(&self, _flags: ElementFlags) {}
}