Skip to content
This repository was archived by the owner on Sep 6, 2021. It is now read-only.

Commit f9667cb

Browse files
committed
Merge pull request #7026 from zaggino/collapse-tree
Added 'Collapse File Tree' feature
2 parents 528ef38 + f265e74 commit f9667cb

1 file changed

Lines changed: 43 additions & 0 deletions

File tree

src/project/ProjectManager.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -670,7 +670,50 @@ define(function (require, exports, module) {
670670
// install scroller shadows
671671
ViewUtils.addScrollerShadow(_projectTree.get(0));
672672

673+
var findEventHandler = function (type, namespace, selector) {
674+
var events = $._data(_projectTree[0], "events"),
675+
eventsForType = events ? events[type] : null,
676+
event = eventsForType ? _.find(eventsForType, function (e) {
677+
return e.namespace === namespace && e.selector === selector;
678+
}) : null,
679+
eventHandler = event ? event.handler : null;
680+
if (!eventHandler) {
681+
console.error(type + "." + namespace + " " + selector + " handler not found!");
682+
}
683+
return eventHandler;
684+
};
685+
var createCustomHandler = function(originalHandler) {
686+
return function (event) {
687+
var $node = $(event.target).parent("li"),
688+
methodName;
689+
if (event.ctrlKey || event.metaKey) {
690+
if (event.altKey) {
691+
// collapse subtree
692+
// note: expanding using open_all is a bad idea due to poor performance
693+
methodName = $node.is(".jstree-open") ? "close_all" : "open_node";
694+
_projectTree.jstree(methodName, $node);
695+
return;
696+
} else {
697+
// toggle siblings
698+
methodName = $node.is(".jstree-open") ? "close_node" : "open_node";
699+
$node.parent().children("li").each(function () {
700+
_projectTree.jstree(methodName, $(this));
701+
});
702+
return;
703+
}
704+
}
705+
// original behaviour
706+
originalHandler.apply(this, arguments);
707+
};
708+
};
709+
var originalHrefHandler = findEventHandler("click", "jstree", "a");
710+
var originalInsHandler = findEventHandler("click", "jstree", "li > ins");
711+
673712
_projectTree
713+
.off("click.jstree", "a")
714+
.on("click.jstree", "a", createCustomHandler(originalHrefHandler))
715+
.off("click.jstree", "li > ins")
716+
.on("click.jstree", "li > ins", createCustomHandler(originalInsHandler))
674717
.unbind("dblclick.jstree")
675718
.bind("dblclick.jstree", function (event) {
676719
var entry = $(event.target).closest("li").data("entry");

0 commit comments

Comments
 (0)