+++ /dev/null
-/**
- * The class tree
- */
-Ext.define('Docs.view.tree.Tree', {
- extend: 'Ext.tree.Panel',
- alias : 'widget.classtree',
- requires: [
- 'Docs.view.HoverMenuButton',
- 'Docs.Favorites',
- 'Docs.History'
- ],
-
- cls: 'class-tree iScroll',
- folderSort: true,
- useArrows: true,
- rootVisible: false,
-
- border: false,
- bodyBorder: false,
-
- initComponent: function() {
- this.addEvents(
- /**
- * @event
- * Fired when class in tree was clicked on and needs to be loaded.
- * @param {String} cls name of the class.
- */
- "classclick"
- );
-
- // Expand the main tree
- this.root.expanded = true;
- this.root.children[0].expanded = true;
-
- this.on("itemclick", this.onItemClick, this);
-
- this.dockedItems = [
- {
- xtype: 'container',
- layout: 'hbox',
- dock: 'top',
- margin: '0 0 15 0',
- items: [
- {
- xtype: 'hovermenubutton',
- cls: 'icon-fav sidebar',
- text: 'Favorites',
- menuCfg: {
- cls: 'sidebar',
- emptyText: 'No favorites',
- showCloseButtons: true
- },
- store: Ext.getStore('Favorites'),
- listeners: {
- closeclick: function(cls) {
- Docs.Favorites.remove(cls);
- }
- }
- },
- {
- xtype: 'hovermenubutton',
- cls: 'icon-hist sidebar',
- text: 'History',
- menuCfg: {
- cls: 'sidebar',
- emptyText: 'No history',
- showCloseButtons: true
- },
- store: Ext.getStore('History'),
- listeners: {
- closeclick: function(cls) {
- Docs.History.removeClass(cls);
- }
- }
- }
- ]
- }
- ];
-
- this.callParent();
-
- // Add links for favoriting classes
- //
- // We should be able to just listen the "render" event of tee,
- // but for some reason the tree nodes aren't quite ready when
- // "render" fires (setting text on node will cause an
- // exception because the actual dom node seems to be missing,
- // although setting text on the currently hidden nodes will
- // work). I found a workaround by listening the "refresh"
- // event which seems to first fire when all tree nodes are
- // ready. Most ceartanly a big hack.
- //
- // Additionally all this is done after callParent, because the
- // getRootNode() will work after initComponent has run.
- // Probably not neccessary, because "refresh" should happen
- // after that anyway, but just to play it safe.
- Docs.Favorites.setTree(this);
- Ext.getStore("Favorites").on("load", function() {
- this.getView().on("refresh", function(){
- this.getRootNode().cascadeBy(this.addFavIcons, this);
- }, this, {single: true});
- }, this);
- },
-
- addFavIcons: function(node) {
- if (node.get("leaf")) {
- var cls = node.raw.clsName;
- var show = Docs.Favorites.has(cls) ? "show" : "";
- node.set("text", node.get("text") + Ext.String.format('<a rel="{0}" class="fav {1}"></a>', cls, show));
- node.commit();
- }
- },
-
- onItemClick: function(view, node, item, index, e) {
- var clsName = node.raw ? node.raw.clsName : node.data.clsName;
-
- if (clsName) {
- if (e.getTarget(".fav")) {
- var favEl = Ext.get(e.getTarget(".fav"));
- if (favEl.hasCls('show')) {
- Docs.Favorites.remove(clsName);
- }
- else {
- Docs.Favorites.add(clsName);
- }
- }
- else {
- this.fireEvent("classclick", clsName);
- }
- }
- else if (!node.isLeaf()) {
- if (node.isExpanded()) {
- node.collapse(false);
- }
- else {
- node.expand(false);
- }
- }
- },
-
- /**
- * Selects class node in tree by name.
- *
- * @param {String} cls
- */
- selectClass: function(cls) {
- var r = this.findRecordByClassName(cls);
- if (r) {
- this.getSelectionModel().select(r);
- r.bubble(function(n) {
- n.expand();
- });
- }
- },
-
- /**
- * Sets favorite status of class on or off.
- *
- * @param {String} cls name of the class
- * @param {Boolean} enable true to mark class as favorite.
- */
- setFavorite: function(cls, enable) {
- var r = this.findRecordByClassName(cls);
- if (r) {
- var show = enable ? "show" : "";
- r.set("text", r.get("text").replace(/class="fav *(show)?"/, 'class="fav '+show+'"'));
- r.commit();
- }
- },
-
- findRecordByClassName: function(cls) {
- return this.getRootNode().findChildBy(function(n) {
- return cls === n.raw.clsName;
- }, this, true);
- }
-});