|
@@ -158,12 +158,12 @@ class IconTree<T:{}> extends Component {
|
|
});
|
|
});
|
|
element.on("open_node.jstree", function(event, e) {
|
|
element.on("open_node.jstree", function(event, e) {
|
|
var i = map.get(e.node.id);
|
|
var i = map.get(e.node.id);
|
|
- saveDisplayState(i.absKey, true);
|
|
|
|
|
|
+ if( filter == null ) saveDisplayState(i.absKey, true);
|
|
onToggle(getValue(i), true);
|
|
onToggle(getValue(i), true);
|
|
});
|
|
});
|
|
element.on("close_node.jstree", function(event,e) {
|
|
element.on("close_node.jstree", function(event,e) {
|
|
var i = map.get(e.node.id);
|
|
var i = map.get(e.node.id);
|
|
- saveDisplayState(i.absKey, false);
|
|
|
|
|
|
+ if( filter == null ) saveDisplayState(i.absKey, false);
|
|
onToggle(getValue(i), false);
|
|
onToggle(getValue(i), false);
|
|
});
|
|
});
|
|
element.on("refresh.jstree", function(_) {
|
|
element.on("refresh.jstree", function(_) {
|
|
@@ -207,6 +207,9 @@ class IconTree<T:{}> extends Component {
|
|
applyStyle(getValue(item), new Element(li));
|
|
applyStyle(getValue(item), new Element(li));
|
|
}
|
|
}
|
|
});
|
|
});
|
|
|
|
+ element.keydown(function(e:js.jquery.Event) {
|
|
|
|
+ if( e.keyCode == 27 ) closeFilter();
|
|
|
|
+ });
|
|
}
|
|
}
|
|
|
|
|
|
public function dispose() {
|
|
public function dispose() {
|
|
@@ -286,9 +289,13 @@ class IconTree<T:{}> extends Component {
|
|
public function searchFilter( flt : String ) {
|
|
public function searchFilter( flt : String ) {
|
|
this.filter = flt;
|
|
this.filter = flt;
|
|
if( filter == "" ) filter = null;
|
|
if( filter == "" ) filter = null;
|
|
- if( filter != null )
|
|
|
|
|
|
+ if( filter != null ) {
|
|
filter = filter.toLowerCase();
|
|
filter = filter.toLowerCase();
|
|
-
|
|
|
|
|
|
+ // open all nodes that might contain data
|
|
|
|
+ for( id => v in map )
|
|
|
|
+ if( v.text.toLowerCase().indexOf(filter) >= 0 )
|
|
|
|
+ (element:Dynamic).jstree('_open_to', id);
|
|
|
|
+ }
|
|
var lines = element.find(".jstree-node");
|
|
var lines = element.find(".jstree-node");
|
|
lines.removeClass("filtered");
|
|
lines.removeClass("filtered");
|
|
if( filter != null ) {
|
|
if( filter != null ) {
|
|
@@ -305,6 +312,18 @@ class IconTree<T:{}> extends Component {
|
|
|
|
|
|
var searchBox : Element;
|
|
var searchBox : Element;
|
|
|
|
|
|
|
|
+ public function closeFilter() {
|
|
|
|
+ if( searchBox != null ) {
|
|
|
|
+ searchBox.remove();
|
|
|
|
+ searchBox = null;
|
|
|
|
+ }
|
|
|
|
+ if( filter != null ) {
|
|
|
|
+ searchFilter(null);
|
|
|
|
+ var sel = getSelection();
|
|
|
|
+ refresh(() -> setSelection(sel));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
public function openFilter() {
|
|
public function openFilter() {
|
|
if( async ) {
|
|
if( async ) {
|
|
async = false;
|
|
async = false;
|
|
@@ -312,7 +331,7 @@ class IconTree<T:{}> extends Component {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
if( searchBox == null ) {
|
|
if( searchBox == null ) {
|
|
- searchBox = new Element("<div>").addClass("searchBox").appendTo(element);
|
|
|
|
|
|
+ searchBox = new Element("<div>").addClass("searchBox").prependTo(element);
|
|
new Element("<input type='text'>").appendTo(searchBox).keydown(function(e) {
|
|
new Element("<input type='text'>").appendTo(searchBox).keydown(function(e) {
|
|
if( e.keyCode == 27 ) {
|
|
if( e.keyCode == 27 ) {
|
|
searchBox.find("i").click();
|
|
searchBox.find("i").click();
|
|
@@ -322,9 +341,7 @@ class IconTree<T:{}> extends Component {
|
|
searchFilter(e.getThis().val());
|
|
searchFilter(e.getThis().val());
|
|
});
|
|
});
|
|
new Element("<i>").addClass("fa fa-times-circle").appendTo(searchBox).click(function(_) {
|
|
new Element("<i>").addClass("fa fa-times-circle").appendTo(searchBox).click(function(_) {
|
|
- searchFilter(null);
|
|
|
|
- searchBox.remove();
|
|
|
|
- searchBox = null;
|
|
|
|
|
|
+ closeFilter();
|
|
});
|
|
});
|
|
}
|
|
}
|
|
searchBox.show();
|
|
searchBox.show();
|