nexus site path corrected
[portal.git] / ecomp-portal-FE / client / bower_components / jqTree / lib / elements_renderer.js
1 var $, ElementsRenderer, NodeElement, html_escape, node_element, util;
2
3 node_element = require('./node_element');
4
5 NodeElement = node_element.NodeElement;
6
7 util = require('./util');
8
9 html_escape = util.html_escape;
10
11 $ = jQuery;
12
13 ElementsRenderer = (function() {
14   function ElementsRenderer(tree_widget) {
15     this.tree_widget = tree_widget;
16     this.opened_icon_element = this.createButtonElement(tree_widget.options.openedIcon);
17     this.closed_icon_element = this.createButtonElement(tree_widget.options.closedIcon);
18   }
19
20   ElementsRenderer.prototype.render = function(from_node) {
21     if (from_node && from_node.parent) {
22       return this.renderFromNode(from_node);
23     } else {
24       return this.renderFromRoot();
25     }
26   };
27
28   ElementsRenderer.prototype.renderFromRoot = function() {
29     var $element;
30     $element = this.tree_widget.element;
31     $element.empty();
32     return this.createDomElements($element[0], this.tree_widget.tree.children, true, true, 1);
33   };
34
35   ElementsRenderer.prototype.renderFromNode = function(node) {
36     var $previous_li, li;
37     $previous_li = $(node.element);
38     li = this.createLi(node, node.getLevel());
39     this.attachNodeData(node, li);
40     $previous_li.after(li);
41     $previous_li.remove();
42     if (node.children) {
43       return this.createDomElements(li, node.children, false, false, node.getLevel() + 1);
44     }
45   };
46
47   ElementsRenderer.prototype.createDomElements = function(element, children, is_root_node, is_open, level) {
48     var child, i, len, li, ul;
49     ul = this.createUl(is_root_node);
50     element.appendChild(ul);
51     for (i = 0, len = children.length; i < len; i++) {
52       child = children[i];
53       li = this.createLi(child, level);
54       ul.appendChild(li);
55       this.attachNodeData(child, li);
56       if (child.hasChildren()) {
57         this.createDomElements(li, child.children, false, child.is_open, level + 1);
58       }
59     }
60     return null;
61   };
62
63   ElementsRenderer.prototype.attachNodeData = function(node, li) {
64     node.element = li;
65     return $(li).data('node', node);
66   };
67
68   ElementsRenderer.prototype.createUl = function(is_root_node) {
69     var class_string, role, ul;
70     if (!is_root_node) {
71       class_string = '';
72       role = 'group';
73     } else {
74       class_string = 'jqtree-tree';
75       role = 'tree';
76       if (this.tree_widget.options.rtl) {
77         class_string += ' jqtree-rtl';
78       }
79     }
80     ul = document.createElement('ul');
81     ul.className = "jqtree_common " + class_string;
82     ul.setAttribute('role', role);
83     return ul;
84   };
85
86   ElementsRenderer.prototype.createLi = function(node, level) {
87     var is_selected, li;
88     is_selected = this.tree_widget.select_node_handler && this.tree_widget.select_node_handler.isNodeSelected(node);
89     if (node.isFolder()) {
90       li = this.createFolderLi(node, level, is_selected);
91     } else {
92       li = this.createNodeLi(node, level, is_selected);
93     }
94     if (this.tree_widget.options.onCreateLi) {
95       this.tree_widget.options.onCreateLi(node, $(li));
96     }
97     return li;
98   };
99
100   ElementsRenderer.prototype.createFolderLi = function(node, level, is_selected) {
101     var button_classes, button_link, div, folder_classes, icon_element, is_folder, li;
102     button_classes = this.getButtonClasses(node);
103     folder_classes = this.getFolderClasses(node, is_selected);
104     if (node.is_open) {
105       icon_element = this.opened_icon_element;
106     } else {
107       icon_element = this.closed_icon_element;
108     }
109     li = document.createElement('li');
110     li.className = "jqtree_common " + folder_classes;
111     li.setAttribute('role', 'presentation');
112     div = document.createElement('div');
113     div.className = "jqtree-element jqtree_common";
114     div.setAttribute('role', 'presentation');
115     li.appendChild(div);
116     button_link = document.createElement('a');
117     button_link.className = button_classes;
118     button_link.appendChild(icon_element.cloneNode(false));
119     button_link.setAttribute('role', 'presentation');
120     button_link.setAttribute('aria-hidden', 'true');
121     if (this.tree_widget.options.buttonLeft) {
122       div.appendChild(button_link);
123     }
124     div.appendChild(this.createTitleSpan(node.name, level, is_selected, node.is_open, is_folder = true));
125     if (!this.tree_widget.options.buttonLeft) {
126       div.appendChild(button_link);
127     }
128     return li;
129   };
130
131   ElementsRenderer.prototype.createNodeLi = function(node, level, is_selected) {
132     var class_string, div, is_folder, li, li_classes;
133     li_classes = ['jqtree_common'];
134     if (is_selected) {
135       li_classes.push('jqtree-selected');
136     }
137     class_string = li_classes.join(' ');
138     li = document.createElement('li');
139     li.className = class_string;
140     li.setAttribute('role', 'presentation');
141     div = document.createElement('div');
142     div.className = "jqtree-element jqtree_common";
143     div.setAttribute('role', 'presentation');
144     li.appendChild(div);
145     div.appendChild(this.createTitleSpan(node.name, level, is_selected, node.is_open, is_folder = false));
146     return li;
147   };
148
149   ElementsRenderer.prototype.createTitleSpan = function(node_name, level, is_selected, is_open, is_folder) {
150     var classes, title_span;
151     title_span = document.createElement('span');
152     classes = "jqtree-title jqtree_common";
153     if (is_folder) {
154       classes += " jqtree-title-folder";
155     }
156     title_span.className = classes;
157     title_span.setAttribute('role', 'treeitem');
158     title_span.setAttribute('aria-level', level);
159     title_span.setAttribute('aria-selected', util.getBoolString(is_selected));
160     title_span.setAttribute('aria-expanded', util.getBoolString(is_open));
161     if (is_selected) {
162       title_span.setAttribute('tabindex', 0);
163     }
164     title_span.innerHTML = this.escapeIfNecessary(node_name);
165     return title_span;
166   };
167
168   ElementsRenderer.prototype.getButtonClasses = function(node) {
169     var classes;
170     classes = ['jqtree-toggler', 'jqtree_common'];
171     if (!node.is_open) {
172       classes.push('jqtree-closed');
173     }
174     if (this.tree_widget.options.buttonLeft) {
175       classes.push('jqtree-toggler-left');
176     } else {
177       classes.push('jqtree-toggler-right');
178     }
179     return classes.join(' ');
180   };
181
182   ElementsRenderer.prototype.getFolderClasses = function(node, is_selected) {
183     var classes;
184     classes = ['jqtree-folder'];
185     if (!node.is_open) {
186       classes.push('jqtree-closed');
187     }
188     if (is_selected) {
189       classes.push('jqtree-selected');
190     }
191     if (node.is_loading) {
192       classes.push('jqtree-loading');
193     }
194     return classes.join(' ');
195   };
196
197   ElementsRenderer.prototype.escapeIfNecessary = function(value) {
198     if (this.tree_widget.options.autoEscape) {
199       return html_escape(value);
200     } else {
201       return value;
202     }
203   };
204
205   ElementsRenderer.prototype.createButtonElement = function(value) {
206     var div;
207     if (typeof value === 'string') {
208       div = document.createElement('div');
209       div.innerHTML = value;
210       return document.createTextNode(div.innerHTML);
211     } else {
212       return $(value)[0];
213     }
214   };
215
216   return ElementsRenderer;
217
218 })();
219
220 module.exports = ElementsRenderer;