| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263 | 
							- <!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-grid-feature-GroupingSummary'>/**
 
- </span> * This feature adds an aggregate summary row at the bottom of each group that is provided
 
-  * by the {@link Ext.grid.feature.Grouping} feature. There are two aspects to the summary:
 
-  *
 
-  * ## Calculation
 
-  *
 
-  * The summary value needs to be calculated for each column in the grid. This is controlled
 
-  * by the summaryType option specified on the column. There are several built in summary types,
 
-  * which can be specified as a string on the column configuration. These call underlying methods
 
-  * on the store:
 
-  *
 
-  *  - {@link Ext.data.Store#count count}
 
-  *  - {@link Ext.data.Store#sum sum}
 
-  *  - {@link Ext.data.Store#min min}
 
-  *  - {@link Ext.data.Store#max max}
 
-  *  - {@link Ext.data.Store#average average}
 
-  *
 
-  * Alternatively, the summaryType can be a function definition. If this is the case,
 
-  * the function is called with an array of records to calculate the summary value.
 
-  *
 
-  * ## Rendering
 
-  *
 
-  * Similar to a column, the summary also supports a summaryRenderer function. This
 
-  * summaryRenderer is called before displaying a value. The function is optional, if
 
-  * not specified the default calculated value is shown. The summaryRenderer is called with:
 
-  *
 
-  *  - value {Object} - The calculated value.
 
-  *  - summaryData {Object} - Contains all raw summary values for the row.
 
-  *  - field {String} - The name of the field we are calculating
 
-  *
 
-  * ## Example Usage
 
-  *
 
-  *     @example
 
-  *     Ext.define('TestResult', {
 
-  *         extend: 'Ext.data.Model',
 
-  *         fields: ['student', 'subject', {
 
-  *             name: 'mark',
 
-  *             type: 'int'
 
-  *         }]
 
-  *     });
 
-  *
 
-  *     Ext.create('Ext.grid.Panel', {
 
-  *         width: 200,
 
-  *         height: 240,
 
-  *         renderTo: document.body,
 
-  *         features: [{
 
-  *             groupHeaderTpl: 'Subject: {name}',
 
-  *             ftype: 'groupingsummary'
 
-  *         }],
 
-  *         store: {
 
-  *             model: 'TestResult',
 
-  *             groupField: 'subject',
 
-  *             data: [{
 
-  *                 student: 'Student 1',
 
-  *                 subject: 'Math',
 
-  *                 mark: 84
 
-  *             },{
 
-  *                 student: 'Student 1',
 
-  *                 subject: 'Science',
 
-  *                 mark: 72
 
-  *             },{
 
-  *                 student: 'Student 2',
 
-  *                 subject: 'Math',
 
-  *                 mark: 96
 
-  *             },{
 
-  *                 student: 'Student 2',
 
-  *                 subject: 'Science',
 
-  *                 mark: 68
 
-  *             }]
 
-  *         },
 
-  *         columns: [{
 
-  *             dataIndex: 'student',
 
-  *             text: 'Name',
 
-  *             summaryType: 'count',
 
-  *             summaryRenderer: function(value){
 
-  *                 return Ext.String.format('{0} student{1}', value, value !== 1 ? 's' : '');
 
-  *             }
 
-  *         }, {
 
-  *             dataIndex: 'mark',
 
-  *             text: 'Mark',
 
-  *             summaryType: 'average'
 
-  *         }]
 
-  *     });
 
-  */
 
- Ext.define('Ext.grid.feature.GroupingSummary', {
 
-     /* Begin Definitions */
 
-     extend: 'Ext.grid.feature.Grouping',
 
-     alias: 'feature.groupingsummary',
 
-     mixins: {
 
-         summary: 'Ext.grid.feature.AbstractSummary'
 
-     },
 
-     /* End Definitions */
 
-     init: function() {
 
-         this.mixins.summary.init.call(this);
 
-     },
 
- <span id='Ext-grid-feature-GroupingSummary-method-getFeatureTpl'>   /**
 
- </span>    * Modifies the row template to include the summary row.
 
-     * @private
 
-     * @return {String} The modified template
 
-     */
 
-    getFeatureTpl: function() {
 
-         var tpl = this.callParent(arguments);
 
-         if (this.showSummaryRow) {
 
-             // lop off the end </tpl> so we can attach it
 
-             tpl = tpl.replace('</tpl>', '');
 
-             tpl += '{[this.printSummaryRow(xindex)]}</tpl>';
 
-         }
 
-         return tpl;
 
-     },
 
- <span id='Ext-grid-feature-GroupingSummary-method-getFragmentTpl'>    /**
 
- </span>     * Gets any fragments needed for the template.
 
-      * @private
 
-      * @return {Object} The fragments
 
-      */
 
-     getFragmentTpl: function() {
 
-         var me = this,
 
-             fragments = me.callParent();
 
-         Ext.apply(fragments, me.getSummaryFragments());
 
-         if (me.showSummaryRow) {
 
-             // this gets called before render, so we'll setup the data here.
 
-             me.summaryGroups = me.view.store.getGroups();
 
-             me.summaryData = me.generateSummaryData();
 
-         }
 
-         return fragments;
 
-     },
 
- <span id='Ext-grid-feature-GroupingSummary-method-getPrintData'>    /**
 
- </span>     * Gets the data for printing a template row
 
-      * @private
 
-      * @param {Number} index The index in the template
 
-      * @return {Array} The template values
 
-      */
 
-     getPrintData: function(index){
 
-         var me = this,
 
-             columns = me.view.headerCt.getColumnsForTpl(),
 
-             i = 0,
 
-             length = columns.length,
 
-             data = [],
 
-             name = me.summaryGroups[index - 1].name,
 
-             active = me.summaryData[name],
 
-             column;
 
-         for (; i < length; ++i) {
 
-             column = columns[i];
 
-             column.gridSummaryValue = this.getColumnValue(column, active);
 
-             data.push(column);
 
-         }
 
-         return data;
 
-     },
 
- <span id='Ext-grid-feature-GroupingSummary-method-generateSummaryData'>    /**
 
- </span>     * Generates all of the summary data to be used when processing the template
 
-      * @private
 
-      * @return {Object} The summary data
 
-      */
 
-     generateSummaryData: function(){
 
-         var me = this,
 
-             data = {},
 
-             remoteData = {},
 
-             store = me.view.store,
 
-             groupField = this.getGroupField(),
 
-             reader = store.proxy.reader,
 
-             groups = me.summaryGroups,
 
-             columns = me.view.headerCt.getColumnsForTpl(),
 
-             remote,
 
-             i,
 
-             length,
 
-             fieldData,
 
-             root,
 
-             key,
 
-             comp,
 
-             summaryRows,
 
-             s,
 
-             sLen,
 
-             convertedSummaryRow;
 
-         for (i = 0, length = groups.length; i < length; ++i) {
 
-             data[groups[i].name] = {};
 
-         }
 
- <span id='Ext-grid-feature-GroupingSummary-cfg-remoteRoot'>        /**
 
- </span>         * @cfg {String} [remoteRoot=undefined]
 
-          * The name of the property which contains the Array of summary objects.
 
-          * It allows to use server-side calculated summaries.
 
-          */
 
-         if (me.remoteRoot && reader.rawData) {
 
-             // reset reader root and rebuild extractors to extract summaries data
 
-             root = reader.root;
 
-             reader.root = me.remoteRoot;
 
-             reader.buildExtractors(true);
 
-             summaryRows = reader.getRoot(reader.rawData);
 
-             sLen      = summaryRows.length;
 
-             // Ensure the Reader has a data conversion function to convert a raw data row into a Record data hash
 
-             if (!reader.convertRecordData) {
 
-                 reader.buildExtractors();
 
-             }
 
-             for (s = 0; s < sLen; s++) {
 
-                 convertedSummaryRow = {};
 
-                 // Convert a raw data row into a Record's hash object using the Reader
 
-                 reader.convertRecordData(convertedSummaryRow, summaryRows[s]);
 
-                 remoteData[convertedSummaryRow[groupField]] = convertedSummaryRow;
 
-             }
 
-             // restore initial reader configuration
 
-             reader.root = root;
 
-             reader.buildExtractors(true);
 
-         }
 
-         for (i = 0, length = columns.length; i < length; ++i) {
 
-             comp = Ext.getCmp(columns[i].id);
 
-             fieldData = me.getSummary(store, comp.summaryType, comp.dataIndex, true);
 
-             for (key in fieldData) {
 
-                 if (fieldData.hasOwnProperty(key)) {
 
-                     data[key][comp.id] = fieldData[key];
 
-                 }
 
-             }
 
-             for (key in remoteData) {
 
-                 if (remoteData.hasOwnProperty(key)) {
 
-                     remote = remoteData[key][comp.dataIndex];
 
-                     if (remote !== undefined && data[key] !== undefined) {
 
-                         data[key][comp.id] = remote;
 
-                     }
 
-                 }
 
-             }
 
-         }
 
-         return data;
 
-     }
 
- });
 
- </pre>
 
- </body>
 
- </html>
 
 
  |