123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- Ext.Loader.setConfig({enabled: true});
- Ext.Loader.setPath('Ext.ux', '../ux/');
- Ext.require([
- 'Ext.grid.*',
- 'Ext.data.*',
- 'Ext.util.*',
- 'Ext.toolbar.Paging',
- 'Ext.ux.PreviewPlugin',
- 'Ext.ModelManager',
- 'Ext.tip.QuickTipManager'
- ]);
- Ext.onReady(function(){
- Ext.tip.QuickTipManager.init();
- Ext.define('ForumThread', {
- extend: 'Ext.data.Model',
- fields: [
- 'title', 'forumtitle', 'forumid', 'username',
- {name: 'replycount', type: 'int'},
- {name: 'lastpost', mapping: 'lastpost', type: 'date', dateFormat: 'timestamp'},
- 'lastposter', 'excerpt', 'threadid'
- ],
- idProperty: 'threadid'
- });
- // create the Data Store
- var store = Ext.create('Ext.data.Store', {
- pageSize: 50,
- model: 'ForumThread',
- remoteSort: true,
- proxy: {
- // load using script tags for cross domain, if the data in on the same domain as
- // this page, an HttpProxy would be better
- type: 'jsonp',
- url: 'http://www.sencha.com/forum/topics-browse-remote.php',
- reader: {
- root: 'topics',
- totalProperty: 'totalCount'
- },
- // sends single sort as multi parameter
- simpleSortMode: true
- },
- sorters: [{
- property: 'lastpost',
- direction: 'DESC'
- }]
- });
- // pluggable renders
- function renderTopic(value, p, record) {
- return Ext.String.format(
- '<b><a href="http://sencha.com/forum/showthread.php?t={2}" target="_blank">{0}</a></b><a href="http://sencha.com/forum/forumdisplay.php?f={3}" target="_blank">{1} Forum</a>',
- value,
- record.data.forumtitle,
- record.getId(),
- record.data.forumid
- );
- }
- function renderLast(value, p, r) {
- return Ext.String.format('{0}<br/>by {1}', Ext.Date.dateFormat(value, 'M j, Y, g:i a'), r.get('lastposter'));
- }
- var pluginExpanded = true;
- var grid = Ext.create('Ext.grid.Panel', {
- width: 700,
- height: 500,
- title: 'ExtJS.com - Browse Forums',
- store: store,
- disableSelection: true,
- loadMask: true,
- viewConfig: {
- id: 'gv',
- trackOver: false,
- stripeRows: false,
- plugins: [{
- ptype: 'preview',
- bodyField: 'excerpt',
- expanded: true,
- pluginId: 'preview'
- }]
- },
- // grid columns
- columns:[{
- // id assigned so we can apply custom css (e.g. .x-grid-cell-topic b { color:#333 })
- // TODO: This poses an issue in subclasses of Grid now because Headers are now Components
- // therefore the id will be registered in the ComponentManager and conflict. Need a way to
- // add additional CSS classes to the rendered cells.
- id: 'topic',
- text: "Topic",
- dataIndex: 'title',
- flex: 1,
- renderer: renderTopic,
- sortable: false
- },{
- text: "Author",
- dataIndex: 'username',
- width: 100,
- hidden: true,
- sortable: true
- },{
- text: "Replies",
- dataIndex: 'replycount',
- width: 70,
- align: 'right',
- sortable: true
- },{
- id: 'last',
- text: "Last Post",
- dataIndex: 'lastpost',
- width: 150,
- renderer: renderLast,
- sortable: true
- }],
- // paging bar on the bottom
- bbar: Ext.create('Ext.PagingToolbar', {
- store: store,
- displayInfo: true,
- displayMsg: 'Displaying topics {0} - {1} of {2}',
- emptyMsg: "No topics to display",
- items:[
- '-', {
- text: 'Show Preview',
- pressed: pluginExpanded,
- enableToggle: true,
- toggleHandler: function(btn, pressed) {
- var preview = Ext.getCmp('gv').getPlugin('preview');
- preview.toggleExpanded(pressed);
- }
- }]
- }),
- renderTo: 'topic-grid'
- });
- // trigger the data store load
- store.loadPage(1);
- });
|