]> git.proxmox.com Git - extjs.git/blame - extjs/examples/classic/feed-viewer/viewer/FeedViewer.js
add extjs 6.0.1 sources
[extjs.git] / extjs / examples / classic / feed-viewer / viewer / FeedViewer.js
CommitLineData
6527f429
DM
1/**\r
2 * @class FeedViewer.FeedViewer\r
3 * @extends Ext.container.Viewport\r
4 *\r
5 * The main FeedViewer application\r
6 * \r
7 * @constructor\r
8 * Create a new Feed Viewer app\r
9 * @param {Object} config The config object\r
10 */\r
11\r
12Ext.define('FeedViewer.App', {\r
13 extend: 'Ext.container.Viewport',\r
14 \r
15 initComponent: function(){\r
16 Ext.define('Feed', {\r
17 extend: 'Ext.data.Model',\r
18 fields: ['title', 'url']\r
19 });\r
20\r
21 Ext.define('FeedItem', {\r
22 extend: 'Ext.data.Model',\r
23 fields: [{\r
24 name: 'title',\r
25 convert: function(v) {\r
26 return Ext.htmlEncode(v);\r
27 }\r
28 }, 'author', 'link', {\r
29 name: 'pubDate',\r
30 type: 'date'\r
31 }, {\r
32 // Some feeds return the description as the main content\r
33 // Others return description as a summary. Figure this out here\r
34 name: 'description',\r
35 mapping: function(raw) {\r
36 var DQ = Ext.dom.Query,\r
37 content = DQ.selectNode('content', raw),\r
38 key;\r
39\r
40 if (content && DQ.getNodeValue(content)) {\r
41 key = 'description';\r
42 } else {\r
43 key = 'title';\r
44 }\r
45 return DQ.selectValue(key, raw);\r
46\r
47 }\r
48 }, {\r
49 name: 'content',\r
50 mapping: function(raw) {\r
51 var DQ = Ext.dom.Query,\r
52 content = DQ.selectNode('content', raw);\r
53\r
54 if (!content || !DQ.getNodeValue(content)) {\r
55 content = DQ.selectNode('description', raw);\r
56 }\r
57 return DQ.getNodeValue(content, '');\r
58 }\r
59 }]\r
60 });\r
61 \r
62 Ext.apply(this, {\r
63 layout: {\r
64 type: 'border',\r
65 padding: 5\r
66 },\r
67 items: [this.createFeedPanel(), this.createFeedInfo()]\r
68 });\r
69 this.callParent(arguments);\r
70 },\r
71 \r
72 /**\r
73 * Create the list of fields to be shown on the left\r
74 * @private\r
75 * @return {FeedViewer.FeedPanel} feedPanel\r
76 */\r
77 createFeedPanel: function(){\r
78 this.feedPanel = Ext.create('widget.feedpanel', {\r
79 region: 'west',\r
80 collapsible: true,\r
81 width: 225,\r
82 //floatable: false,\r
83 split: true,\r
84 minWidth: 175,\r
85 feeds: [{\r
86 title: 'Sencha Blog',\r
87 url: 'http://feeds.feedburner.com/sencha'\r
88 }, {\r
89 title: 'Sencha Forums',\r
90 url: 'http://sencha.com/forum/external.php?type=RSS2'\r
91 }, {\r
92 title: 'Ajaxian',\r
93 url: 'http://feeds.feedburner.com/ajaxian'\r
94 }],\r
95 listeners: {\r
96 scope: this,\r
97 feedselect: this.onFeedSelect\r
98 }\r
99 });\r
100 return this.feedPanel;\r
101 },\r
102 \r
103 /**\r
104 * Create the feed info container\r
105 * @private\r
106 * @return {FeedViewer.FeedInfo} feedInfo\r
107 */\r
108 createFeedInfo: function(){\r
109 this.feedInfo = Ext.create('widget.feedinfo', {\r
110 region: 'center',\r
111 minWidth: 300\r
112 });\r
113 return this.feedInfo;\r
114 },\r
115 \r
116 /**\r
117 * Reacts to a feed being selected\r
118 * @private\r
119 */\r
120 onFeedSelect: function(feed, title, url){\r
121 this.feedInfo.addFeed(title, url);\r
122 }\r
123});\r