| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 | 
							- <!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-ux-ajax-DataSimlet'>/**
 
- </span> * This base class is used to handle data preparation (e.g., sorting, filtering and
 
-  * group summary).
 
-  */
 
- Ext.define('Ext.ux.ajax.DataSimlet', function () {
 
-     function makeSortFn (def, cmp) {
 
-         var order = def.direction,
 
-             sign = (order && order.toUpperCase() == 'DESC') ? -1 : 1;
 
-         return function (leftRec, rightRec) {
 
-             var lhs = leftRec[def.property],
 
-                 rhs = rightRec[def.property],
 
-                 c = (lhs < rhs) ? -1 : ((rhs < lhs) ? 1 : 0);
 
-             if (c || !cmp) {
 
-                 return c * sign;
 
-             }
 
-             return cmp(leftRec, rightRec);
 
-         }
 
-     }
 
-     function makeSortFns (defs, cmp) {
 
-         for (var sortFn = cmp, i = defs && defs.length; i; ) {
 
-             sortFn = makeSortFn(defs[--i], sortFn);
 
-         }
 
-         return sortFn;
 
-     }
 
-     return {
 
-         extend: 'Ext.ux.ajax.Simlet',
 
-         getData: function (ctx) {
 
-             var me = this,
 
-                 data = me.data,
 
-                 params = ctx.params,
 
-                 order = (params.group||'')+'-'+(params.sort||'')+'-'+(params.dir||''),
 
-                 fields,
 
-                 sortFn;
 
-             if (!order) {
 
-                 return data;
 
-             }
 
-             ctx.groupSpec = params.group && Ext.decode(params.group);
 
-             if (order == me.currentOrder) {
 
-                 return me.sortedData;
 
-             }
 
-             fields = params.sort;
 
-             if (params.dir) {
 
-                 fields = [{ direction: params.dir, property: fields }];
 
-             } else {
 
-                 fields = Ext.decode(params.sort);
 
-             }
 
-             sortFn = makeSortFns((ctx.sortSpec = fields));
 
-             sortFn = makeSortFns(ctx.groupSpec, sortFn);
 
-             data = data.slice(0); // preserve 'physical' order of raw data...
 
-             if (sortFn) {
 
-                 Ext.Array.sort(data, sortFn);
 
-             }
 
-             me.sortedData = data;
 
-             me.currentOrder = order;
 
-             return data;
 
-         },
 
-         getPage: function (ctx, data) {
 
-             var ret = data,
 
-                 length = data.length,
 
-                 start = ctx.params.start || 0,
 
-                 end = ctx.params.limit ? Math.min(length, start + ctx.params.limit) : length;
 
-             if (start || end < length) {
 
-                 ret = ret.slice(start, end);
 
-             }
 
-             return ret;
 
-         },
 
-         getGroupSummary: function (groupField, rows, ctx) {
 
-             return rows[0];
 
-         },
 
-         getSummary: function (ctx, data, page) {
 
-             var me = this,
 
-                 groupField = ctx.groupSpec[0].property,
 
-                 accum,
 
-                 todo = {},
 
-                 summary = [],
 
-                 fieldValue,
 
-                 lastFieldValue;
 
-             Ext.each(page, function (rec) {
 
-                 fieldValue = rec[groupField];
 
-                 todo[fieldValue] = true;
 
-             });
 
-             function flush () {
 
-                 if (accum) {
 
-                     summary.push(me.getGroupSummary(groupField, accum, ctx));
 
-                     accum = null;
 
-                 }
 
-             }
 
-             // data is ordered primarily by the groupField, so one pass can pick up all
 
-             // the summaries one at a time.
 
-             Ext.each(data, function (rec) {
 
-                 fieldValue = rec[groupField];
 
-                 if (lastFieldValue !== fieldValue) {
 
-                     flush();
 
-                     lastFieldValue = fieldValue;
 
-                 }
 
-                 if (!todo[fieldValue]) {
 
-                     // if we have even 1 summary, we have summarized all that we need
 
-                     // (again because data and page are ordered by groupField)
 
-                     return !summary.length;
 
-                 }
 
-                 if (accum) {
 
-                     accum.push(rec);
 
-                 } else {
 
-                     accum = [rec];
 
-                 }
 
-                 return true;
 
-             });
 
-             flush(); // make sure that last pesky summary goes...
 
-             return summary;
 
-         }
 
-     };
 
- }());
 
- </pre>
 
- </body>
 
- </html>
 
 
  |