/**
|
* @class FeedViewer.FeedInfo
|
* @extends Ext.tab.Panel
|
*
|
* A container class for showing a series of feed details
|
*
|
* @constructor
|
* Create a new Feed Info
|
* @param {Object} config The config object
|
*/
|
Ext.define('FeedViewer.FeedInfo', {
|
|
extend: 'Ext.tab.Panel',
|
alias: 'widget.feedinfo',
|
|
maxTabWidth: 230,
|
border: false,
|
|
initComponent: function() {
|
this.tabBar = {
|
border: true
|
};
|
|
this.callParent();
|
},
|
|
/**
|
* Add a new feed
|
* @param {String} title The title of the feed
|
* @param {String} url The url of the feed
|
*/
|
addFeed: function(title, url){
|
var active = this.items.first();
|
if (!active) {
|
active = this.add({
|
xtype: 'feeddetail',
|
title: title,
|
url: url,
|
closable: false,
|
listeners: {
|
scope: this,
|
opentab: this.onTabOpen,
|
openall: this.onOpenAll,
|
rowdblclick: this.onRowDblClick
|
}
|
});
|
} else {
|
active.loadFeed(url);
|
active.tab.setText(title);
|
}
|
this.setActiveTab(active);
|
},
|
|
/**
|
* Listens for a new tab request
|
* @private
|
* @param {FeedViewer.FeedPost} The post
|
* @param {Ext.data.Model} model The model
|
*/
|
onTabOpen: function(post, rec) {
|
var items = [],
|
item,
|
title;
|
|
if (Ext.isArray(rec)) {
|
Ext.each(rec, function(rec) {
|
title = rec.get('title');
|
if (!this.getTabByTitle(title)) {
|
items.push({
|
inTab: true,
|
xtype: 'feedpost',
|
title: title,
|
closable: true,
|
data: rec.data,
|
active: rec
|
});
|
}
|
}, this);
|
this.add(items);
|
}
|
else {
|
title = rec.get('title');
|
item = this.getTabByTitle(title);
|
if (!item) {
|
item = this.add({
|
inTab: true,
|
xtype: 'feedpost',
|
title: title,
|
closable: true,
|
data: rec.data,
|
active: rec
|
});
|
}
|
this.setActiveTab(item);
|
}
|
},
|
|
/**
|
* Find a tab by title
|
* @param {String} title The title of the tab
|
* @return {Ext.Component} The panel matching the title. null if not found.
|
*/
|
getTabByTitle: function(title) {
|
var index = this.items.findIndex('title', title);
|
return (index < 0) ? null : this.items.getAt(index);
|
},
|
|
/**
|
* Listens for a row dblclick
|
* @private
|
* @param {FeedViewer.Detail} detail The detail
|
* @param {Ext.data.Model} model The model
|
*/
|
onRowDblClick: function(info, rec){
|
this.onTabOpen(null, rec);
|
},
|
|
/**
|
* Listens for the open all click
|
* @private
|
* @param {FeedViewer.FeedDetail}
|
*/
|
onOpenAll: function(detail) {
|
this.onTabOpen(null, detail.getFeedData());
|
}
|
});
|