[ Mini Kiebo ]
Server: Windows NT DESKTOP-5B8S0D4 6.2 build 9200 (Windows 8 Professional Edition) i586
Path:
D:
/
xampp182
/
htdocs
/
simpeg
/
zapatec
/
zpgrid
/
zpgrid
/
jsdocs
/
[
Home
]
File: overview-summary-zpgrid-aggregate.js.html
<!doctype html public "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd"> <html> <head> <title> Zapatec Grid Overview </title> <link rel ="stylesheet" type="text/css" href="stylesheet.css" title="Style"> <script> function asd() { parent.document.title="zpgrid-aggregate.js Overview"; } </script> </head> <body bgcolor="white" onload="asd();"> <!-- ========== START OF NAVBAR ========== --> <a name="navbar_top"><!-- --></a> <table border="0" width="100%" cellpadding="1" cellspacing="0"> <tr> <td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1"> <a name="navbar_top_firstrow"><!-- --></a> <table border="0" cellpadding="0" cellspacing="3"> <tr align="center" valign="top"> <td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a> </td> <td bgcolor="#FFFFFF" class="NavBarCell1Rev"> <font class="NavBarFont1Rev"><b>File</b></font> </td> <td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font> </td> <td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a> </td> <td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a> </td> <td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a> </td> </tr> </table> </td> <td bgcolor="#EEEEFF" align="right" valign="top"> <em> <b>Zapatec Grid</b></em> </td> </tr> <tr> <td bgcolor="white" class="NavBarCell2"><font size="-2"> PREV NEXT</font></td> <td bgcolor="white" class="NavBarCell2"><font size="-2"> <a href="index.html" target="_top"><b>FRAMES</b></a> <a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a> <script> <!-- if(window==top) { document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>'); } //--> </script> <noscript> <a href="allclasses-noframe.html" target=""><b>All Classes</b></a> </noscript> </font></td> </tr> </table> <!-- =========== END OF NAVBAR =========== --> <hr> <center> <h2>zpgrid-aggregate.js</h2> </center> <h4>Summary</h4> <p> Plugin for Zapatec Grid to calculate totals. <pre> Copyright (c) 2004-2006 by Zapatec, Inc. http://www.zapatec.com 1700 MLK Way, Berkeley, California, 94709, U.S.A. All rights reserved. </pre><BR/><BR/> </p> <hr> <!-- ========== METHOD SUMMARY =========== --> <!-- ========== END METHOD SUMMARY =========== --> <pre class="sourceview"><span class="comment">/** * <span class="attrib">@fileoverview</span> Plugin for Zapatec Grid to calculate totals. * * <pre> * Copyright (c) 2004-2006 by Zapatec, Inc. * http://www.zapatec.com * 1700 MLK Way, Berkeley, California, * 94709, U.S.A. * All rights reserved. * </pre> */</span> <span class="comment">/* $Id: zpgrid-aggregate.js 7629 2007-07-31 09:44:52Z alex $ */</span> <span class="comment">/** * Gets called from aggregate functions to calculate totals for one or several * columns. * * <pre> * Takes in following object: * { * aggregate: [function] one of internal aggregate callbacks, * grid: [object] grid object, * rows: [object] array of row objects, * column: [object or number] array of zero-based column numbers or single * zero-based column number to calculate, * label: [string, optional] label for the value, * labelColumn: [string, optional] zero-based column number where to put label * (by default label is placed before the value in the same cell) * } * * Returns following object: * { * rows: * [ * { * cells: * [ * { * v: [string] value to display * }, * ... * ] * } * ] * } * </pre> * * <span class="attrib">@private</span> * <span class="attrib">@param</span> {object} oArg Arguments object * <span class="attrib">@return</span> Row with totals * <span class="attrib">@type</span> object */</span> Zapatec.Grid.aggregate = <span class="reserved">function</span>(oArg) { <span class="comment">// Check arguments</span> <span class="reserved">if</span> (!oArg || typeof oArg.aggregate != <span class="literal">'function'</span>) { <span class="reserved">return</span>; } <span class="comment">// Get grid</span> var oGrid = oArg.grid; <span class="reserved">if</span> (!(oGrid instanceof Zapatec.Grid)) { <span class="reserved">return</span>; } <span class="comment">// Get fields</span> var aFields = oGrid.getFields(); <span class="comment">// Get columns</span> var aColumns = []; oArg.totals = []; <span class="reserved">if</span> (oArg.column instanceof Array) { <span class="comment">// Multiple columns</span> <span class="reserved">for</span> (var iCol = 0; iCol < oArg.column.length; iCol++) { var iColId = oArg.column[iCol]; <span class="reserved">if</span> (typeof aFields[iColId] != <span class="literal">'undefined'</span>) { aColumns.push(iColId); oArg.totals[iColId] = 0; } } } <span class="reserved">else</span> <span class="reserved">if</span> (typeof aFields[oArg.column] != <span class="literal">'undefined'</span>) { <span class="comment">// Single column</span> aColumns.push(oArg.column); oArg.totals[oArg.column] = 0; } <span class="reserved">if</span> (!aColumns.length) { <span class="reserved">return</span>; } oArg.column = aColumns; <span class="comment">// Calculate totals</span> <span class="reserved">if</span> ((oArg.rows instanceof Array) && oArg.rows.length) { oArg.aggregate(oArg); } <span class="comment">// Get label column</span> var iLabelColumn; <span class="reserved">if</span> (typeof oArg.labelColumn != <span class="literal">'undefined'</span> && typeof aFields[oArg.labelColumn] != <span class="literal">'undefined'</span>) { iLabelColumn = oArg.labelColumn; } <span class="comment">// Form prefix</span> var sPrefix = <span class="literal">''</span>; <span class="reserved">if</span> (typeof iLabelColumn == <span class="literal">'undefined'</span> && oArg.label) { sPrefix = oArg.label + <span class="literal">' '</span>; } <span class="comment">// Form result</span> oResult = { rows: [ { cells: [] } ] }; <span class="reserved">for</span> (var iCol = 0; iCol < aFields.length; iCol++) { var val = oArg.totals[iCol]; <span class="reserved">if</span> (typeof val == <span class="literal">'undefined'</span>) { val = <span class="literal">''</span>; } <span class="reserved">else</span> { val = sPrefix + val; } oResult.rows[0].cells.push({v: val}); } <span class="comment">// Add label</span> <span class="reserved">if</span> (typeof iLabelColumn != <span class="literal">'undefined'</span> && oArg.label) { oResult.rows[0].cells[iLabelColumn].v = oArg.label; } <span class="reserved">return</span> oResult; }; <span class="comment">/** * Calculates sum for one or several columns. * * <pre> * Takes in following object: * { * grid: [object] grid object, * rows: [object] array of row objects, * column: [object or number] array of zero-based column numbers or single * zero-based column number to calculate, * label: [string, optional] label for the value (overrides standard label), * labelColumn: [string, optional] zero-based column number where to put label * (by default label is placed before the value in the same cell) * } * * Returns following object: * { * rows: * [ * { * cells: * [ * { * v: [string] value to display * }, * ... * ] * } * ] * } * </pre> * * <span class="attrib">@param</span> {object} oArg Arguments object * <span class="attrib">@return</span> Row with totals * <span class="attrib">@type</span> object */</span> Zapatec.Grid.sum = <span class="reserved">function</span>(oArg) { oArg.aggregate = Zapatec.Grid.aggregateSum; <span class="comment">// Default label</span> <span class="reserved">if</span> (typeof oArg.label == <span class="literal">'undefined'</span>) { oArg.label = <span class="literal">'Total:'</span> } <span class="reserved">return</span> Zapatec.Grid.aggregate(oArg); }; <span class="comment">/** * Internal aggregate callback to calculate sum of the column. Gets called from * {<span class="attrib">@link</span> Zapatec.Grid#aggregate}. * * <pre> * Takes in following object: * { * totals: [object] array having as many members as there are fields in the * grid and initializied with 0 for each column to calculate; 0 will be * replaced with sum of the column by this function, * grid: [object] grid object, * rows: [object] array of row objects, * column: [object] array of zero-based column numbers to calculate * } * * Instead of returning result, modifies array passed with "totals" property of * input object. * </pre> * * <span class="attrib">@private</span> * <span class="attrib">@param</span> {object} oArg Arguments object */</span> Zapatec.Grid.aggregateSum = <span class="reserved">function</span>(oArg) { <span class="comment">// Get grid</span> var oGrid = oArg.grid; <span class="comment">// Calculate sum and get precisions</span> var aPrecisions = oArg.totals.slice(); var aRows = oArg.rows; var iRows = aRows.length; var aColumns = oArg.column; var iColumns = aColumns.length; <span class="reserved">for</span> (var iRow = 0; iRow < iRows; iRow++) { var oRow = aRows[iRow]; <span class="reserved">for</span> (var iCol = 0; iCol < iColumns; iCol++) { var iColId = aColumns[iCol]; <span class="comment">// Get cell value</span> var val = oGrid.getCellValueOriginal(oGrid.getCellByRow(oRow, iColId)); <span class="comment">// Convert to number</span> var iVal = val * 1; <span class="reserved">if</span> (!isNaN(iVal)) { <span class="comment">// Save precision</span> var iPrecision = Zapatec.Utils.getPrecision(val); <span class="reserved">if</span> (iPrecision > aPrecisions[iColId]) { aPrecisions[iColId] = iPrecision; } <span class="comment">// Add to the sum and correct precision of result</span> oArg.totals[iColId] = Zapatec.Utils.setPrecision(oArg.totals[iColId] + iVal, aPrecisions[iColId]); } } } <span class="comment">// Correct precisions</span> <span class="reserved">for</span> (var iCol = 0; iCol < iColumns; iCol++) { var iColId = aColumns[iCol]; oArg.totals[iColId] = Zapatec.Utils.setPrecisionString(oArg.totals[iColId], aPrecisions[iColId]); } }; <span class="comment">/** * Calculates average for one or several columns. Input and output object format * is the same as for {<span class="attrib">@link</span> Zapatec.Grid#sum}. * * <span class="attrib">@param</span> {object} oArg Arguments object * <span class="attrib">@return</span> Row with totals * <span class="attrib">@type</span> object */</span> Zapatec.Grid.avg = <span class="reserved">function</span>(oArg) { oArg.aggregate = Zapatec.Grid.aggregateAvg; <span class="comment">// Default label</span> <span class="reserved">if</span> (typeof oArg.label == <span class="literal">'undefined'</span>) { oArg.label = <span class="literal">'AVG:'</span> } <span class="reserved">return</span> Zapatec.Grid.aggregate(oArg); }; <span class="comment">/** * Internal aggregate callback to calculate average of the column. Gets called * from {<span class="attrib">@link</span> Zapatec.Grid#aggregate}. * * <pre> * Takes in following object: * { * totals: [object] array having as many members as there are fields in the * grid and initializied with 0 for each column to calculate; 0 will be * replaced with average of the column by this function, * grid: [object] grid object, * rows: [object] array of row objects, * column: [object] array of zero-based column numbers to calculate * } * * Instead of returning result, modifies array passed with "totals" property of * input object. * </pre> * * <span class="attrib">@private</span> * <span class="attrib">@param</span> {object} oArg Arguments object */</span> Zapatec.Grid.aggregateAvg = <span class="reserved">function</span>(oArg) { <span class="comment">// Get sum</span> Zapatec.Grid.aggregateSum(oArg); <span class="comment">// Get number of rows</span> var iRows = oArg.rows.length; <span class="comment">// Get precision and calculate average</span> <span class="reserved">for</span> (var iCol = 0; iCol < oArg.column.length; iCol++) { var iColId = oArg.column[iCol]; var iPrecision = Zapatec.Utils.getPrecision(oArg.totals[iColId]); var fAvg = oArg.totals[iColId] / iRows; oArg.totals[iColId] = Zapatec.Utils.setPrecisionString(fAvg, iPrecision); } }; <span class="comment">/** * Calculates min value for one or several columns. Input and output object * format is the same as for {<span class="attrib">@link</span> Zapatec.Grid#sum}. * * <span class="attrib">@param</span> {object} oArg Arguments object * <span class="attrib">@return</span> Row with totals * <span class="attrib">@type</span> object */</span> Zapatec.Grid.min = <span class="reserved">function</span>(oArg) { oArg.aggregate = Zapatec.Grid.aggregateCompare; oArg.sign = <span class="literal">'<'</span>; <span class="comment">// Default label</span> <span class="reserved">if</span> (typeof oArg.label == <span class="literal">'undefined'</span>) { oArg.label = <span class="literal">'Min:'</span> } <span class="reserved">return</span> Zapatec.Grid.aggregate(oArg); }; <span class="comment">/** * Calculates max value for one or several columns. Input and output object * format is the same as for {<span class="attrib">@link</span> Zapatec.Grid#sum}. * * <span class="attrib">@param</span> {object} oArg Arguments object * <span class="attrib">@return</span> Row with totals * <span class="attrib">@type</span> object */</span> Zapatec.Grid.max = <span class="reserved">function</span>(oArg) { oArg.aggregate = Zapatec.Grid.aggregateCompare; oArg.sign = <span class="literal">'>'</span>; <span class="reserved">if</span> (typeof oArg.label == <span class="literal">'undefined'</span>) { oArg.label = <span class="literal">'Max:'</span> } <span class="reserved">return</span> Zapatec.Grid.aggregate(oArg); }; <span class="comment">/** * Internal aggregate callback to calculate min or max of the column. Gets * called from {<span class="attrib">@link</span> Zapatec.Grid#aggregate}. * * <pre> * Takes in following object: * { * totals: [object] array having as many members as there are fields in the * grid and initializied with 0 for each column to calculate; 0 will be * replaced with min or max of the column by this function, * sign: [string] sign to use, e.g. '<' to get min and '>' to get max, * grid: [object] grid object, * rows: [object] array of row objects, * column: [object] array of zero-based column numbers to calculate * } * * Instead of returning result, modifies array passed with "totals" property of * input object. * </pre> * * <span class="attrib">@private</span> * <span class="attrib">@param</span> {object} oArg Arguments object */</span> Zapatec.Grid.aggregateCompare = <span class="reserved">function</span>(oArg) { <span class="comment">// Get grid</span> var oGrid = oArg.grid; <span class="comment">// Init totals</span> var oRow = oArg.rows[0]; <span class="reserved">for</span> (var iCol = 0; iCol < oArg.column.length; iCol++) { var iColId = oArg.column[iCol]; oArg.totals[iColId] = oGrid.getCellByRow(oRow, iColId); } <span class="comment">// Find max cell</span> <span class="reserved">for</span> (var iRow = 0; iRow < oArg.rows.length; iRow++) { oRow = oArg.rows[iRow]; <span class="reserved">for</span> (var iCol = 0; iCol < oArg.column.length; iCol++) { var iColId = oArg.column[iCol]; var oCell = oGrid.getCellByRow(oRow, iColId); <span class="comment">// Compare cells</span> <span class="reserved">if</span> (eval(<span class="literal">'oGrid.getCellValueCompare(oCell)'</span> + oArg.sign + <span class="literal">'oGrid.getCellValueCompare(oArg.totals[iColId])'</span>)) { oArg.totals[iColId] = oCell; } } } <span class="comment">// Convert to values</span> <span class="reserved">for</span> (var iCol = 0; iCol < oArg.column.length; iCol++) { var iColId = oArg.column[iCol]; oArg.totals[iColId] = oGrid.getCellValue(oArg.totals[iColId]); } }; <span class="comment">/** * Calculates count for one or several columns. Input and output object format * is the same as for {<span class="attrib">@link</span> Zapatec.Grid#sum}. * * <span class="attrib">@param</span> {object} oArg Arguments object * <span class="attrib">@return</span> Row with totals * <span class="attrib">@type</span> object */</span> Zapatec.Grid.count = <span class="reserved">function</span>(oArg) { oArg.aggregate = Zapatec.Grid.aggregateCount; <span class="reserved">if</span> (typeof oArg.label == <span class="literal">'undefined'</span>) { oArg.label = <span class="literal">'Count:'</span> } <span class="reserved">return</span> Zapatec.Grid.aggregate(oArg); }; <span class="comment">/** * Internal aggregate callback to get count of the column. Gets called from * {<span class="attrib">@link</span> Zapatec.Grid#aggregate}. * * <pre> * Takes in following object: * { * totals: [object] array having as many members as there are fields in the * grid and initializied with 0 for each column to calculate; 0 will be * replaced with count of the column by this function, * grid: [object] grid object, * rows: [object] array of row objects, * column: [object] array of zero-based column numbers to calculate * } * * Instead of returning result, modifies array passed with "totals" property of * input object. * </pre> * * <span class="attrib">@private</span> * <span class="attrib">@param</span> {object} oArg Arguments object */</span> Zapatec.Grid.aggregateCount = <span class="reserved">function</span>(oArg) { <span class="comment">// Get grid</span> var oGrid = oArg.grid; <span class="comment">// Get number of rows</span> var iRows = oArg.rows.length; <span class="comment">// Set count</span> <span class="reserved">for</span> (var iCol = 0; iCol < oArg.column.length; iCol++) { oArg.totals[oArg.column[iCol]] = iRows; } }; <span class="comment">/** * Calculates count of distinct values for one or several columns. Input and * output object format is the same as for {<span class="attrib">@link</span> Zapatec.Grid#sum}. * * <span class="attrib">@param</span> {object} oArg Arguments object * <span class="attrib">@return</span> Row with totals * <span class="attrib">@type</span> object */</span> Zapatec.Grid.countDistinct = <span class="reserved">function</span>(oArg) { oArg.aggregate = Zapatec.Grid.aggregateCountDistinct; <span class="reserved">if</span> (typeof oArg.label == <span class="literal">'undefined'</span>) { oArg.label = <span class="literal">'Distinct:'</span> } <span class="reserved">return</span> Zapatec.Grid.aggregate(oArg); }; <span class="comment">/** * Internal aggregate callback to get count of distinct values of the column. * Gets called from {<span class="attrib">@link</span> Zapatec.Grid#aggregate}. * * <pre> * Takes in following object: * { * totals: [object] array having as many members as there are fields in the * grid and initializied with 0 for each column to calculate; 0 will be * replaced with count of distinct values of the column by this function, * grid: [object] grid object, * rows: [object] array of row objects, * column: [object] array of zero-based column numbers to calculate * } * * Instead of returning result, modifies array passed with "totals" property of * input object. * </pre> * * <span class="attrib">@private</span> * <span class="attrib">@param</span> {object} oArg Arguments object */</span> Zapatec.Grid.aggregateCountDistinct = <span class="reserved">function</span>(oArg) { <span class="comment">// Get grid</span> var oGrid = oArg.grid; <span class="comment">// Prepare buffer</span> var aDistinct = []; <span class="reserved">for</span> (var iCol = 0; iCol < oArg.column.length; iCol++) { aDistinct[iCol] = {}; } <span class="comment">// Count distinct</span> <span class="reserved">for</span> (var iRow = 0; iRow < oArg.rows.length; iRow++) { var oRow = oArg.rows[iRow]; <span class="reserved">for</span> (var iCol = 0; iCol < oArg.column.length; iCol++) { var iColId = oArg.column[iCol]; var sVal = oGrid.getCellValueString(oGrid.getCellByRow(oRow, iColId)); <span class="comment">// Check distinct</span> <span class="reserved">if</span> (typeof aDistinct[iCol][sVal] == <span class="literal">'undefined'</span>) { aDistinct[iCol][sVal] = true; oArg.totals[iColId]++; } } } }; <span class="comment">/** * Returns array of rows for totals section. * * <span class="attrib">@return</span> Array of rows for totals section * <span class="attrib">@type</span> object */</span> Zapatec.Grid.<span class="reserved">prototype</span>.getTotals = <span class="reserved">function</span>() { <span class="comment">// Check if there are totals</span> var aTotalsRules = <span class="reserved">this</span>.totalsRules; var iTotalsRules = aTotalsRules.length; <span class="comment">// Calculate totals</span> var aTotals = []; <span class="reserved">for</span> (var iTotal = 0; iTotal < iTotalsRules; iTotal++) { var oTotal = aTotalsRules[iTotal]; <span class="comment">// Get callback</span> <span class="reserved">if</span> (typeof oTotal.callback != <span class="literal">'function'</span>) { oTotal.callback = Zapatec.Grid.sum; } <span class="comment">// Calculate rows</span> var oResult = oTotal.callback({ grid: <span class="reserved">this</span>, rows: <span class="reserved">this</span>.getFilteredRows(), column: oTotal.column, label: oTotal.label, labelColumn: oTotal.labelColumn }); <span class="comment">// Add rows</span> <span class="reserved">if</span> (oResult && (oResult.rows instanceof Array)) { <span class="reserved">for</span> (var iRow = 0; iRow < oResult.rows.length; iRow++) { aTotals.push(oResult.rows[iRow]); } } } <span class="reserved">return</span> aTotals; }; <span class="comment">/** * Forms grid output. * * <span class="attrib">@private</span> * <span class="attrib">@param</span> {object} aHtml Output array * <span class="attrib">@param</span> {object} aCols Array with field objects to output * <span class="attrib">@param</span> {object} aFixedCols Array with fixed field objects to output * <span class="attrib">@param</span> {object} aRows Array with row objects to output * <span class="attrib">@param</span> {boolean) bFixed Optional. Indicates that this is fixed part of table */</span> Zapatec.Grid.<span class="reserved">prototype</span>.outputTotals = <span class="reserved">function</span>(aHtml, aCols, aFixedCols, aRows, bFixed) { <span class="reserved">if</span> (typeof <span class="reserved">this</span>.config.callbackTotalsDisplay == <span class="literal">'function'</span> || typeof <span class="reserved">this</span>.config.callbackTotalDisplay == <span class="literal">'function'</span> || !aRows) { <span class="reserved">return</span>; } <span class="reserved">if</span> (<span class="reserved">this</span>.config.horizontal) { <span class="comment">// Horizontal layout</span> <span class="reserved">this</span>.outputTotalsHoriz(aHtml, aCols, aFixedCols, aRows, bFixed); } <span class="reserved">else</span> { <span class="comment">// Vertical layout</span> <span class="reserved">this</span>.outputTotalsVert(aHtml, aCols, aFixedCols, aRows, bFixed); } }; <span class="comment">/** * Forms grid output. * * <span class="attrib">@private</span> * <span class="attrib">@param</span> {object} aHtml Output array * <span class="attrib">@param</span> {object} aCols Array with field objects to output * <span class="attrib">@param</span> {object} aFixedCols Array with fixed field objects to output * <span class="attrib">@param</span> {object} aRows Array with row objects to output * <span class="attrib">@param</span> {boolean) bFixed Optional. Indicates that this is fixed part of table */</span> Zapatec.Grid.<span class="reserved">prototype</span>.outputTotalsHoriz = <span class="reserved">function</span>(aHtml, aCols, aFixedCols, aRows, bFixed) { <span class="reserved">if</span> (bFixed) { aCols = aFixedCols; } <span class="reserved">for</span> (var iCol = 0; iCol < aCols.length; iCol++) { <span class="comment">// Get field object</span> var oField = aCols[iCol]; var aCl = []; aCl.push(<span class="literal">'zpGridCol zpGridCol'</span>); aCl.push(iCol); <span class="reserved">if</span> (iCol % 2 == 1) { aCl.push(<span class="literal">' zpGridColOdd'</span>); } <span class="reserved">else</span> { aCl.push(<span class="literal">' zpGridColEven'</span>); } <span class="reserved">if</span> (iCol == aCols.length - 1) { aCl.push(<span class="literal">' zpGridColLast'</span>); } var sClass = aCl.join(<span class="literal">''</span>); var aTr = []; aTr.push(<span class="literal">'<tr id="zpGrid'</span>); aTr.push(<span class="reserved">this</span>.id); aTr.push(<span class="literal">'TotalCol'</span>); aTr.push(oField.i); <span class="reserved">if</span> (bFixed) { aTr.push(<span class="literal">'Fixed'</span>); } aTr.push(<span class="literal">'" class="'</span>); aTr.push(sClass); aTr.push(<span class="literal">'">'</span>); <span class="comment">// Output rows</span> <span class="reserved">if</span> (bFixed) { <span class="reserved">for</span> (var iRow = 0; iRow < aRows.length; iRow++) { <span class="reserved">this</span>.outputTotalsCell(aTr, oField, aRows[iRow], iCol, iRow, aRows.length); } } <span class="reserved">else</span> { <span class="reserved">for</span> (var iRow = 0; iRow < aRows.length; iRow++) { var bHidden = (iCol < aFixedCols.length); <span class="reserved">this</span>.outputTotalsCell(aTr, oField, aRows[iRow], iCol, iRow, aRows.length, bHidden); } } aTr.push(<span class="literal">'</tr>'</span>); aHtml.push(aTr.join(<span class="literal">''</span>)); } }; <span class="comment">/** * Forms grid output. * * <span class="attrib">@private</span> * <span class="attrib">@param</span> {object} aHtml Output array * <span class="attrib">@param</span> {object} aCols Array with field objects to output * <span class="attrib">@param</span> {object} aFixedCols Array with fixed field objects to output * <span class="attrib">@param</span> {object} aRows Array with row objects to output * <span class="attrib">@param</span> {boolean) bFixed Optional. Indicates that this is fixed part of row */</span> Zapatec.Grid.<span class="reserved">prototype</span>.outputTotalsVert = <span class="reserved">function</span>(aHtml, aCols, aFixedCols, aRows, bFixed) { <span class="reserved">for</span> (var iRow = 0; iRow < aRows.length; iRow++) { <span class="comment">// Get row</span> var oRow = aRows[iRow]; <span class="reserved">if</span> (!oRow) { <span class="reserved">return</span>; } var aCl = []; aCl.push(<span class="literal">'zpGridRow zpGridRowTotals zpGridRowTotals'</span>); aCl.push(iRow); aCl.push(<span class="literal">' zpGridRowTotals'</span>); aCl.push(iRow % 2 == 1 ? <span class="literal">'Odd'</span> : <span class="literal">'Even'</span>); <span class="reserved">if</span> (iRow == aRows.length - 1) { aCl.push(<span class="literal">' zpGridRowLast zpGridRowTotalsLast'</span>); } var sClass = aCl.join(<span class="literal">''</span>); var aTr = []; aTr.push(<span class="literal">'<tr id="zpGrid'</span>); aTr.push(<span class="reserved">this</span>.id); aTr.push(<span class="literal">'Total'</span>); aTr.push(iRow); <span class="reserved">if</span> (bFixed) { aTr.push(<span class="literal">'Fixed'</span>); } aTr.push(<span class="literal">'" class="'</span>); aTr.push(sClass); aTr.push(<span class="literal">'" style="'</span>); <span class="reserved">if</span> (oRow.style) { aTr.push(oRow.style); } aTr.push(<span class="literal">'">'</span>); <span class="comment">// Display cells</span> <span class="reserved">if</span> (bFixed) { <span class="reserved">for</span> (var iCol = 0; iCol < aFixedCols.length; iCol++) { <span class="reserved">this</span>.outputTotalsCell(aTr, aFixedCols[iCol], oRow, iRow, iCol, aCols.length); } } <span class="reserved">else</span> { <span class="reserved">for</span> (var iCol = 0; iCol < aCols.length; iCol++) { var bHidden = (iCol < aFixedCols.length); <span class="reserved">this</span>.outputTotalsCell(aTr, aCols[iCol], oRow, iRow, iCol, aCols.length, bHidden); } } aTr.push(<span class="literal">'</tr>'</span>); aHtml.push(aTr.join(<span class="literal">''</span>)); } }; <span class="comment">/** * Forms grid output. * * <span class="attrib">@private</span> * <span class="attrib">@param</span> {object} aTr Output array * <span class="attrib">@param</span> {object} oField Field object * <span class="attrib">@param</span> {object} oRow Row object * <span class="attrib">@param</span> {object} iRow Number of row on the page * <span class="attrib">@param</span> {number} iCol Visible column number * <span class="attrib">@param</span> {number} iCols Visible column count * <span class="attrib">@param</span> {boolean} bHidden Optional. Indicates that this is hidden part of * fixed part of row */</span> Zapatec.Grid.<span class="reserved">prototype</span>.outputTotalsCell = <span class="reserved">function</span>(aTr, oField, oRow, iRow, iCol, iCols, bHidden) { <span class="reserved">if</span> (iCol >= <span class="reserved">this</span>.config.fixedLeft && iCol < <span class="reserved">this</span>.currentHorizontalOffset + <span class="reserved">this</span>.config.fixedLeft) { <span class="comment">// Hidden column</span> <span class="reserved">return</span>; } <span class="reserved">if</span> (<span class="reserved">this</span>.config.visibleColumns) { bHidden = false; } <span class="comment">// Get cell</span> var oCell = oRow.cells[oField.i]; <span class="reserved">if</span> (!oCell) { <span class="reserved">return</span>; } var aCl = []; aCl.push(<span class="literal">'zpGridCell zpGridCell'</span>); aCl.push(iCol); aCl.push(<span class="literal">' zpGridColId'</span>); aCl.push(oField.i); aCl.push(<span class="literal">' zpGridCellData zpGridCellData'</span>); aCl.push(iCol); aCl.push(<span class="literal">' zpGridCellTotals zpGridCellTotals'</span>); aCl.push(iCol); <span class="reserved">if</span> (iCol % 2 == 1) { aCl.push(<span class="literal">' zpGridCellOdd zpGridCellDataOdd zpGridCellTotalsOdd'</span>); } <span class="reserved">else</span> { aCl.push(<span class="literal">' zpGridCellEven zpGridCellDataEven zpGridCellTotalsEven'</span>); } <span class="reserved">if</span> (iCol + 1 == iCols) { aCl.push(<span class="literal">' zpGridCellLast zpGridCellDataLast zpGridCellTotalsLast'</span>); } var sClass = aCl.join(<span class="literal">''</span>); var aTd = []; aTd.push(<span class="literal">'<td class="'</span>); aTd.push(sClass); aTd.push(<span class="literal">'" id="zpGrid'</span>); aTd.push(<span class="reserved">this</span>.id); aTd.push(<span class="literal">'Total'</span>); <span class="reserved">if</span> (<span class="reserved">this</span>.config.horizontal) { aTd.push(iCol); } <span class="reserved">else</span> { aTd.push(iRow); } aTd.push(<span class="literal">'Cell'</span>); aTd.push(oField.i); <span class="reserved">if</span> (bHidden) { aTd.push(<span class="literal">'Hidden'</span>); } var sStyle = <span class="reserved">this</span>.getCellStyle(oCell, iRow); <span class="reserved">if</span> (sStyle) { aTd.push(<span class="literal">'" style="'</span>); aTd.push(sStyle); } aTd.push(<span class="literal">'">'</span>); <span class="reserved">this</span>.outputTotalsCellValue(aTd, oField, oRow, oCell); aTd.push(<span class="literal">'</td>'</span>); aTr.push(aTd.join(<span class="literal">''</span>)); }; <span class="comment">/** * Forms grid output. * * <span class="attrib">@private</span> * <span class="attrib">@param</span> {object} aTd Output array * <span class="attrib">@param</span> {object} oField Field object * <span class="attrib">@param</span> {object} oRow Row object * <span class="attrib">@param</span> {object} oCell Cell object */</span> Zapatec.Grid.<span class="reserved">prototype</span>.outputTotalsCellValue = <span class="reserved">function</span>(aTd, oField, oRow, oCell) { <span class="comment">// div is needed to be able to set column width</span> aTd.push(<span class="literal">'<div class="zpGridDiv'</span>); <span class="comment">// Set cell type</span> <span class="reserved">if</span> (<span class="reserved">this</span>.getClassByType) { aTd.push(<span class="literal">' '</span>); aTd.push(<span class="reserved">this</span>.getClassByType(<span class="reserved">this</span>.getFieldType(oField))); } aTd.push(<span class="literal">'">'</span>); var sData = oCell.v + <span class="literal">''</span>; <span class="comment">// Empty cell may cause visual problems in horizontal layout</span> <span class="reserved">if</span> (!sData || !sData.length) { sData = <span class="literal">'&nbsp;'</span>; } aTd.push(sData); aTd.push(<span class="literal">'</div>'</span>); }; <span class="comment">/** * Redraws totals for the specified columns. * * <pre> * Takes in following object: * { * column: [object or number, optional] array of zero-based column numbers or * single zero-based column number to redraw (default is all columns) * } * </pre> * * <span class="attrib">@param</span> {object} oArg Arguments object */</span> Zapatec.Grid.<span class="reserved">prototype</span>.redrawTotals = <span class="reserved">function</span>(oArg) { <span class="comment">// If we are responsible for visualisation</span> <span class="reserved">if</span> (<span class="reserved">this</span>.visualize) { <span class="comment">// Get totals</span> var aTotals = <span class="reserved">this</span>.getTotals(); <span class="reserved">if</span> (!aTotals) { <span class="reserved">return</span>; } <span class="comment">// Get fields</span> var aFields = <span class="reserved">this</span>.getFields(); <span class="comment">// Redraw cells</span> var iGridId = <span class="reserved">this</span>.id; <span class="reserved">for</span> (var iTotal = 0; iTotal < aTotals.length; iTotal++) { var oRow = aTotals[iTotal]; <span class="reserved">for</span> (var iField = 0; iField < aFields.length; iField++) { <span class="comment">// Get table cell element</span> var sCellId = <span class="literal">'zpGrid'</span> + iGridId + <span class="literal">'Total'</span> + iTotal + <span class="literal">'Cell'</span> + iField; var oTd = document.getElementById(sCellId); <span class="reserved">if</span> (oTd) { <span class="comment">// Redraw cell</span> var aTd = []; <span class="reserved">this</span>.outputCellValue(aTd, aFields[iField], oRow.cells[iField]); var sTd = aTd.join(<span class="literal">''</span>); oTd.innerHTML = sTd; <span class="comment">// Redraw hidden cell</span> var oTdHidden = document.getElementById(sCellId + <span class="literal">'Hidden'</span>); <span class="reserved">if</span> (oTdHidden) { oTdHidden.innerHTML = sTd; } } } } } }; </pre> <hr> <!-- ========== START OF NAVBAR ========== --> <a name="navbar_top"><!-- --></a> <table border="0" width="100%" cellpadding="1" cellspacing="0"> <tr> <td colspan=2 bgcolor="#EEEEFF" class="NavBarCell1"> <a name="navbar_top_firstrow"><!-- --></a> <table border="0" cellpadding="0" cellspacing="3"> <tr align="center" valign="top"> <td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="overview-summary.html"><font class="NavBarFont1"><b>Overview</b></font></a> </td> <td bgcolor="#FFFFFF" class="NavBarCell1Rev"> <font class="NavBarFont1Rev"><b>File</b></font> </td> <td bgcolor="#FFFFFF" class="NavBarCell1"> <font class="NavBarFont1">Class</font> </td> <td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="overview-tree.html"><font class="NavBarFont1"><b>Tree</b></font></a> </td> <td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="index-all.html"--><font class="NavBarFont1"><b>Index</b></font></a> </td> <td bgcolor="#EEEEFF" class="NavBarCell1"> <a href="help-doc.html"><font class="NavBarFont1"><b>Help</b></font></a> </td> </tr> </table> </td> <td bgcolor="#EEEEFF" align="right" valign="top"><em> <b>Zapatec Grid</b></em> </td> </tr> <tr> <td bgcolor="white" class="NavBarCell2"><font size="-2"> PREV NEXT</font></td> <td bgcolor="white" class="NavBarCell2"><font size="-2"> <a href="index.html" target="_top"><b>FRAMES</b></a> <a href="overview-summary.html" target="_top"><b>NO FRAMES</b></a> <script> <!-- if(window==top) { document.writeln('<A HREF="allclasses-noframe.html" TARGET=""><B>All Classes</B></A>'); } //--> </script> <noscript> <a href="allclasses-noframe.html" target=""><b>All Classes</b></a> </noscript> </font></td> </tr> </table> <!-- =========== END OF NAVBAR =========== --> <hr> <font size="-1"> </font> <div class="jsdoc_ctime">Documentation generated by <a href="http://jsdoc.sourceforge.net/" target="_parent">JSDoc</a> on Thu Aug 16 12:18:56 2007</div> </body> </html>