Upgrade to ExtJS 3.2.0 - Released 03/30/2010
[extjs.git] / examples / feed-viewer / FeedGrid.js
index 58dcd52..c62edeb 100644 (file)
 /*!
- * Ext JS Library 3.0.0
- * Copyright(c) 2006-2009 Ext JS, LLC
+ * Ext JS Library 3.2.0
+ * Copyright(c) 2006-2010 Ext JS, Inc.
  * licensing@extjs.com
  * http://www.extjs.com/license
  */
-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
+                );
+    }
+});
+
 Ext.reg('appfeedgrid', FeedGrid);
\ No newline at end of file