| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621 | 
							- <!DOCTYPE html>
 
- <html>
 
- <head>
 
-   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
-   <title>The source code</title>
 
-   <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
 
-   <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
 
-   <style type="text/css">
 
-     .highlight { display: block; background-color: #ddd; }
 
-   </style>
 
-   <script type="text/javascript">
 
-     function highlight() {
 
-       document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
 
-     }
 
-   </script>
 
- </head>
 
- <body onload="prettyPrint(); highlight();">
 
-   <pre class="prettyprint lang-js"><span id='Ext-toolbar-Paging'>/**
 
- </span> * As the number of records increases, the time required for the browser to render them increases. Paging is used to
 
-  * reduce the amount of data exchanged with the client. Note: if there are more records/rows than can be viewed in the
 
-  * available screen area, vertical scrollbars will be added.
 
-  *
 
-  * Paging is typically handled on the server side (see exception below). The client sends parameters to the server side,
 
-  * which the server needs to interpret and then respond with the appropriate data.
 
-  *
 
-  * Ext.toolbar.Paging is a specialized toolbar that is bound to a {@link Ext.data.Store} and provides automatic
 
-  * paging control. This Component {@link Ext.data.Store#method-load load}s blocks of data into the {@link #store} by passing
 
-  * parameters used for paging criteria.
 
-  *
 
-  * {@img Ext.toolbar.Paging/Ext.toolbar.Paging.png Ext.toolbar.Paging component}
 
-  *
 
-  * Paging Toolbar is typically used as one of the Grid's toolbars:
 
-  *
 
-  *     @example
 
-  *     var itemsPerPage = 2;   // set the number of items you want per page
 
-  *
 
-  *     var store = Ext.create('Ext.data.Store', {
 
-  *         id:'simpsonsStore',
 
-  *         autoLoad: false,
 
-  *         fields:['name', 'email', 'phone'],
 
-  *         pageSize: itemsPerPage, // items per page
 
-  *         proxy: {
 
-  *             type: 'ajax',
 
-  *             url: 'pagingstore.js',  // url that will load data with respect to start and limit params
 
-  *             reader: {
 
-  *                 type: 'json',
 
-  *                 root: 'items',
 
-  *                 totalProperty: 'total'
 
-  *             }
 
-  *         }
 
-  *     });
 
-  *
 
-  *     // specify segment of data you want to load using params
 
-  *     store.load({
 
-  *         params:{
 
-  *             start:0,
 
-  *             limit: itemsPerPage
 
-  *         }
 
-  *     });
 
-  *
 
-  *     Ext.create('Ext.grid.Panel', {
 
-  *         title: 'Simpsons',
 
-  *         store: store,
 
-  *         columns: [
 
-  *             { header: 'Name',  dataIndex: 'name' },
 
-  *             { header: 'Email', dataIndex: 'email', flex: 1 },
 
-  *             { header: 'Phone', dataIndex: 'phone' }
 
-  *         ],
 
-  *         width: 400,
 
-  *         height: 125,
 
-  *         dockedItems: [{
 
-  *             xtype: 'pagingtoolbar',
 
-  *             store: store,   // same store GridPanel is using
 
-  *             dock: 'bottom',
 
-  *             displayInfo: true
 
-  *         }],
 
-  *         renderTo: Ext.getBody()
 
-  *     });
 
-  *
 
-  * To use paging, you need to set a pageSize configuration on the Store, and pass the paging requirements to
 
-  * the server when the store is first loaded.
 
-  *
 
-  *     store.load({
 
-  *         params: {
 
-  *             // specify params for the first page load if using paging
 
-  *             start: 0,
 
-  *             limit: myPageSize,
 
-  *             // other params
 
-  *             foo:   'bar'
 
-  *         }
 
-  *     });
 
-  *
 
-  * If using {@link Ext.data.Store#autoLoad store's autoLoad} configuration:
 
-  *
 
-  *     var myStore = Ext.create('Ext.data.Store', {
 
-  *         {@link Ext.data.Store#autoLoad autoLoad}: {start: 0, limit: 25},
 
-  *         ...
 
-  *     });
 
-  *
 
-  * The packet sent back from the server would have this form:
 
-  *
 
-  *     {
 
-  *         "success": true,
 
-  *         "results": 2000,
 
-  *         "rows": [ // ***Note:** this must be an Array
 
-  *             { "id":  1, "name": "Bill", "occupation": "Gardener" },
 
-  *             { "id":  2, "name":  "Ben", "occupation": "Horticulturalist" },
 
-  *             ...
 
-  *             { "id": 25, "name":  "Sue", "occupation": "Botanist" }
 
-  *         ]
 
-  *     }
 
-  *
 
-  * ## Paging with Local Data
 
-  *
 
-  * Paging can also be accomplished with local data using extensions:
 
-  *
 
-  *   - [Ext.ux.data.PagingStore][1]
 
-  *   - Paging Memory Proxy (examples/ux/PagingMemoryProxy.js)
 
-  *
 
-  *    [1]: http://sencha.com/forum/showthread.php?t=71532
 
-  */
 
- Ext.define('Ext.toolbar.Paging', {
 
-     extend: 'Ext.toolbar.Toolbar',
 
-     alias: 'widget.pagingtoolbar',
 
-     alternateClassName: 'Ext.PagingToolbar',
 
-     requires: ['Ext.toolbar.TextItem', 'Ext.form.field.Number'],
 
-     mixins: {
 
-         bindable: 'Ext.util.Bindable'    
 
-     },
 
- <span id='Ext-toolbar-Paging-cfg-store'>    /**
 
- </span>     * @cfg {Ext.data.Store} store (required)
 
-      * The {@link Ext.data.Store} the paging toolbar should use as its data source.
 
-      */
 
- <span id='Ext-toolbar-Paging-cfg-displayInfo'>    /**
 
- </span>     * @cfg {Boolean} displayInfo
 
-      * true to display the displayMsg
 
-      */
 
-     displayInfo: false,
 
- <span id='Ext-toolbar-Paging-cfg-prependButtons'>    /**
 
- </span>     * @cfg {Boolean} prependButtons
 
-      * true to insert any configured items _before_ the paging buttons.
 
-      */
 
-     prependButtons: false,
 
-     //<locale>
 
- <span id='Ext-toolbar-Paging-cfg-displayMsg'>    /**
 
- </span>     * @cfg {String} displayMsg
 
-      * The paging status message to display. Note that this string is
 
-      * formatted using the braced numbers {0}-{2} as tokens that are replaced by the values for start, end and total
 
-      * respectively. These tokens should be preserved when overriding this string if showing those values is desired.
 
-      */
 
-     displayMsg : 'Displaying {0} - {1} of {2}',
 
-     //</locale>
 
-     //<locale>
 
- <span id='Ext-toolbar-Paging-cfg-emptyMsg'>    /**
 
- </span>     * @cfg {String} emptyMsg
 
-      * The message to display when no records are found.
 
-      */
 
-     emptyMsg : 'No data to display',
 
-     //</locale>
 
-     //<locale>
 
- <span id='Ext-toolbar-Paging-cfg-beforePageText'>    /**
 
- </span>     * @cfg {String} beforePageText
 
-      * The text displayed before the input item.
 
-      */
 
-     beforePageText : 'Page',
 
-     //</locale>
 
-     //<locale>
 
- <span id='Ext-toolbar-Paging-cfg-afterPageText'>    /**
 
- </span>     * @cfg {String} afterPageText
 
-      * Customizable piece of the default paging text. Note that this string is formatted using
 
-      * {0} as a token that is replaced by the number of total pages. This token should be preserved when overriding this
 
-      * string if showing the total page count is desired.
 
-      */
 
-     afterPageText : 'of {0}',
 
-     //</locale>
 
-     //<locale>
 
- <span id='Ext-toolbar-Paging-cfg-firstText'>    /**
 
- </span>     * @cfg {String} firstText
 
-      * The quicktip text displayed for the first page button.
 
-      * **Note**: quick tips must be initialized for the quicktip to show.
 
-      */
 
-     firstText : 'First Page',
 
-     //</locale>
 
-     //<locale>
 
- <span id='Ext-toolbar-Paging-cfg-prevText'>    /**
 
- </span>     * @cfg {String} prevText
 
-      * The quicktip text displayed for the previous page button.
 
-      * **Note**: quick tips must be initialized for the quicktip to show.
 
-      */
 
-     prevText : 'Previous Page',
 
-     //</locale>
 
-     //<locale>
 
- <span id='Ext-toolbar-Paging-cfg-nextText'>    /**
 
- </span>     * @cfg {String} nextText
 
-      * The quicktip text displayed for the next page button.
 
-      * **Note**: quick tips must be initialized for the quicktip to show.
 
-      */
 
-     nextText : 'Next Page',
 
-     //</locale>
 
-     //<locale>
 
- <span id='Ext-toolbar-Paging-cfg-lastText'>    /**
 
- </span>     * @cfg {String} lastText
 
-      * The quicktip text displayed for the last page button.
 
-      * **Note**: quick tips must be initialized for the quicktip to show.
 
-      */
 
-     lastText : 'Last Page',
 
-     //</locale>
 
-     //<locale>
 
- <span id='Ext-toolbar-Paging-cfg-refreshText'>    /**
 
- </span>     * @cfg {String} refreshText
 
-      * The quicktip text displayed for the Refresh button.
 
-      * **Note**: quick tips must be initialized for the quicktip to show.
 
-      */
 
-     refreshText : 'Refresh',
 
-     //</locale>
 
- <span id='Ext-toolbar-Paging-cfg-inputItemWidth'>    /**
 
- </span>     * @cfg {Number} inputItemWidth
 
-      * The width in pixels of the input field used to display and change the current page number.
 
-      */
 
-     inputItemWidth : 30,
 
- <span id='Ext-toolbar-Paging-method-getPagingItems'>    /**
 
- </span>     * Gets the standard paging items in the toolbar
 
-      * @private
 
-      */
 
-     getPagingItems: function() {
 
-         var me = this;
 
-         return [{
 
-             itemId: 'first',
 
-             tooltip: me.firstText,
 
-             overflowText: me.firstText,
 
-             iconCls: Ext.baseCSSPrefix + 'tbar-page-first',
 
-             disabled: true,
 
-             handler: me.moveFirst,
 
-             scope: me
 
-         },{
 
-             itemId: 'prev',
 
-             tooltip: me.prevText,
 
-             overflowText: me.prevText,
 
-             iconCls: Ext.baseCSSPrefix + 'tbar-page-prev',
 
-             disabled: true,
 
-             handler: me.movePrevious,
 
-             scope: me
 
-         },
 
-         '-',
 
-         me.beforePageText,
 
-         {
 
-             xtype: 'numberfield',
 
-             itemId: 'inputItem',
 
-             name: 'inputItem',
 
-             cls: Ext.baseCSSPrefix + 'tbar-page-number',
 
-             allowDecimals: false,
 
-             minValue: 1,
 
-             hideTrigger: true,
 
-             enableKeyEvents: true,
 
-             keyNavEnabled: false,
 
-             selectOnFocus: true,
 
-             submitValue: false,
 
-             // mark it as not a field so the form will not catch it when getting fields
 
-             isFormField: false,
 
-             width: me.inputItemWidth,
 
-             margins: '-1 2 3 2',
 
-             listeners: {
 
-                 scope: me,
 
-                 keydown: me.onPagingKeyDown,
 
-                 blur: me.onPagingBlur
 
-             }
 
-         },{
 
-             xtype: 'tbtext',
 
-             itemId: 'afterTextItem',
 
-             text: Ext.String.format(me.afterPageText, 1)
 
-         },
 
-         '-',
 
-         {
 
-             itemId: 'next',
 
-             tooltip: me.nextText,
 
-             overflowText: me.nextText,
 
-             iconCls: Ext.baseCSSPrefix + 'tbar-page-next',
 
-             disabled: true,
 
-             handler: me.moveNext,
 
-             scope: me
 
-         },{
 
-             itemId: 'last',
 
-             tooltip: me.lastText,
 
-             overflowText: me.lastText,
 
-             iconCls: Ext.baseCSSPrefix + 'tbar-page-last',
 
-             disabled: true,
 
-             handler: me.moveLast,
 
-             scope: me
 
-         },
 
-         '-',
 
-         {
 
-             itemId: 'refresh',
 
-             tooltip: me.refreshText,
 
-             overflowText: me.refreshText,
 
-             iconCls: Ext.baseCSSPrefix + 'tbar-loading',
 
-             handler: me.doRefresh,
 
-             scope: me
 
-         }];
 
-     },
 
-     initComponent : function(){
 
-         var me = this,
 
-             pagingItems = me.getPagingItems(),
 
-             userItems   = me.items || me.buttons || [];
 
-         if (me.prependButtons) {
 
-             me.items = userItems.concat(pagingItems);
 
-         } else {
 
-             me.items = pagingItems.concat(userItems);
 
-         }
 
-         delete me.buttons;
 
-         if (me.displayInfo) {
 
-             me.items.push('->');
 
-             me.items.push({xtype: 'tbtext', itemId: 'displayItem'});
 
-         }
 
-         me.callParent();
 
-         me.addEvents(
 
- <span id='Ext-toolbar-Paging-event-change'>            /**
 
- </span>             * @event change
 
-              * Fires after the active page has been changed.
 
-              * @param {Ext.toolbar.Paging} this
 
-              * @param {Object} pageData An object that has these properties:
 
-              *
 
-              * - `total` : Number
 
-              *
 
-              *   The total number of records in the dataset as returned by the server
 
-              *
 
-              * - `currentPage` : Number
 
-              *
 
-              *   The current page number
 
-              *
 
-              * - `pageCount` : Number
 
-              *
 
-              *   The total number of pages (calculated from the total number of records in the dataset as returned by the
 
-              *   server and the current {@link Ext.data.Store#pageSize pageSize})
 
-              *
 
-              * - `toRecord` : Number
 
-              *
 
-              *   The starting record index for the current page
 
-              *
 
-              * - `fromRecord` : Number
 
-              *
 
-              *   The ending record index for the current page
 
-              */
 
-             'change',
 
- <span id='Ext-toolbar-Paging-event-beforechange'>            /**
 
- </span>             * @event beforechange
 
-              * Fires just before the active page is changed. Return false to prevent the active page from being changed.
 
-              * @param {Ext.toolbar.Paging} this
 
-              * @param {Number} page The page number that will be loaded on change
 
-              */
 
-             'beforechange'
 
-         );
 
-         me.on('beforerender', me.onLoad, me, {single: true});
 
-         me.bindStore(me.store || 'ext-empty-store', true);
 
-     },
 
-     // private
 
-     updateInfo : function(){
 
-         var me = this,
 
-             displayItem = me.child('#displayItem'),
 
-             store = me.store,
 
-             pageData = me.getPageData(),
 
-             count, msg;
 
-         if (displayItem) {
 
-             count = store.getCount();
 
-             if (count === 0) {
 
-                 msg = me.emptyMsg;
 
-             } else {
 
-                 msg = Ext.String.format(
 
-                     me.displayMsg,
 
-                     pageData.fromRecord,
 
-                     pageData.toRecord,
 
-                     pageData.total
 
-                 );
 
-             }
 
-             displayItem.setText(msg);
 
-         }
 
-     },
 
-     // private
 
-     onLoad : function(){
 
-         var me = this,
 
-             pageData,
 
-             currPage,
 
-             pageCount,
 
-             afterText,
 
-             count,
 
-             isEmpty;
 
-         count = me.store.getCount();
 
-         isEmpty = count === 0;
 
-         if (!isEmpty) {
 
-             pageData = me.getPageData();
 
-             currPage = pageData.currentPage;
 
-             pageCount = pageData.pageCount;
 
-             afterText = Ext.String.format(me.afterPageText, isNaN(pageCount) ? 1 : pageCount);
 
-         } else {
 
-             currPage = 0;
 
-             pageCount = 0;
 
-             afterText = Ext.String.format(me.afterPageText, 0);
 
-         }
 
-         Ext.suspendLayouts();
 
-         me.child('#afterTextItem').setText(afterText);
 
-         me.child('#inputItem').setDisabled(isEmpty).setValue(currPage);
 
-         me.child('#first').setDisabled(currPage === 1 || isEmpty);
 
-         me.child('#prev').setDisabled(currPage === 1  || isEmpty);
 
-         me.child('#next').setDisabled(currPage === pageCount  || isEmpty);
 
-         me.child('#last').setDisabled(currPage === pageCount  || isEmpty);
 
-         me.child('#refresh').enable();
 
-         me.updateInfo();
 
-         Ext.resumeLayouts(true);
 
-         if (me.rendered) {
 
-             me.fireEvent('change', me, pageData);
 
-         }
 
-     },
 
-     // private
 
-     getPageData : function(){
 
-         var store = this.store,
 
-             totalCount = store.getTotalCount();
 
-         return {
 
-             total : totalCount,
 
-             currentPage : store.currentPage,
 
-             pageCount: Math.ceil(totalCount / store.pageSize),
 
-             fromRecord: ((store.currentPage - 1) * store.pageSize) + 1,
 
-             toRecord: Math.min(store.currentPage * store.pageSize, totalCount)
 
-         };
 
-     },
 
-     // private
 
-     onLoadError : function(){
 
-         if (!this.rendered) {
 
-             return;
 
-         }
 
-         this.child('#refresh').enable();
 
-     },
 
-     // private
 
-     readPageFromInput : function(pageData){
 
-         var v = this.child('#inputItem').getValue(),
 
-             pageNum = parseInt(v, 10);
 
-         if (!v || isNaN(pageNum)) {
 
-             this.child('#inputItem').setValue(pageData.currentPage);
 
-             return false;
 
-         }
 
-         return pageNum;
 
-     },
 
-     onPagingFocus : function(){
 
-         this.child('#inputItem').select();
 
-     },
 
-     //private
 
-     onPagingBlur : function(e){
 
-         var curPage = this.getPageData().currentPage;
 
-         this.child('#inputItem').setValue(curPage);
 
-     },
 
-     // private
 
-     onPagingKeyDown : function(field, e){
 
-         var me = this,
 
-             k = e.getKey(),
 
-             pageData = me.getPageData(),
 
-             increment = e.shiftKey ? 10 : 1,
 
-             pageNum;
 
-         if (k == e.RETURN) {
 
-             e.stopEvent();
 
-             pageNum = me.readPageFromInput(pageData);
 
-             if (pageNum !== false) {
 
-                 pageNum = Math.min(Math.max(1, pageNum), pageData.pageCount);
 
-                 if(me.fireEvent('beforechange', me, pageNum) !== false){
 
-                     me.store.loadPage(pageNum);
 
-                 }
 
-             }
 
-         } else if (k == e.HOME || k == e.END) {
 
-             e.stopEvent();
 
-             pageNum = k == e.HOME ? 1 : pageData.pageCount;
 
-             field.setValue(pageNum);
 
-         } else if (k == e.UP || k == e.PAGE_UP || k == e.DOWN || k == e.PAGE_DOWN) {
 
-             e.stopEvent();
 
-             pageNum = me.readPageFromInput(pageData);
 
-             if (pageNum) {
 
-                 if (k == e.DOWN || k == e.PAGE_DOWN) {
 
-                     increment *= -1;
 
-                 }
 
-                 pageNum += increment;
 
-                 if (pageNum >= 1 && pageNum <= pageData.pageCount) {
 
-                     field.setValue(pageNum);
 
-                 }
 
-             }
 
-         }
 
-     },
 
-     // private
 
-     beforeLoad : function(){
 
-         if(this.rendered && this.refresh){
 
-             this.refresh.disable();
 
-         }
 
-     },
 
- <span id='Ext-toolbar-Paging-method-moveFirst'>    /**
 
- </span>     * Move to the first page, has the same effect as clicking the 'first' button.
 
-      */
 
-     moveFirst : function(){
 
-         if (this.fireEvent('beforechange', this, 1) !== false){
 
-             this.store.loadPage(1);
 
-         }
 
-     },
 
- <span id='Ext-toolbar-Paging-method-movePrevious'>    /**
 
- </span>     * Move to the previous page, has the same effect as clicking the 'previous' button.
 
-      */
 
-     movePrevious : function(){
 
-         var me = this,
 
-             prev = me.store.currentPage - 1;
 
-         if (prev > 0) {
 
-             if (me.fireEvent('beforechange', me, prev) !== false) {
 
-                 me.store.previousPage();
 
-             }
 
-         }
 
-     },
 
- <span id='Ext-toolbar-Paging-method-moveNext'>    /**
 
- </span>     * Move to the next page, has the same effect as clicking the 'next' button.
 
-      */
 
-     moveNext : function(){
 
-         var me = this,
 
-             total = me.getPageData().pageCount,
 
-             next = me.store.currentPage + 1;
 
-         if (next <= total) {
 
-             if (me.fireEvent('beforechange', me, next) !== false) {
 
-                 me.store.nextPage();
 
-             }
 
-         }
 
-     },
 
- <span id='Ext-toolbar-Paging-method-moveLast'>    /**
 
- </span>     * Move to the last page, has the same effect as clicking the 'last' button.
 
-      */
 
-     moveLast : function(){
 
-         var me = this,
 
-             last = me.getPageData().pageCount;
 
-         if (me.fireEvent('beforechange', me, last) !== false) {
 
-             me.store.loadPage(last);
 
-         }
 
-     },
 
- <span id='Ext-toolbar-Paging-method-doRefresh'>    /**
 
- </span>     * Refresh the current page, has the same effect as clicking the 'refresh' button.
 
-      */
 
-     doRefresh : function(){
 
-         var me = this,
 
-             current = me.store.currentPage;
 
-         if (me.fireEvent('beforechange', me, current) !== false) {
 
-             me.store.loadPage(current);
 
-         }
 
-     },
 
-     
 
-     getStoreListeners: function() {
 
-         return {
 
-             beforeload: this.beforeLoad,
 
-             load: this.onLoad,
 
-             exception: this.onLoadError
 
-         };
 
-     },
 
- <span id='Ext-toolbar-Paging-method-unbind'>    /**
 
- </span>     * Unbinds the paging toolbar from the specified {@link Ext.data.Store} **(deprecated)**
 
-      * @param {Ext.data.Store} store The data store to unbind
 
-      */
 
-     unbind : function(store){
 
-         this.bindStore(null);
 
-     },
 
- <span id='Ext-toolbar-Paging-method-bind'>    /**
 
- </span>     * Binds the paging toolbar to the specified {@link Ext.data.Store} **(deprecated)**
 
-      * @param {Ext.data.Store} store The data store to bind
 
-      */
 
-     bind : function(store){
 
-         this.bindStore(store);
 
-     },
 
-     // private
 
-     onDestroy : function(){
 
-         this.unbind();
 
-         this.callParent();
 
-     }
 
- });
 
- </pre>
 
- </body>
 
- </html>
 
 
  |