[ 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-xml.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-xml.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-xml.js</h2> </center> <h4>Summary</h4> <p> Plugin for Zapatec Grid to input grid data from XML source. <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 input grid data from XML source. * * <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-xml.js 7649 2007-08-03 14:15:03Z alex $ */</span> <span class="comment">/** * Loads data from XML source. * * <span class="attrib">@private</span> * <span class="attrib">@param</span> {object} oDoc Input XMLDocument object. */</span> Zapatec.Grid.<span class="reserved">prototype</span>.loadDataXml = <span class="reserved">function</span>(oDoc) { <span class="comment">// Check arguments</span> <span class="reserved">if</span> (!oDoc) { <span class="reserved">return</span>; } var oDocEl = oDoc.documentElement; <span class="reserved">if</span> (!oDocEl) { <span class="reserved">return</span>; } var oUtils = Zapatec.Utils; var fFC = oUtils.getFirstChild; var oTable = fFC(oDocEl, <span class="literal">'table'</span>); <span class="reserved">if</span> (!oTable) { <span class="reserved">return</span>; } var oFields = fFC(oTable, <span class="literal">'fields'</span>); <span class="reserved">if</span> (!oFields) { <span class="reserved">return</span>; } <span class="comment">// Remove old data</span> var oData = <span class="reserved">this</span>.data = <span class="reserved">this</span>.newDataXml(oTable); var aFields = <span class="reserved">this</span>.fields = oData.fields; <span class="reserved">this</span>.rows = oData.rows; <span class="reserved">this</span>.rowsIndex = []; <span class="comment">// Set primary key column</span> <span class="reserved">this</span>.primaryKeyColumn = oData.primaryKey; <span class="comment">// Set page</span> <span class="reserved">if</span> (typeof oData.currentPage != <span class="literal">'undefined'</span>) { <span class="reserved">this</span>.setCurrentPage(oData.currentPage); } <span class="reserved">else</span> { <span class="reserved">this</span>.setCurrentPage(0); } <span class="comment">// Get fields</span> var oCell = fFC(oFields, <span class="literal">'field'</span>); var fNext = oUtils.getNextSibling; <span class="reserved">while</span> (oCell) { <span class="comment">// Add field</span> aFields.push(<span class="reserved">this</span>.newFieldXml(oCell)); <span class="comment">// Next field</span> oCell = fNext(oCell, <span class="literal">'field'</span>); } <span class="comment">// Get rows</span> var oRows = fFC(oTable, <span class="literal">'rows'</span>); <span class="reserved">if</span> (oRows) { <span class="comment">// Append rows</span> oDocEl.setAttribute(<span class="literal">'norefresh'</span>, <span class="literal">'true'</span>); <span class="reserved">this</span>.spliceXml(oDoc); } <span class="comment">// Show grid</span> <span class="reserved">this</span>.show(); }; <span class="comment">/** * Creates new data object from XML source. * * <span class="attrib">@private</span> * <span class="attrib">@param</span> {object} oTable Source object * <span class="attrib">@return</span> Data object * <span class="attrib">@type</span> object */</span> Zapatec.Grid.<span class="reserved">prototype</span>.newDataXml = <span class="reserved">function</span>(oTable) { <span class="comment">// Create data object</span> var oData = { fields: [], rows: [] }; <span class="comment">// Get attributes</span> var sStyle = oTable.getAttribute(<span class="literal">'style'</span>); <span class="reserved">if</span> (sStyle) { oData.style = sStyle; } var sHeaderStyle = oTable.getAttribute(<span class="literal">'headerstyle'</span>); <span class="reserved">if</span> (!sHeaderStyle) { <span class="comment">// For backward compatibility</span> sHeaderStyle = oTable.getAttribute(<span class="literal">'headerStyle'</span>); } <span class="reserved">if</span> (sHeaderStyle) { oData.headerStyle = sHeaderStyle; } var sPrimaryKey = oTable.getAttribute(<span class="literal">'primarykey'</span>); <span class="reserved">if</span> (sPrimaryKey) { oData.primaryKey = sPrimaryKey; } var sTotalRows = oTable.getAttribute(<span class="literal">'totalrows'</span>); <span class="reserved">if</span> (!sTotalRows) { <span class="comment">// For backward compatibility</span> sTotalRows = oTable.getAttribute(<span class="literal">'totalRows'</span>); } <span class="reserved">if</span> (sTotalRows) { <span class="comment">// Convert to number</span> oData.totalRows = sTotalRows * 1; } var sDisplayedRows = oTable.getAttribute(<span class="literal">'displayedrows'</span>); <span class="reserved">if</span> (!sDisplayedRows) { <span class="comment">// For backward compatibility</span> sDisplayedRows = oTable.getAttribute(<span class="literal">'displayedRows'</span>); } <span class="reserved">if</span> (sDisplayedRows) { <span class="comment">// Convert to number</span> oData.displayedRows = sDisplayedRows * 1; } var sCurrentPage = oTable.getAttribute(<span class="literal">'currentpage'</span>); <span class="reserved">if</span> (!sCurrentPage) { <span class="comment">// For backward compatibility</span> sCurrentPage = oTable.getAttribute(<span class="literal">'currentPage'</span>); } <span class="reserved">if</span> (sCurrentPage) { <span class="comment">// Convert to number</span> oData.currentPage = sCurrentPage * 1; } <span class="reserved">return</span> oData; }; <span class="comment">/** * Returns child text of the first child with a specified tag of the given * parent element. * * <span class="attrib">@private</span> * <span class="attrib">@param</span> {object} oParent Parent element * <span class="attrib">@param</span> {string} sTag Tag of child element * <span class="attrib">@return</span> Child text of child element or undefined if not found * <span class="attrib">@type</span> string */</span> Zapatec.Grid.getFirstChildText = <span class="reserved">function</span>(oParent, sTag) { var oChild = Zapatec.Utils.getFirstChild(oParent, sTag); <span class="reserved">if</span> (oChild) { var sText = Zapatec.Utils.getChildText(oChild); <span class="reserved">if</span> (typeof sText == <span class="literal">'string'</span> && sText.length) { <span class="reserved">return</span> sText; } } }; <span class="comment">/** * Creates new field object from XML source. * * <span class="attrib">@private</span> * <span class="attrib">@param</span> {object} oCell Source object * <span class="attrib">@return</span> Field object * <span class="attrib">@type</span> object */</span> Zapatec.Grid.<span class="reserved">prototype</span>.newFieldXml = <span class="reserved">function</span>(oCell) { var oUtils = Zapatec.Utils; var fFC = oUtils.getFirstChild; var fCT = oUtils.getChildText; var fFCT = Zapatec.Grid.getFirstChildText; <span class="comment">// title</span> var oEl = fFC(oCell, <span class="literal">'title'</span>); <span class="comment">// Create field object</span> var oFld = { i: <span class="reserved">this</span>.fields.length, title: fCT(oEl) }; <span class="comment">// dataType</span> var val = fFCT(oCell, <span class="literal">'datatype'</span>); <span class="reserved">if</span> (val) { oFld.dataType = val; } <span class="comment">// columnWidth</span> val = oCell.getAttribute(<span class="literal">'width'</span>); <span class="reserved">if</span> (val) { <span class="comment">// Convert to string</span> val += <span class="literal">''</span>; <span class="reserved">if</span> (val.length) { oFld.columnWidth = val; } } <span class="comment">// style</span> val = oCell.getAttribute(<span class="literal">'style'</span>); <span class="reserved">if</span> (val) { oFld.style = val; } <span class="comment">// span</span> val = oCell.getAttribute(<span class="literal">'span'</span>); <span class="reserved">if</span> (val) { oFld.span = val * 1; } <span class="comment">// spanTitle</span> val = oCell.getAttribute(<span class="literal">'spantitle'</span>); <span class="reserved">if</span> (!val) { <span class="comment">// For backward compatibility</span> val = oCell.getAttribute(<span class="literal">'spanTitle'</span>); } <span class="reserved">if</span> (val) { oFld.spanTitle = val; } <span class="comment">// spanStyle</span> val = oCell.getAttribute(<span class="literal">'spanstyle'</span>); <span class="reserved">if</span> (!val) { <span class="comment">// For backward compatibility</span> val = oCell.getAttribute(<span class="literal">'spanStyle'</span>); } <span class="reserved">if</span> (val) { oFld.spanStyle = val; } <span class="comment">// hidden</span> val = (oCell.getAttribute(<span class="literal">'hidden'</span>) == <span class="literal">'true'</span>); <span class="reserved">if</span> (val) { oFld.hidden = val; } <span class="comment">// nosort</span> val = (oCell.getAttribute(<span class="literal">'nosort'</span>) == <span class="literal">'true'</span>); <span class="reserved">if</span> (val) { oFld.nosort = val; } <span class="comment">// sortByColumn</span> val = oCell.getAttribute(<span class="literal">'sortbycolumn'</span>) + <span class="literal">''</span>; <span class="reserved">if</span> (val.length && val != <span class="literal">'null'</span> && val != <span class="literal">'undefined'</span>) { oFld.sortByColumn = val * 1; } <span class="comment">// hiddenValues</span> oEl = fFC(oCell, <span class="literal">'hiddenvalues'</span>); <span class="reserved">if</span> (oEl) { oFld.hiddenValues = []; var aVals = oEl.getElementsByTagName(<span class="literal">'hiddenval'</span>); var iVals = aVals.length; <span class="reserved">for</span> (var iVal = 0; iVals--; iVal++) { oFld.hiddenValues.push(fCT(aVals[iVal])); } } <span class="comment">// minValue</span> val = fFCT(oCell, <span class="literal">'minlimit'</span>); <span class="reserved">if</span> (val) { oFld.minValue = val; } <span class="comment">// maxValue</span> val = fFCT(oCell, <span class="literal">'maxlimit'</span>); <span class="reserved">if</span> (val) { oFld.maxValue = val; } <span class="comment">// regexpFilter</span> val = fFCT(oCell, <span class="literal">'regexpfilter'</span>); <span class="reserved">if</span> (val) { oFld.regexpFilter = val; } <span class="comment">// textFilter</span> val = fFCT(oCell, <span class="literal">'textfilter'</span>); <span class="reserved">if</span> (val) { oFld.textFilter = val; } <span class="comment">// columnRange</span> oEl = fFC(oCell, <span class="literal">'columnrange'</span>); <span class="reserved">if</span> (oEl) { var oCR = oFld.columnRange = {}; var oVal = <span class="reserved">this</span>.convertCellByField(oFld, { v: fFCT(oEl, <span class="literal">'minvalue'</span>) }); oCR.min = <span class="reserved">this</span>.getCellValueCompare(oVal); oCR.minValue = <span class="reserved">this</span>.getCellValue(oVal); oCR.minOrig = <span class="reserved">this</span>.getCellValueOriginal(oVal); oVal = <span class="reserved">this</span>.convertCellByField(oFld, { v: fFCT(oEl, <span class="literal">'maxvalue'</span>) }); oCR.max = <span class="reserved">this</span>.getCellValueCompare(oVal); oCR.maxValue = <span class="reserved">this</span>.getCellValue(oVal); oCR.maxOrig = <span class="reserved">this</span>.getCellValueOriginal(oVal); oCR.values = []; var aVals = oEl.getElementsByTagName(<span class="literal">'uniqueval'</span>); var iVals = aVals.length; var aCRVals = oCR.values; <span class="reserved">for</span> (var iVal = 0; iVals--; iVal++) { aCRVals.push(<span class="reserved">this</span>.convertCellByField(oFld, { v: fCT(aVals[iVal]) })); } } <span class="reserved">return</span> oFld; }; <span class="comment">/** * Changes content of the grid, replacing, adding or removing rows. * * <pre> * Input XML format: * * <xmp> * <?xml version="1.0"?> * <grid norefresh="true"> * <table> * <atkey>Primary key value</atkey> * <atid>0</atid> * <atrow>0</atrow> * <afterkey>Primary key value</afterkey> * <afterid>0</afterid> * <afterrow>0</atrow> * <howmany>0</howmany> * <rows> * <row style="background: #eee"> * <cell style="color: #f00">Value</cell> * ... * </row> * ... * </rows> * </table> * ... * </grid> * </xmp> * * Where: * * "norefresh" attribute [string, optional] indicates that grid should not be * refreshed after changing (useful when several changes go one by one). * * "atkey" tag [string, optional] defines primary key value at which to start * changing the grid. * * "atid" tag [number, optional] defines id of row at which to start changing * the grid. * * "atrow" tag [number, optional, private] defines index of row in rows array at * which to start changing the grid. * * "afterkey" tag [string, optional] defines primary key value after which to * start changing the grid. * * "afterid" tag [number, optional] defines id of row after which to start * changing the grid. * * "afterrow" tag [number, optional, private] defines index of row in rows array * after which to start changing the grid. * * "howmany" tag [number, optional] defines number of rows to replace or remove * (default is 0). * * Only one of "atkey", "atid", "atrow", "afterkey", "afterid" and "afterrow" * tags should be defined. If none of them is defined, new rows will be added to * the end of grid. * * There can be several table tags in the input XML. This is useful when several * changes must be done simultaneously. * * XMLDocument object can be obtained from XML fragment using * Zapatec.Transport.parseXml function. * * Old input format (deprecated): * * <xmp> * <?xml version="1.0"?> * <grid> * <table> * <rows atRow="0" afterRow="0" howMany="0" noRefresh="noRefresh"> * <row style="background: #eee"> * <cell style="color: #f00">Value</cell> * ... * </row> * ... * </rows> * </table> * </grid> * </xmp> * </pre> * * <span class="attrib">@param</span> {object} oDoc XMLDocument object that describes one or several rows to * add. * <span class="attrib">@return</span> Array with replaced or removed row objects. Number of replaced or * removed rows can be accessed through the length property of this array. If * error occured, returns undefined. * <span class="attrib">@type</span> object */</span> Zapatec.Grid.<span class="reserved">prototype</span>.spliceXml = <span class="reserved">function</span>(oDoc) { <span class="comment">// Check arguments</span> <span class="reserved">if</span> (!oDoc) { <span class="reserved">return</span>; } var oDocEl = oDoc.documentElement; <span class="reserved">if</span> (!oDocEl) { <span class="reserved">return</span>; } <span class="comment">// Get table elements</span> var aTables = oDocEl.getElementsByTagName(<span class="literal">'table'</span>); <span class="reserved">if</span> (!aTables.length) { <span class="reserved">return</span>; } <span class="comment">// Fire event</span> <span class="reserved">this</span>.fireEvent(<span class="literal">'gridPrepareModify'</span>); <span class="comment">// Rowspan flags</span> var aRF = []; <span class="comment">// Will hold removed rows</span> var aRemoved = []; <span class="comment">// Process tables</span> var oUtils = Zapatec.Utils; var fFC = oUtils.getFirstChild; var fFCT = Zapatec.Grid.getFirstChildText; var fClone = oUtils.clone; var fNext = oUtils.getNextSibling; var iTables = aTables.length; <span class="reserved">for</span> (var iTable = 0; iTables--; iTable++) { <span class="comment">// Get table</span> var oTable = aTables[iTable]; <span class="comment">// Get rows</span> var oRows = fFC(oTable, <span class="literal">'rows'</span>); <span class="comment">// Get insert position</span> var iInsertPos = null; <span class="comment">// Try atkey tag</span> var sAtKey = fFCT(oTable, <span class="literal">'atkey'</span>); <span class="reserved">if</span> (typeof sAtKey != <span class="literal">'undefined'</span>) { var iRowId = <span class="reserved">this</span>.getRowIdByPrimaryKey(sAtKey); <span class="reserved">if</span> (typeof iRowId != <span class="literal">'undefined'</span>) { iInsertPos = <span class="reserved">this</span>.getRowIndexById(iRowId); } } <span class="comment">// Try atid tag</span> <span class="reserved">if</span> (typeof iInsertPos != <span class="literal">'number'</span>) { var sAtId = fFCT(oTable, <span class="literal">'atid'</span>); <span class="reserved">if</span> (typeof sAtId != <span class="literal">'undefined'</span>) { iInsertPos = <span class="reserved">this</span>.getRowIndexById(sAtId); } } <span class="comment">// Try atrow tag</span> <span class="reserved">if</span> (typeof iInsertPos != <span class="literal">'number'</span>) { var sAtRow = fFCT(oTable, <span class="literal">'atrow'</span>); <span class="reserved">if</span> (typeof sAtRow != <span class="literal">'undefined'</span>) { var iRowNum = sAtRow * 1; <span class="reserved">if</span> (typeof <span class="reserved">this</span>.rows[iRowNum] != <span class="literal">'undefined'</span>) { iInsertPos = iRowNum; } } } <span class="comment">// Try afterkey tag</span> <span class="reserved">if</span> (typeof iInsertPos != <span class="literal">'number'</span>) { var sAfterKey = fFCT(oTable, <span class="literal">'afterkey'</span>); <span class="reserved">if</span> (typeof sAfterKey != <span class="literal">'undefined'</span>) { var iRowId = <span class="reserved">this</span>.getRowIdByPrimaryKey(sAfterKey); <span class="reserved">if</span> (typeof iRowId != <span class="literal">'undefined'</span>) { iInsertPos = <span class="reserved">this</span>.getRowIndexById(iRowId); <span class="reserved">if</span> (typeof iInsertPos == <span class="literal">'number'</span>) { iInsertPos++; } } } } <span class="comment">// Try afterid tag</span> <span class="reserved">if</span> (typeof iInsertPos != <span class="literal">'number'</span>) { var sAfterId = fFCT(oTable, <span class="literal">'afterid'</span>); <span class="reserved">if</span> (typeof sAfterId != <span class="literal">'undefined'</span>) { iInsertPos = <span class="reserved">this</span>.getRowIndexById(sAfterId); <span class="reserved">if</span> (typeof iInsertPos == <span class="literal">'number'</span>) { iInsertPos++; } } } <span class="comment">// Try afterrow tag</span> <span class="reserved">if</span> (typeof iInsertPos != <span class="literal">'number'</span>) { var sAfterRow = fFCT(oTable, <span class="literal">'afterrow'</span>); <span class="reserved">if</span> (typeof sAfterRow != <span class="literal">'undefined'</span>) { var iRowNum = sAfterRow * 1; <span class="reserved">if</span> (typeof <span class="reserved">this</span>.rows[iRowNum] != <span class="literal">'undefined'</span>) { iInsertPos = iRowNum + 1; } } } <span class="comment">// For backward compatibility</span> <span class="reserved">if</span> (typeof iInsertPos != <span class="literal">'number'</span> && oRows) { var sAtRow = oRows.getAttribute(<span class="literal">'atRow'</span>); <span class="reserved">if</span> (typeof sAtRow == <span class="literal">'string'</span> && sAtRow.length) { var iRowNum = sAtRow * 1; <span class="reserved">if</span> (typeof <span class="reserved">this</span>.rows[iRowNum] != <span class="literal">'undefined'</span>) { iInsertPos = iRowNum; } } } <span class="comment">// For backward compatibility</span> <span class="reserved">if</span> (typeof iInsertPos != <span class="literal">'number'</span> && oRows) { var sAfterRow = oRows.getAttribute(<span class="literal">'afterRow'</span>); <span class="reserved">if</span> (typeof sAfterRow == <span class="literal">'string'</span> && sAfterRow.length) { var iRowNum = sAfterRow * 1; <span class="reserved">if</span> (typeof <span class="reserved">this</span>.rows[iRowNum] != <span class="literal">'undefined'</span>) { iInsertPos = iRowNum + 1; } } } <span class="comment">// Default is end of the grid</span> <span class="reserved">if</span> (typeof iInsertPos != <span class="literal">'number'</span>) { iInsertPos = <span class="reserved">this</span>.rows.length; } <span class="comment">// Get howMany argument</span> var iHowManyToRemove = 0; var sHowMany = fFCT(oTable, <span class="literal">'howmany'</span>); <span class="reserved">if</span> (typeof sHowMany != <span class="literal">'undefined'</span>) { iHowManyToRemove = sHowMany * 1; } <span class="reserved">else</span> <span class="reserved">if</span> (oRows) { <span class="comment">// For backward compatibility</span> iHowManyToRemove = oRows.getAttribute(<span class="literal">'howMany'</span>) * 1; } <span class="comment">// Prevent rebuilding of primary key after each remove</span> var oPrimaryKey = <span class="reserved">this</span>.primaryKey; <span class="reserved">this</span>.primaryKey = null; <span class="comment">// Indicates that primay key must be rebuilt</span> var bRebuildPrimaryKey = false; <span class="comment">// Update rows</span> var oCurRow = fFC(oRows, <span class="literal">'row'</span>); var iRemoved = 0; <span class="reserved">while</span> (iRemoved < iHowManyToRemove && oCurRow) { var oGridRow = <span class="reserved">this</span>.rows[iInsertPos]; <span class="reserved">if</span> (typeof oGridRow == <span class="literal">'undefined'</span>) { <span class="comment">// Trying to remove more rows than there are in the grid</span> break; } <span class="comment">// Save old row object</span> aRemoved.push(fClone(oGridRow)); <span class="comment">// Replace row</span> var oRow = <span class="reserved">this</span>.newRowXml(oCurRow, aRF); <span class="comment">// Replace row cells</span> var iCols = oGridRow.cells.length; <span class="reserved">for</span> (var iCol = 0; iCols--; iCol++) { <span class="comment">// Get cell</span> var oCell = oRow.cells[iCol]; <span class="reserved">if</span> (!oCell) { continue; } var oGridCell = oGridRow.cells[iCol]; <span class="comment">// Check if primary key value has changed</span> <span class="reserved">if</span> (<span class="reserved">this</span>.primaryKeyColumn == iCol && oGridCell.c != oCell.c) { bRebuildPrimaryKey = true; } <span class="comment">// Replace cell values</span> oGridCell.v = oCell.v; oGridCell.c = oCell.c; oGridCell.o = oCell.o; <span class="comment">// Replace cell style</span> oGridCell.style = oCell.style; } <span class="comment">// Replace row style</span> oGridRow.style = oRow.style; <span class="comment">// Next row</span> iInsertPos++; oCurRow = fNext(oCurRow, <span class="literal">'row'</span>); iRemoved++; } <span class="comment">// Delete rows</span> <span class="reserved">for</span> (; iRemoved < iHowManyToRemove; iRemoved++) { <span class="reserved">if</span> (typeof <span class="reserved">this</span>.rows[iInsertPos] == <span class="literal">'undefined'</span>) { <span class="comment">// Trying to remove more rows than there are in the grid</span> break; } var oRow = <span class="reserved">this</span>.removeRow(iInsertPos); <span class="reserved">if</span> (oRow) { aRemoved.push(oRow); } <span class="comment">// Will need to rebuild primary key</span> bRebuildPrimaryKey = true; } <span class="comment">// Insert rows</span> <span class="reserved">while</span> (oCurRow) { <span class="comment">// Create row</span> var oRow = <span class="reserved">this</span>.newRowXml(oCurRow, aRF); <span class="comment">// Insert row</span> <span class="reserved">this</span>.rows.splice(iInsertPos++, 0, oRow); <span class="reserved">this</span>.rowsIndex.push(oRow); <span class="comment">// Will need to rebuild primary key</span> bRebuildPrimaryKey = true; <span class="comment">// Next row</span> oCurRow = fNext(oCurRow, <span class="literal">'row'</span>); } <span class="comment">// Rebuild or restore primary key</span> <span class="reserved">if</span> (bRebuildPrimaryKey) { oPrimaryKey = null; <span class="comment">// Rebuild</span> <span class="reserved">this</span>.buildPrimaryKey(); } <span class="reserved">else</span> { <span class="comment">// Restore</span> <span class="reserved">this</span>.primaryKey = oPrimaryKey; oPrimaryKey = null; } } <span class="comment">// Prepare spans</span> <span class="reserved">this</span>.prepareSpans(<span class="reserved">this</span>.rows); <span class="comment">// Show updates. oRows is checked for backward compatibility.</span> <span class="reserved">if</span> (!oDocEl.getAttribute(<span class="literal">'norefresh'</span>) && !(oRows && oRows.getAttribute(<span class="literal">'noRefresh'</span>))) { <span class="reserved">this</span>.modify(); } <span class="comment">// Return removed rows</span> <span class="reserved">return</span> aRemoved; }; <span class="comment">/** * Creates new row object from XML source. * * <span class="attrib">@private</span> * <span class="attrib">@param</span> {object} oCurRow Source object * <span class="attrib">@param</span> {object} aRF Rowspan flags * <span class="attrib">@return</span> Row object * <span class="attrib">@type</span> object */</span> Zapatec.Grid.<span class="reserved">prototype</span>.newRowXml = <span class="reserved">function</span>(oCurRow, aRF) { <span class="comment">// Create new row object</span> var oRow = { i: <span class="reserved">this</span>.rowsIndex.length, cells: [] }; <span class="comment">// Set style</span> var sStyle = oCurRow.getAttribute(<span class="literal">'style'</span>); <span class="reserved">if</span> (sStyle) { oRow.style = sStyle; } <span class="comment">// Get cells</span> var oUtils = Zapatec.Utils; var oCurCell = oUtils.getFirstChild(oCurRow, <span class="literal">'cell'</span>); <span class="comment">// Variables used inside the loop</span> var iCols = <span class="reserved">this</span>.fields.length; var fNext = oUtils.getNextSibling; var aCells = oRow.cells; var iCol, oCell, iRowspan, iColspan; <span class="reserved">for</span> (iCol = 0; iCol < iCols; iCol++) { <span class="reserved">if</span> (aRF[iCol]) { aRF[iCol]--; continue; } <span class="comment">// Add cell</span> oCell = <span class="reserved">this</span>.newCellXml(oCurCell, oRow.i, iCol); aCells[iCol] = oCell; <span class="comment">// Consider rowspan</span> iRowspan = oCell.rowspan; <span class="reserved">if</span> (iRowspan > 1) { aRF[iCol] = iRowspan - 1; } <span class="comment">// Consider colspan</span> iColspan = oCell.colspan; <span class="reserved">if</span> (iColspan > 1) { iCol += iColspan - 1; } <span class="comment">// Next cell</span> <span class="reserved">if</span> (oCurCell) { oCurCell = fNext(oCurCell, <span class="literal">'cell'</span>); } } <span class="reserved">return</span> oRow; }; <span class="comment">/** * Creates new cell object from XML source. * * <span class="attrib">@private</span> * <span class="attrib">@param</span> {object} oCurCell Source object * <span class="attrib">@param</span> {number} iRow Row id * <span class="attrib">@param</span> {number} iCol Column id * <span class="attrib">@return</span> Cell object * <span class="attrib">@type</span> object */</span> Zapatec.Grid.<span class="reserved">prototype</span>.newCellXml = <span class="reserved">function</span>(oCurCell, iRow, iCol) { <span class="comment">// Create cell object</span> var oCell = { i: iCol, r: iRow, v: <span class="literal">''</span> }; <span class="reserved">if</span> (oCurCell) { <span class="comment">// Set value</span> var aValue = []; var iCn = oCurCell.childNodes.length; var fSerialize = Zapatec.Transport.serializeXmlDoc; var oC; <span class="reserved">for</span> (var iC = 0; iCn--; iC++) { oC = oCurCell.childNodes[iC]; <span class="reserved">if</span> (oC.nodeType == 3) { <span class="comment">// Text node</span> aValue.push(oC.data); } <span class="reserved">else</span> { <span class="comment">// Element node</span> aValue.push(fSerialize(oC)); } } oCell.v = aValue.join(<span class="literal">''</span>); <span class="comment">// Set colspan</span> var iColspan = oCurCell.getAttribute(<span class="literal">'colspan'</span>) * 1; <span class="reserved">if</span> (iColspan > 1) { oCell.colspan = iColspan; } <span class="comment">// Set rowspan</span> var iRowspan = oCurCell.getAttribute(<span class="literal">'rowspan'</span>) * 1; <span class="reserved">if</span> (iRowspan > 1) { oCell.rowspan = iRowspan; } <span class="comment">// Set style</span> var sStyle = oCurCell.getAttribute(<span class="literal">'style'</span>); <span class="reserved">if</span> (sStyle) { oCell.style = sStyle; } } <span class="comment">// Convert cell value</span> oCell = <span class="reserved">this</span>.convertCell(oCell); <span class="reserved">return</span> oCell; }; </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>