2 bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
6 KeyHandler = (function() {
7 var DOWN, LEFT, RIGHT, UP;
17 function KeyHandler(tree_widget) {
18 this.selectNode = bind(this.selectNode, this);
19 this.tree_widget = tree_widget;
20 if (tree_widget.options.keyboardSupport) {
21 $(document).bind('keydown.jqtree', $.proxy(this.handleKeyDown, this));
25 KeyHandler.prototype.deinit = function() {
26 return $(document).unbind('keydown.jqtree');
29 KeyHandler.prototype.moveDown = function() {
31 node = this.tree_widget.getSelectedNode();
33 return this.selectNode(node.getNextNode());
39 KeyHandler.prototype.moveUp = function() {
41 node = this.tree_widget.getSelectedNode();
43 return this.selectNode(node.getPreviousNode());
49 KeyHandler.prototype.moveRight = function() {
51 node = this.tree_widget.getSelectedNode();
54 } else if (!node.isFolder()) {
58 return this.selectNode(node.getNextNode());
60 this.tree_widget.openNode(node);
66 KeyHandler.prototype.moveLeft = function() {
68 node = this.tree_widget.getSelectedNode();
71 } else if (node.isFolder() && node.is_open) {
72 this.tree_widget.closeNode(node);
75 return this.selectNode(node.getParent());
79 KeyHandler.prototype.handleKeyDown = function(e) {
81 if (!this.tree_widget.options.keyboardSupport) {
84 if ($(document.activeElement).is('textarea,input,select')) {
87 if (!this.tree_widget.getSelectedNode()) {
93 return this.moveDown();
97 return this.moveRight();
99 return this.moveLeft();
104 KeyHandler.prototype.selectNode = function(node) {
108 this.tree_widget.selectNode(node);
109 if (this.tree_widget.scroll_handler && (!this.tree_widget.scroll_handler.isScrolledIntoView($(node.element).find('.jqtree-element')))) {
110 this.tree_widget.scrollToNode(node);
120 module.exports = KeyHandler;