nexus site path corrected
[portal.git] / ecomp-portal-FE / client / bower_components / jqTree / lib / key_handler.js
1 var $, KeyHandler,
2   bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
3
4 $ = jQuery;
5
6 KeyHandler = (function() {
7   var DOWN, LEFT, RIGHT, UP;
8
9   LEFT = 37;
10
11   UP = 38;
12
13   RIGHT = 39;
14
15   DOWN = 40;
16
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));
22     }
23   }
24
25   KeyHandler.prototype.deinit = function() {
26     return $(document).unbind('keydown.jqtree');
27   };
28
29   KeyHandler.prototype.moveDown = function() {
30     var node;
31     node = this.tree_widget.getSelectedNode();
32     if (node) {
33       return this.selectNode(node.getNextNode());
34     } else {
35       return false;
36     }
37   };
38
39   KeyHandler.prototype.moveUp = function() {
40     var node;
41     node = this.tree_widget.getSelectedNode();
42     if (node) {
43       return this.selectNode(node.getPreviousNode());
44     } else {
45       return false;
46     }
47   };
48
49   KeyHandler.prototype.moveRight = function() {
50     var node;
51     node = this.tree_widget.getSelectedNode();
52     if (!node) {
53       return true;
54     } else if (!node.isFolder()) {
55       return true;
56     } else {
57       if (node.is_open) {
58         return this.selectNode(node.getNextNode());
59       } else {
60         this.tree_widget.openNode(node);
61         return false;
62       }
63     }
64   };
65
66   KeyHandler.prototype.moveLeft = function() {
67     var node;
68     node = this.tree_widget.getSelectedNode();
69     if (!node) {
70       return true;
71     } else if (node.isFolder() && node.is_open) {
72       this.tree_widget.closeNode(node);
73       return false;
74     } else {
75       return this.selectNode(node.getParent());
76     }
77   };
78
79   KeyHandler.prototype.handleKeyDown = function(e) {
80     var key;
81     if (!this.tree_widget.options.keyboardSupport) {
82       return true;
83     }
84     if ($(document.activeElement).is('textarea,input,select')) {
85       return true;
86     }
87     if (!this.tree_widget.getSelectedNode()) {
88       return true;
89     }
90     key = e.which;
91     switch (key) {
92       case DOWN:
93         return this.moveDown();
94       case UP:
95         return this.moveUp();
96       case RIGHT:
97         return this.moveRight();
98       case LEFT:
99         return this.moveLeft();
100     }
101     return true;
102   };
103
104   KeyHandler.prototype.selectNode = function(node) {
105     if (!node) {
106       return true;
107     } else {
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);
111       }
112       return false;
113     }
114   };
115
116   return KeyHandler;
117
118 })();
119
120 module.exports = KeyHandler;