1 Ext.define('FeedViewer.FeedGrid', {
2 extend: 'Ext.grid.Panel',
4 alias: 'widget.feedgrid',
6 initComponent: function(){
10 * Fires when a row is double clicked
11 * @param {FeedViewer.FeedGrid} this
12 * @param {Ext.data.Model} model
17 * Fires when a grid row is selected
18 * @param {FeedViewer.FeedGrid} this
19 * @param {Ext.data.Model} model
26 store: Ext.create('Ext.data.Store', {
34 url: 'feed-proxy.php',
50 renderer: this.formatTitle
60 renderer: this.formatDate,
69 bodyField: 'description',
74 dblclick: this.onRowDblClick,
75 afterrender: this.onViewRender
79 this.callParent(arguments);
80 this.on('selectionchange', this.onSelect, this);
84 onViewRender: function() {
86 me.keyNav = Ext.create('Ext.util.KeyNav', me.items.getAt(0).el, {
92 onDestroy: function() {
94 Ext.destroy(me.keyNav);
96 me.callParent(arguments);
99 onEnterKey: function(e) {
102 idx = view.indexOf(view.getSelectedNodes()[0]);
104 me.onRowDblClick(view, idx);
108 * Reacts to a double click
110 * @param {Object} view The view
111 * @param {Object} index The row index
113 onRowDblClick: function(view, index){
114 this.fireEvent('rowdblclick', this, this.store.getAt(index));
119 * React to a grid item being selected
121 * @param {Ext.model.Selection} model The selection model
122 * @param {Array} selections An array of selections
124 onSelect: function(model, selections){
125 var selected = selections[0];
127 this.fireEvent('select', this, selected);
132 * Listens for the store loading
136 this.getSelectionModel().select(0);
140 * Instructs the grid to load a new feed
141 * @param {String} url The url to load
143 loadFeed: function(url){
144 var store = this.store;
145 store.getProxy().extraParams.feed = url;
153 formatTitle: function(value, p, record){
154 return Ext.String.format('<div class="topic"><b>{0}</b><span class="author">{1}</span></div>', value, record.get('author'));
161 formatDate: function(date){
166 var now = new Date(), d = Ext.Date.clearTime(now, true), notime = Ext.Date.clearTime(date, true).getTime();
168 if (notime === d.getTime()) {
169 return 'Today ' + Ext.Date.format(date, 'g:i a');
172 d = Ext.Date.add(d, 'd', -6);
173 if (d.getTime() <= notime) {
174 return Ext.Date.format(date, 'D g:i a');
176 return Ext.Date.format(date, 'Y/m/d g:i a');