X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/d41dc04ad17d1d9125fb2cf72db2b4782dbe3a8c..e9397f91ede62d446aed37d23256e8938fc4c335:/examples/feed-viewer/FeedGrid.js diff --git a/examples/feed-viewer/FeedGrid.js b/examples/feed-viewer/FeedGrid.js index c7abf74e..a50c9e90 100644 --- a/examples/feed-viewer/FeedGrid.js +++ b/examples/feed-viewer/FeedGrid.js @@ -1,162 +1,162 @@ -/* - * Ext JS Library 2.2.1 - * Copyright(c) 2006-2009, Ext JS, LLC. - * licensing@extjs.com - * - * http://extjs.com/license - */ - -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 = '

' + xf.ellipsis(xf.stripTags(record.data.description), 200) + '

'; - 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( - '
{0}{1}
', - value, record.data.author, record.id, record.data.forumid - ); - } -}); \ No newline at end of file +/*! + * Ext JS Library 3.3.1 + * Copyright(c) 2006-2010 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license + */ +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 = '

' + xf.ellipsis(xf.stripTags(record.data.description), 200) + '

'; + 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( + '
{0}{1}
', + value, record.data.author, record.id, record.data.forumid + ); + } +}); + +Ext.reg('appfeedgrid', FeedGrid); \ No newline at end of file