Upgrade to ExtJS 4.0.0 - Released 04/26/2011
[extjs.git] / examples / grid / paging.js
index 78a0f02..7a748a6 100644 (file)
-/*!
- * Ext JS Library 3.3.1
- * Copyright(c) 2006-2010 Sencha Inc.
- * licensing@sencha.com
- * http://www.sencha.com/license
- */
-Ext.onReady(function(){
+Ext.Loader.setConfig({enabled: true});
 
-    // create the Data Store
-    var store = new Ext.data.JsonStore({
-        root: 'topics',
-        totalProperty: 'totalCount',
-        idProperty: 'threadid',
-        remoteSort: 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', 'author',
             {name: 'replycount', type: 'int'},
             {name: 'lastpost', mapping: 'lastpost', type: 'date', dateFormat: 'timestamp'},
-            'lastposter', 'excerpt'
+            'lastposter', 'excerpt', 'threadid'
         ],
-
-        // load using script tags for cross domain, if the data in on the same domain as
-        // this page, an HttpProxy would be better
-        proxy: new Ext.data.ScriptTagProxy({
-            url: 'http://extjs.com/forum/topics-browse-remote.php'
-        })
+        idProperty: 'threadid'
     });
-    store.setDefaultSort('lastpost', 'desc');
 
+    // 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 String.format(
-                '<b><a href="http://extjs.com/forum/showthread.php?t={2}" target="_blank">{0}</a></b><a href="http://extjs.com/forum/forumdisplay.php?f={3}" target="_blank">{1} Forum</a>',
-                value, record.data.forumtitle, record.id, record.data.forumid);
+    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 String.format('{0}<br/>by {1}', value.dateFormat('M j, Y, g:i a'), r.data['lastposter']);
+
+    function renderLast(value, p, r) {
+        return Ext.String.format('{0}<br/>by {1}', Ext.Date.dateFormat(value, 'M j, Y, g:i a'), r.data['lastposter']);
     }
 
-    var grid = new Ext.grid.GridPanel({
-        width:700,
-        height:500,
-        title:'ExtJS.com - Browse Forums',
+
+    var pluginExpanded = true;
+    var grid = Ext.create('Ext.grid.Panel', {
+        width: 700,
+        height: 500,
+        title: 'ExtJS.com - Browse Forums',
         store: store,
-        trackMouseOver:false,
-        disableSelection:true,
+        disableSelection: true,
         loadMask: true,
-
+        viewConfig: {
+            id: 'gv',
+            trackOver: false,
+            stripeRows: false,
+            plugins: [{
+                ptype: 'preview',
+                bodyField: 'excerpt',
+                expanded: true,
+                pluginId: 'preview'
+            }]
+        },
         // grid columns
         columns:[{
-            id: 'topic', // id assigned so we can apply custom css (e.g. .x-grid-col-topic b { color:#333 })
-            header: "Topic",
+            // 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',
-            width: 420,
+            flex: 1,
             renderer: renderTopic,
-            sortable: true
+            sortable: false
         },{
-            header: "Author",
+            text: "Author",
             dataIndex: 'author',
             width: 100,
             hidden: true,
             sortable: true
         },{
-            header: "Replies",
+            text: "Replies",
             dataIndex: 'replycount',
             width: 70,
             align: 'right',
             sortable: true
         },{
             id: 'last',
-            header: "Last Post",
+            text: "Last Post",
             dataIndex: 'lastpost',
             width: 150,
             renderer: renderLast,
             sortable: true
         }],
-
-        // customize view config
-        viewConfig: {
-            forceFit:true,
-            enableRowBody:true,
-            showPreview:true,
-            getRowClass : function(record, rowIndex, p, store){
-                if(this.showPreview){
-                    p.body = '<p>'+record.data.excerpt+'</p>';
-                    return 'x-grid3-row-expanded';
-                }
-                return 'x-grid3-row-collapsed';
-            }
-        },
-
         // paging bar on the bottom
-        bbar: new Ext.PagingToolbar({
-            pageSize: 25,
+        bbar: Ext.create('Ext.PagingToolbar', {
             store: store,
             displayInfo: true,
             displayMsg: 'Displaying topics {0} - {1} of {2}',
             emptyMsg: "No topics to display",
             items:[
                 '-', {
-                pressed: true,
-                enableToggle:true,
                 text: 'Show Preview',
-                cls: 'x-btn-text-icon details',
-                toggleHandler: function(btn, pressed){
-                    var view = grid.getView();
-                    view.showPreview = pressed;
-                    view.refresh();
+                pressed: pluginExpanded,
+                enableToggle: true,
+                toggleHandler: function(btn, pressed) {
+                    var preview = Ext.getCmp('gv').getPlugin('preview');
+                    preview.toggleExpanded(pressed);
                 }
             }]
-        })
+        }),
+        renderTo: 'topic-grid'
     });
 
-    // render it
-    grid.render('topic-grid');
-
     // trigger the data store load
-    store.load({params:{start:0, limit:25}});
+    store.loadPage(1);
 });