--- /dev/null
+/**
+ * Class tree.
+ */
+Ext.define('Docs.ClassTree', {
+ extend: 'Ext.tree.Panel',
+
+ id: 'treePanelCmp',
+ cls: 'iScroll',
+ renderTo: 'treePanel',
+ folderSort: true,
+ useArrows: true,
+ rootVisible: false,
+
+ height: Ext.core.Element.getViewportHeight() - 170,
+ border: false,
+ bodyBorder: false,
+ padding: '0 0 0 20',
+
+ listeners: {
+ itemclick: function(view, node) {
+ var clsName = node.raw ? node.raw.clsName : node.data.clsName;
+
+ if (clsName) {
+ Docs.ClassLoader.load(clsName);
+ } else if (!node.isLeaf()) {
+ if (node.isExpanded()) {
+ node.collapse(false);
+ } else {
+ node.expand(false);
+ }
+ }
+ }
+ },
+
+ initComponent: function() {
+ // Expand the main tree
+ this.root.expanded = true;
+ this.root.children[0].expanded = true;
+ // Add links for favoriting classes
+ this.addFavIcons(this.root);
+
+ this.callParent();
+ },
+
+ addFavIcons: function(node) {
+ if (node.isClass) {
+ node.text += '<a rel="'+node.id+'" class="fav"></a>';
+ }
+ if (node.children) {
+ Ext.Array.forEach(node.children, this.addFavIcons, this);
+ }
+ },
+
+ /**
+ * Selects class node in tree by name.
+ *
+ * @param {String} className
+ */
+ selectClass: function(className) {
+ var classNode = this.getRootNode().findChildBy(function(n) {
+ return className === n.raw.clsName;
+ }, null, true);
+
+ if (classNode) {
+ this.getSelectionModel().select(classNode);
+ classNode.bubble(function(n) {
+ n.expand();
+ });
+ }
+ }
+});