-FeedGrid = function(viewer, config) {\r
- this.viewer = viewer;\r
- Ext.apply(this, config);\r
-\r
- this.store = new Ext.data.Store({\r
- proxy: new Ext.data.HttpProxy({\r
- url: 'feed-proxy.php'\r
- }),\r
-\r
- reader: new Ext.data.XmlReader(\r
- {record: 'item'},\r
- ['title', 'author', {name:'pubDate', type:'date'}, 'link', 'description', 'content']\r
- )\r
- });\r
- this.store.setDefaultSort('pubDate', "DESC");\r
-\r
- this.columns = [{\r
- id: 'title',\r
- header: "Title",\r
- dataIndex: 'title',\r
- sortable:true,\r
- width: 420,\r
- renderer: this.formatTitle\r
- },{\r
- header: "Author",\r
- dataIndex: 'author',\r
- width: 100,\r
- hidden: true,\r
- sortable:true\r
- },{\r
- id: 'last',\r
- header: "Date",\r
- dataIndex: 'pubDate',\r
- width: 150,\r
- renderer: this.formatDate,\r
- sortable:true\r
- }];\r
-\r
- FeedGrid.superclass.constructor.call(this, {\r
- region: 'center',\r
- id: 'topic-grid',\r
- loadMask: {msg:'Loading Feed...'},\r
-\r
- sm: new Ext.grid.RowSelectionModel({\r
- singleSelect:true\r
- }),\r
-\r
- viewConfig: {\r
- forceFit:true,\r
- enableRowBody:true,\r
- showPreview:true,\r
- getRowClass : this.applyRowClass\r
- }\r
- });\r
-\r
- this.on('rowcontextmenu', this.onContextClick, this);\r
-};\r
-\r
-Ext.extend(FeedGrid, Ext.grid.GridPanel, {\r
-\r
- onContextClick : function(grid, index, e){\r
- if(!this.menu){ // create context menu on first right click\r
- this.menu = new Ext.menu.Menu({\r
- id:'grid-ctx',\r
- items: [{\r
- text: 'View in new tab',\r
- iconCls: 'new-tab',\r
- scope:this,\r
- handler: function(){\r
- this.viewer.openTab(this.ctxRecord);\r
- }\r
- },{\r
- iconCls: 'new-win',\r
- text: 'Go to Post',\r
- scope:this,\r
- handler: function(){\r
- window.open(this.ctxRecord.data.link);\r
- }\r
- },'-',{\r
- iconCls: 'refresh-icon',\r
- text:'Refresh',\r
- scope:this,\r
- handler: function(){\r
- this.ctxRow = null;\r
- this.store.reload();\r
- }\r
- }]\r
- });\r
- this.menu.on('hide', this.onContextHide, this);\r
- }\r
- e.stopEvent();\r
- if(this.ctxRow){\r
- Ext.fly(this.ctxRow).removeClass('x-node-ctx');\r
- this.ctxRow = null;\r
- }\r
- this.ctxRow = this.view.getRow(index);\r
- this.ctxRecord = this.store.getAt(index);\r
- Ext.fly(this.ctxRow).addClass('x-node-ctx');\r
- this.menu.showAt(e.getXY());\r
- },\r
-\r
- onContextHide : function(){\r
- if(this.ctxRow){\r
- Ext.fly(this.ctxRow).removeClass('x-node-ctx');\r
- this.ctxRow = null;\r
- }\r
- },\r
-\r
- loadFeed : function(url) {\r
- this.store.baseParams = {\r
- feed: url\r
- };\r
- this.store.load();\r
- },\r
-\r
- togglePreview : function(show){\r
- this.view.showPreview = show;\r
- this.view.refresh();\r
- },\r
-\r
- // within this function "this" is actually the GridView\r
- applyRowClass: function(record, rowIndex, p, ds) {\r
- if (this.showPreview) {\r
- var xf = Ext.util.Format;\r
- p.body = '<p>' + xf.ellipsis(xf.stripTags(record.data.description), 200) + '</p>';\r
- return 'x-grid3-row-expanded';\r
- }\r
- return 'x-grid3-row-collapsed';\r
- },\r
-\r
- formatDate : function(date) {\r
- if (!date) {\r
- return '';\r
- }\r
- var now = new Date();\r
- var d = now.clearTime(true);\r
- var notime = date.clearTime(true).getTime();\r
- if (notime == d.getTime()) {\r
- return 'Today ' + date.dateFormat('g:i a');\r
- }\r
- d = d.add('d', -6);\r
- if (d.getTime() <= notime) {\r
- return date.dateFormat('D g:i a');\r
- }\r
- return date.dateFormat('n/j g:i a');\r
- },\r
-\r
- formatTitle: function(value, p, record) {\r
- return String.format(\r
- '<div class="topic"><b>{0}</b><span class="author">{1}</span></div>',\r
- value, record.data.author, record.id, record.data.forumid\r
- );\r
- }\r
-});\r
-\r
+FeedGrid = function(viewer, config) {
+ this.viewer = viewer;
+ Ext.apply(this, config);
+
+ this.store = new Ext.data.Store({
+ proxy: new Ext.data.HttpProxy({
+ url: 'feed-proxy.php'
+ }),
+
+ reader: new Ext.data.XmlReader(
+ {record: 'item'},
+ ['title', 'author', {name:'pubDate', type:'date'}, 'link', 'description', 'content']
+ )
+ });
+ this.store.setDefaultSort('pubDate', "DESC");
+
+ this.columns = [{
+ id: 'title',
+ header: "Title",
+ dataIndex: 'title',
+ sortable:true,
+ width: 420,
+ renderer: this.formatTitle
+ },{
+ header: "Author",
+ dataIndex: 'author',
+ width: 100,
+ hidden: true,
+ sortable:true
+ },{
+ id: 'last',
+ header: "Date",
+ dataIndex: 'pubDate',
+ width: 150,
+ renderer: this.formatDate,
+ sortable:true
+ }];
+
+ FeedGrid.superclass.constructor.call(this, {
+ region: 'center',
+ id: 'topic-grid',
+ loadMask: {msg:'Loading Feed...'},
+
+ sm: new Ext.grid.RowSelectionModel({
+ singleSelect:true
+ }),
+
+ viewConfig: {
+ forceFit:true,
+ enableRowBody:true,
+ showPreview:true,
+ getRowClass : this.applyRowClass
+ }
+ });
+
+ this.on('rowcontextmenu', this.onContextClick, this);
+};
+
+Ext.extend(FeedGrid, Ext.grid.GridPanel, {
+
+ onContextClick : function(grid, index, e){
+ if(!this.menu){ // create context menu on first right click
+ this.menu = new Ext.menu.Menu({
+ id:'grid-ctx',
+ items: [{
+ text: 'View in new tab',
+ iconCls: 'new-tab',
+ scope:this,
+ handler: function(){
+ this.viewer.openTab(this.ctxRecord);
+ }
+ },{
+ iconCls: 'new-win',
+ text: 'Go to Post',
+ scope:this,
+ handler: function(){
+ window.open(this.ctxRecord.data.link);
+ }
+ },'-',{
+ iconCls: 'refresh-icon',
+ text:'Refresh',
+ scope:this,
+ handler: function(){
+ this.ctxRow = null;
+ this.store.reload();
+ }
+ }]
+ });
+ this.menu.on('hide', this.onContextHide, this);
+ }
+ e.stopEvent();
+ if(this.ctxRow){
+ Ext.fly(this.ctxRow).removeClass('x-node-ctx');
+ this.ctxRow = null;
+ }
+ this.ctxRow = this.view.getRow(index);
+ this.ctxRecord = this.store.getAt(index);
+ Ext.fly(this.ctxRow).addClass('x-node-ctx');
+ this.menu.showAt(e.getXY());
+ },
+
+ onContextHide : function(){
+ if(this.ctxRow){
+ Ext.fly(this.ctxRow).removeClass('x-node-ctx');
+ this.ctxRow = null;
+ }
+ },
+
+ loadFeed : function(url) {
+ this.store.baseParams = {
+ feed: url
+ };
+ this.store.load();
+ },
+
+ togglePreview : function(show){
+ this.view.showPreview = show;
+ this.view.refresh();
+ },
+
+ // within this function "this" is actually the GridView
+ applyRowClass: function(record, rowIndex, p, ds) {
+ if (this.showPreview) {
+ var xf = Ext.util.Format;
+ p.body = '<p>' + xf.ellipsis(xf.stripTags(record.data.description), 200) + '</p>';
+ return 'x-grid3-row-expanded';
+ }
+ return 'x-grid3-row-collapsed';
+ },
+
+ formatDate : function(date) {
+ if (!date) {
+ return '';
+ }
+ var now = new Date();
+ var d = now.clearTime(true);
+ var notime = date.clearTime(true).getTime();
+ if (notime == d.getTime()) {
+ return 'Today ' + date.dateFormat('g:i a');
+ }
+ d = d.add('d', -6);
+ if (d.getTime() <= notime) {
+ return date.dateFormat('D g:i a');
+ }
+ return date.dateFormat('n/j g:i a');
+ },
+
+ formatTitle: function(value, p, record) {
+ return String.format(
+ '<div class="topic"><b>{0}</b><span class="author">{1}</span></div>',
+ value, record.data.author, record.id, record.data.forumid
+ );
+ }
+});
+