Skip to content

Instantly share code, notes, and snippets.

@back2dos
Created January 27, 2016 16:03
Show Gist options
  • Select an option

  • Save back2dos/24c4fa427f49a2a05afd to your computer and use it in GitHub Desktop.

Select an option

Save back2dos/24c4fa427f49a2a05afd to your computer and use it in GitHub Desktop.
Walk trees.
import js.html.Element;
interface TreeWalker<T, Cls> {
function attr(target:T, name:String):String;
function hasClass(target:T, cls:Cls):Bool;
function parent(target:T):Null<T>;
function prev(target:T):Null<T>;
function next(target:T):Null<T>;
function firstChild(target:T):Null<T>;
}
class DomWalker implements TreeWalker<Element, String> {
public function hasClass(target:Element, cls:String):Bool
return target.classList.contains(cls);
public function attr(target:Element, name:String):String
return target.getAttribute(name);
public function parent(target:Element):Null<Element>
return target.parentElement;
public function prev(target:Element):Null<Element>
return target.previousElementSibling;
public function next(target:Element):Null<Element>
return target.nextElementSibling;
public function firstChild(target:Element):Null<Element>
return target.nextElementSibling;
}
class WalkUp<T, Cls> {
var cur:T;
var walker:TreeWalker<T, Cls>;
public inline function new(cur, walker) {
this.walker = walker;
this.cur = walker.parent(cur);
}
public inline function hasNext()
return cur != null;
public inline function next() {
var ret = cur;
cur = walker.parent(cur);
return ret;
}
}
class WalkPrev<T, Cls> {
var cur:T;
var walker:TreeWalker<T, Cls>;
public inline function new(cur, walker) {
this.walker = walker;
this.cur = walker.parent(cur);
}
public inline function hasNext()
return cur != null;
public inline function next() {
var ret = cur;
cur = walker.prev(cur);
return ret;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment