FeedPost.js
2.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/**
* @class FeedViewer.FeedPost
* @extends Ext.panel.Panel
*
* Shows the detail of a feed post
*
* @constructor
* Create a new Feed Post
* @param {Object} config The config object
*/
Ext.define('FeedViewer.FeedPost', {
extend: 'Ext.panel.Panel',
alias: 'widget.feedpost',
cls: 'preview',
autoScroll: true,
border: true,
initComponent: function(){
Ext.apply(this, {
dockedItems: [this.createToolbar()],
tpl: Ext.create('Ext.XTemplate',
'<div class="post-data">',
'<span class="post-date">{pubDate:this.formatDate}</span>',
'<h3 class="post-title">{title}</h3>',
'<h4 class="post-author">by {author:this.defaultValue}</h4>',
'</div>',
'<div class="post-body">{content:this.getBody}</div>',
{
getBody: function(value, all){
return Ext.util.Format.stripScripts(value);
},
defaultValue: function(v){
return v ? v : 'Unknown';
},
formatDate: function(value){
if (!value) {
return '';
}
return Ext.Date.format(value, 'M j, Y, g:i a');
}
}
)
});
this.callParent(arguments);
},
/**
* Set the active post
* @param {Ext.data.Model} rec The record
*/
setActive: function(rec) {
this.active = rec;
this.update(rec.data);
},
/**
* Create the top toolbar
* @private
* @return {Ext.toolbar.Toolbar} toolbar
*/
createToolbar: function(){
var items = [],
config = {};
if (!this.inTab) {
items.push({
scope: this,
handler: this.openTab,
text: 'View in new tab',
iconCls: 'tab-new'
}, '-');
}
else {
config.cls = 'x-docked-noborder-top';
}
items.push({
scope: this,
handler: this.goToPost,
text: 'Go to post',
iconCls: 'post-go'
});
config.items = items;
return Ext.create('widget.toolbar', config);
},
/**
* Navigate to the active post in a new window
* @private
*/
goToPost: function(){
window.open(this.active.get('link'));
},
/**
* Open the post in a new tab
* @private
*/
openTab: function(){
this.fireEvent('opentab', this, this.active);
}
});