Created
January 27, 2016 16:03
-
-
Save back2dos/24c4fa427f49a2a05afd to your computer and use it in GitHub Desktop.
Walk trees.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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