| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 | <!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-AbstractSummary'>/**</span> * A small abstract class that contains the shared behaviour for any summary * calculations to be used in the grid. */Ext.define('Ext.grid.feature.AbstractSummary', {        /* Begin Definitions */    extend: 'Ext.grid.feature.Feature',        alias: 'feature.abstractsummary',    /* End Definitions */<span id='Ext-grid-feature-AbstractSummary-cfg-showSummaryRow'>   /**</span>    * @cfg    * True to show the summary row.    */    showSummaryRow: true,    // @private    nestedIdRe: /\{\{id\}([\w\-]*)\}/g,    // Listen for store updates. Eg, from an Editor.    init: function() {        var me = this;        // Summary rows must be kept in column order, so view must be refreshed on column move        me.grid.optimizedColumnMove = false;        me.view.mon(me.view.store, {            update: me.onStoreUpdate,            scope: me        });    },    // Refresh the whole view on edit so that the Summary gets updated    onStoreUpdate: function() {        var v = this.view;        if (this.showSummaryRow) {            v.saveScrollState();            v.refresh();            v.restoreScrollState();        }    },<span id='Ext-grid-feature-AbstractSummary-method-toggleSummaryRow'>    /**</span>     * Toggle whether or not to show the summary row.     * @param {Boolean} visible True to show the summary row     */    toggleSummaryRow: function(visible){        this.showSummaryRow = !!visible;    },<span id='Ext-grid-feature-AbstractSummary-method-getSummaryFragments'>    /**</span>     * Gets any fragments to be used in the tpl     * @private     * @return {Object} The fragments     */    getSummaryFragments: function(){        var fragments = {};        if (this.showSummaryRow) {            Ext.apply(fragments, {                printSummaryRow: Ext.bind(this.printSummaryRow, this)            });        }        return fragments;    },<span id='Ext-grid-feature-AbstractSummary-method-printSummaryRow'>    /**</span>     * Prints a summary row     * @private     * @param {Object} index The index in the template     * @return {String} The value of the summary row     */    printSummaryRow: function(index){        var inner = this.view.getTableChunker().metaRowTpl.join(''),            prefix = Ext.baseCSSPrefix;        inner = inner.replace(prefix + 'grid-row', prefix + 'grid-row-summary');        inner = inner.replace('{{id}}', '{gridSummaryValue}');        inner = inner.replace(this.nestedIdRe, '{id$1}');          inner = inner.replace('{[this.embedRowCls()]}', '{rowCls}');        inner = inner.replace('{[this.embedRowAttr()]}', '{rowAttr}');        inner = new Ext.XTemplate(inner, {            firstOrLastCls: Ext.view.TableChunker.firstOrLastCls        });        return inner.applyTemplate({            columns: this.getPrintData(index)        });    },<span id='Ext-grid-feature-AbstractSummary-method-getColumnValue'>    /**</span>     * Gets the value for the column from the attached data.     * @param {Ext.grid.column.Column} column The header     * @param {Object} data The current data     * @return {String} The value to be rendered     */    getColumnValue: function(column, summaryData){        var comp     = Ext.getCmp(column.id),            value    = summaryData[column.id],            renderer = comp.summaryRenderer;                    if (!value && value !== 0) {            value = '\u00a0';        }        if (renderer) {            value = renderer.call(                comp.scope || this,                value,                summaryData,                column.dataIndex            );        }        return value;    },<span id='Ext-grid-feature-AbstractSummary-method-getSummary'>    /**</span>     * Get the summary data for a field.     * @private     * @param {Ext.data.Store} store The store to get the data from     * @param {String/Function} type The type of aggregation. If a function is specified it will     * be passed to the stores aggregate function.     * @param {String} field The field to aggregate on     * @param {Boolean} group True to aggregate in grouped mode      * @return {Number/String/Object} See the return type for the store functions.     */    getSummary: function(store, type, field, group){        if (type) {            if (Ext.isFunction(type)) {                return store.aggregate(type, null, group);            }            switch (type) {                case 'count':                    return store.count(group);                case 'min':                    return store.min(field, group);                case 'max':                    return store.max(field, group);                case 'sum':                    return store.sum(field, group);                case 'average':                    return store.average(field, group);                default:                    return group ? {} : '';                                }        }    }});</pre></body></html>
 |