/**
* Toolbar with menus providing quick access to class members.
*/
-Ext.define('Docs.OverviewToolbar', {
+Ext.define('Docs.view.cls.Toolbar', {
extend: 'Ext.toolbar.Toolbar',
+ requires: [
+ 'Docs.view.HoverMenuButton',
+ 'Docs.Settings'
+ ],
+
dock: 'top',
cls: 'member-links',
padding: '3 5',
initComponent: function() {
this.items = [];
+ this.memberButtons = {};
var memberTitles = {
cfg: "Configs",
event: "Events"
};
for (var type in memberTitles) {
- var members = this.docClass[type];
+ var members = this.docClass.members[type];
if (members.length) {
- this.items.push(this.createMemberButton({
- items: members,
+ var btn = this.createMemberButton({
+ text: memberTitles[type],
type: type,
- title: memberTitles[type]
- }));
+ members: members
+ });
+ this.memberButtons[type] = btn;
+ this.items.push(btn);
}
}
if (this.docClass.subclasses.length) {
- this.items.push(this.createSubClassesButton({
- items: this.docClass.subclasses,
- title: "Sub Classes"
- }));
+ this.items.push(this.createClassListButton("Sub Classes", this.docClass.subclasses));
+ }
+ if (this.docClass.mixedInto.length) {
+ this.items.push(this.createClassListButton("Mixed Into", this.docClass.mixedInto));
}
this.items = this.items.concat([
xtype: 'checkbox',
margin: '0 5 0 0',
padding: '0 0 5 0',
- handler: this.hideInherited
+ checked: Docs.Settings.get("hideInherited"),
+ handler: function(el) {
+ this.hideInherited(el.checked);
+ },
+ scope: this
},
{
xtype: 'button',
},
createMemberButton: function(cfg) {
- var menu = Ext.create('Ext.menu.Menu', {
- items: Ext.Array.map(cfg.items, function(m) {
- return {
- text: m.name,
- memberName: cfg.type + '-' + m.name
- };
- }),
- plain: true,
+ var data = Ext.Array.map(cfg.members, function(m) {
+ return this.createLinkRecord(this.docClass.name, m);
+ }, this);
+
+ return Ext.create('Docs.view.HoverMenuButton', {
+ text: cfg.text,
+ cls: 'icon-'+cfg.type,
+ store: this.createStore(data),
+ showCount: true,
listeners: {
- click: function(menu, item) {
- Ext.getCmp('doc-overview').scrollToEl("#" + item.memberName);
- }
+ click: function() {
+ this.up('classoverview').scrollToEl("#m-" + cfg.type);
+ },
+ scope: this
}
});
+ },
- return Ext.create('Ext.button.Split', {
- cls: cfg.type,
- iconCls: 'icon-' + cfg.type,
- text: cfg.title + ' <span class="num">' + cfg.items.length + '</span>',
- listeners: {
- click: function() {
- Ext.getCmp('doc-overview').scrollToEl("#m-" + cfg.type);
- }
- },
- menu: menu
+ createClassListButton: function(text, classes) {
+ var data = Ext.Array.map(classes, function(cls) {
+ return this.createLinkRecord(cls);
+ }, this);
+
+ return Ext.create('Docs.view.HoverMenuButton', {
+ text: text,
+ cls: 'icon-subclass',
+ showCount: true,
+ store: this.createStore(data)
});
},
- createSubClassesButton: function(cfg) {
- var menu = Ext.create('Ext.menu.Menu', {
- items: Ext.Array.map(cfg.items, function(className) {
- return {text: className, clsName: className};
- }),
- plain: true,
- listeners: {
- click: function(menu, item) {
- Docs.ClassLoader.load(item.clsName);
- }
- }
+ // creates store tha holds link records
+ createStore: function(records) {
+ var store = Ext.create('Ext.data.Store', {
+ fields: ['id', 'cls', 'url', 'label', 'inherited']
});
+ store.add(records);
+ return store;
+ },
- return Ext.create('Ext.button.Button', {
- cls: 'subcls',
- iconCls: 'icon-subclass',
- text: cfg.title + ' <span class="num">' + cfg.items.length + '</span>',
- menu: menu
- });
+ // Creates link object referencing a class (and optionally a class member)
+ createLinkRecord: function(cls, member) {
+ return {
+ cls: cls,
+ url: member ? cls+"-"+member.tagname+"-"+member.name : cls,
+ label: member ? member.name : cls,
+ inherited: member ? member.owner !== cls : false
+ };
},
- hideInherited: function(el) {
- var hide = el.checked;
+ /**
+ * Hides or unhides inherited members.
+ * @param {Boolean} hide
+ */
+ hideInherited: function(hide) {
+ Docs.Settings.set("hideInherited", hide);
// show/hide all inherited members
Ext.Array.forEach(Ext.query('.member.inherited'), function(m) {
Ext.get(m).removeCls('first-child');
});
- Ext.Array.forEach(['cfg', 'property', 'method', 'event'], function(m) {
- var sectionId = '#m-' + m;
+ Ext.Array.forEach(['cfg', 'property', 'method', 'event'], function(type) {
+ var sectionId = '#m-' + type;
// Hide the section completely if all items in it are inherited
if (Ext.query(sectionId+' .member.not-inherited').length === 0) {
if (sectionMembers.length > 0) {
Ext.get(sectionMembers[0]).addCls('first-child');
}
- });
+
+ if (this.memberButtons[type]) {
+ var store = this.memberButtons[type].getStore();
+ if (hide) {
+ store.filterBy(function(m) { return !m.get("inherited"); });
+ }
+ else {
+ store.clearFilter();
+ }
+ }
+ }, this);
}
});