📄 zpgrid.js
字号:
/* * * Copyright (c) 2004-2005 by Zapatec, Inc. * http://www.zapatec.com * 1700 MLK Way, Berkeley, California, * 94709, U.S.A. * All rights reserved. * * */Zapatec.Utils.createNestedHash(Zapatec,['Langs','Zapatec.Grid','eng'],{'errorSource':"The grid's data source, %1, does not contain valid data.\n%2",'errorSelectRow':'Please select at least one row.','errorSelectCell':'Please select at least one cell.','errorHtmlTable':"Zapatec.Grid invalid configuration: Can't find source table",'errorHtmlHeader':"Zapatec.Grid invalid configuration: Can't find header for table",'errorContainer':'Cannot find container for grid','errorInvalidInput':'Invalid input!','labelPage':'Page','labelOf':'of','labelRows':'rows','labelSelectAll':'Select All','labelClear':'Clear'});Zapatec.Utils.emulateWindowEvent(['mousedown','mouseup','click','dblclick']);Zapatec.Grid=function(oArg){Zapatec.Grid.SUPERconstructor.call(this,oArg);};Zapatec.Grid.id='Zapatec.Grid';Zapatec.inherit(Zapatec.Grid,Zapatec.Widget);Zapatec.Grid.prototype.init=function(oArg){this.initialized=false;Zapatec.Grid.SUPERclass.init.call(this,oArg);var oConfig=this.config;this.data={};this.fields=[];this.rows=[];this.rowsIndex=[];this.filteredRows=[];this.currentPage=0;this.autoresizeFrame={direction:0,currentRow:0,visibleRows:oConfig.rowsPerPage};this.currentVerticalOffset=0;this.currentHorizontalOffset=0;this.order=[];if(typeof oConfig.sortColumn!='object'){this.order.push({col:oConfig.sortColumn*1,desc:oConfig.sortDesc,lt:oConfig.sortDesc?1:-1,gt:oConfig.sortDesc?-1:1});}this.lastSelection=null;this.loadData();};Zapatec.Grid.prototype.reconfigure=function(oArg){Zapatec.Grid.SUPERclass.reconfigure.call(this,oArg);this.refresh();};Zapatec.Grid.prototype.configure=function(oArg){this.defineConfigOption('show_asis',false);this.defineConfigOption('funcStyle');this.defineConfigOption('convert');this.defineConfigOption('container');this.defineConfigOption('headerContainer');this.defineConfigOption('totalsContainer');this.defineConfigOption('visibleRows',0);this.defineConfigOption('visibleColumns',0);this.defineConfigOption('rowsPerPage',0);this.defineConfigOption('paginationContainer');this.defineConfigOption('border');this.defineConfigOption('fitIntoParent');this.defineConfigOption('horizontal',false);this.defineConfigOption('selectRows',true);this.defineConfigOption('selectCells',true);this.defineConfigOption('activeRows',true);this.defineConfigOption('activeCells',true);this.defineConfigOption('multipleSelect',true);this.defineConfigOption('callbackHeaderDisplay');this.defineConfigOption('callbackDataDisplay');this.defineConfigOption('callbackRowDisplay');this.defineConfigOption('callbackTotalsDisplay');this.defineConfigOption('callbackTotalDisplay');this.defineConfigOption('callbackPaginationDisplay');this.defineConfigOption('callbackRowOnClick');this.defineConfigOption('callbackRowOnRightClick');this.defineConfigOption('callbackCellOnClick');this.defineConfigOption('callbackCellOnRightClick');this.defineConfigOption('callbackRowOnDblClick');this.defineConfigOption('callbackCellOnDblClick');this.defineConfigOption('callbackRowSelect');this.defineConfigOption('callbackCellSelect');this.defineConfigOption('callbackRowUnselect');this.defineConfigOption('callbackCellUnselect');this.defineConfigOption('callbackOnRefresh');this.defineConfigOption('sortColumn');this.defineConfigOption('sortDesc');this.defineConfigOption('filterOut',[]);this.defineConfigOption('totals',[]);this.defineConfigOption('dataPrepared',false);this.defineConfigOption('dataOnDemand',false);this.defineConfigOption('fixedLeft',0);this.defineConfigOption('columnWidth','auto');this.defineConfigOption('rowHeight','auto');this.defineConfigOption('mouseSelect',true);this.defineConfigOption('dragAndDropCells',false);this.defineConfigOption('dragAndDropColumns',false);this.defineConfigOption('langId','Zapatec.Grid');this.defineConfigOption('lang','eng');Zapatec.Grid.SUPERclass.configure.call(this,oArg);var fGetElById=Zapatec.Widget.getElementById;var fCorrectCssLength=Zapatec.Utils.correctCssLength;var oConfig=this.config;oConfig.rowsPerPage=parseInt(oConfig.rowsPerPage);if(isNaN(oConfig.rowsPerPage)){oConfig.rowsPerPage=0;}oConfig.visibleRows=parseInt(oConfig.visibleRows);if(isNaN(oConfig.visibleRows)){oConfig.visibleRows=0;}oConfig.visibleColumns=parseInt(oConfig.visibleColumns);if(isNaN(oConfig.visibleColumns)){oConfig.visibleColumns=0;}if(!oConfig.rowsPerPage){oConfig.dataOnDemand=false;}this.visualize=true;if(typeof oConfig.callbackHeaderDisplay=='function'&&(typeof oConfig.callbackRowDisplay=='function'||typeof oConfig.callbackDataDisplay=='function')){this.visualize=false;oConfig.theme='';}this.container=fGetElById(oConfig.container);this.headerContainer=fGetElById(oConfig.headerContainer);this.totalsContainer=fGetElById(oConfig.totalsContainer);this.paginationContainers=[];var vPagCont=oConfig.paginationContainer;if(typeof vPagCont!='undefined'){if(vPagCont instanceof Array){var aPagCont=this.paginationContainers;var iEls=vPagCont.length;var iEl,oEl;for(iEl=0;iEls--;iEl++){oEl=fGetElById(vPagCont[iEl]);if(oEl){aPagCont.push(oEl);}}}else{var oEl=fGetElById(vPagCont);if(oEl){this.paginationContainers.push(oEl);}}}this.border=fGetElById(oConfig.border);if(!this.border&&this.container){this.border=this.container.parentNode;}this.fitInto=null;if(this.border){if(typeof oConfig.fitIntoParent=='boolean'){if(oConfig.fitIntoParent){this.fitInto=this.border.parentNode;}}else{this.fitInto=fGetElById(oConfig.fitIntoParent);}}if(this.fitInto&&typeof this.autoresize=='function'){this.addEventListener('gridRefreshed',this.autoresize);this.addEventListener('gridResizedColumn',this.autoresize);}oConfig.columnWidth=fCorrectCssLength(oConfig.columnWidth);if(oConfig.columnWidth=='auto'&&(this.headerContainer||this.totalsContainer)){oConfig.columnWidth='100px';}oConfig.rowHeight=fCorrectCssLength(oConfig.rowHeight);if(oConfig.mouseSelect&&this.mouseSelect){this.addEventListener('gridCellMousedown',this.mouseSelect);}if(oConfig.dragAndDropCells&&this.dragCell){this.addEventListener('gridCellMousedown',this.dragCell);}if(oConfig.dragAndDropColumns&&this.dragColumn){this.addEventListener('gridFieldMousedown',this.dragColumn);}if(typeof oConfig.callbackCellOnRightClick=='function'||typeof oConfig.callbackRowOnRightClick=='function'){window.document.oncontextmenu=function(){return false};this.addEventListener('gridCellMouseup',Zapatec.Grid.onCellMouseup);}this.filterOutRules=oConfig.filterOut;if(!(this.filterOutRules instanceof Array)){this.filterOutRules=[];}this.totalsRules=oConfig.totals;if(!(this.totalsRules instanceof Array)){this.totalsRules=[];}};Zapatec.Grid.prototype.addStandardEventListeners=function(){Zapatec.Grid.SUPERclass.addStandardEventListeners.call(this);this.addEventListener('fetchSourceError',this.displayErrorSource);if(this.displayLoading){this.addEventListener('fetchSourceStart',this.displayLoading);this.addEventListener('fetchSourceEnd',this.removeLoading);this.addEventListener('loadThemeEnd',this.visualizeThemeLoad);this.addEventListener('loadDataEnd',this.visualizeDataLoad);}};Zapatec.Grid.prototype.displayErrorSource=function(oError){alert(this.getMessage('errorSource',this.config.source,oError.errorDescription));};Zapatec.Grid.prototype.loadData=function(oArg){if(this.config.dataOnDemand){if(typeof oArg!='object'){oArg={};}oArg.currentPage=this.currentPage;if(this.order.length){oArg.sortColumn=this.order[0].col;oArg.sortDesc=this.order[0].desc;oArg.order=this.order;}oArg.filters=[];for(var iCol=0;iCol<this.fields.length;iCol++){var oField=this.fields[iCol];if(oField){oArg.filters[iCol]={hiddenValues:oField.hiddenValues,minValue:oField.minValue,maxValue:oField.maxValue,regexpFilter:oField.regexpFilter,textFilter:oField.textFilter};}else{oArg.filters[iCol]={};}}}Zapatec.Grid.SUPERclass.loadData.call(this,oArg);};Zapatec.Grid.prototype.onRefresh=function(){if(this.refreshState>1){this.refreshState--;return;}if(this.visualizeRefresh&&this.visualize){this.visualizeRefresh();}this.refreshState--;if(typeof this.config.callbackOnRefresh=='function'){this.config.callbackOnRefresh(this);}this.fireEvent('gridRefreshed');};Zapatec.Grid.prototype.loadDataJson=function(oData){this.rowsIndex=null;if(!(oData instanceof Object)){oData={};}if(!(oData.fields instanceof Array)){oData.fields=[];}if(!(oData.rows instanceof Array)){oData.rows=[];}this.data=oData;this.fields=oData.fields;this.rows=oData.rows;if(!this.config.dataPrepared){this.prepareData();}this.rowsIndex=this.rows.slice();this.primaryKeyColumn=oData.primaryKey;this.buildPrimaryKey();if(typeof oData.currentPage!='undefined'){this.setCurrentPage(oData.currentPage);}else{this.setCurrentPage(0);}this.show();};Zapatec.Grid.prototype.buildPrimaryKey=function(){var iKey=this.primaryKeyColumn;if(!this.fields[iKey]){this.primaryKey=null;return;}this.primaryKey={};var oKey=this.primaryKey;var aRows=this.rows;var iRows=aRows.length;var iRow,sKey;for(iRow=0;iRow<iRows;iRow++){sKey=this.getCellValueCompare(this.getCellByRow(aRows[iRow],iKey));if((typeof sKey=='string'&&sKey.length)||typeof sKey=='number'){oKey[sKey]=aRows[iRow];}}};Zapatec.Grid.prototype.rebuildPrimaryKey=function(){if(this.primaryKey){this.buildPrimaryKey();}};Zapatec.Grid.prototype.show=function(){this.filteredRows=this.rows.slice();this.sort();this.refresh();this.displayFilterOut();if(!this.initialized){this.initialized=true;this.fireEvent('gridInitialized');}};Zapatec.Grid.prototype.prepareData=function(){var aItems=this.fields;var iItems=aItems.length;var iItem,oItem;for(iItem=0;iItem<iItems;iItem++){oItem=aItems[iItem];if(!(oItem instanceof Object)){oItem={};}oItem.i=iItem;aItems[iItem]=this.prepareField(oItem);}aItems=this.rows;this.prepareSpans(aItems);iItems=aItems.length;for(iItem=0;iItem<iItems;iItem++){oItem=aItems[iItem];if(!(oItem instanceof Object)){oItem={};}oItem.i=iItem;aItems[iItem]=this.prepareRow(oItem);}};Zapatec.Grid.prototype.prepareField=function(oField){return oField;};Zapatec.Grid.prototype.prepareRow=function(oRow){if(!oRow.cells||!(oRow.cells instanceof Array)){oRow.cells=[];}var aCells=oRow.cells;var iColumns=this.fields.length;var iCol,oCell;for(iCol=0;iCol<iColumns;iCol++){oCell=aCells[iCol];if(!(oCell instanceof Object)){oCell={};}oCell.i=iCol;if(!(oCell.rowspan>0&&typeof oCell.r!='undefined')){oCell.r=oRow.i;}aCells[iCol]=this.convertCell(oCell);if(oCell.colspan>1){iCol+=oCell.colspan-1;}}return oRow;};Zapatec.Grid.prototype.convertCell=function(oCell){return this.convertCellByField(this.getFieldByCell(oCell),oCell);};Zapatec.Grid.prototype.convertCellByField=function(oField,oCell){if(!(oCell instanceof Object)){oCell={};}if(oField&&this.getConvertByType){var sMethod=this.getConvertByType(oField.dataType);if(sMethod){oCell=this[sMethod](oCell);}}oCell=this.convertCellCallback(oCell);return oCell;};Zapatec.Grid.prototype.convertCellCallback=function(oCell){if(!(oCell instanceof Object)){oCell={};}if(typeof this.config.convert=='function'){var convertedValue=this.config.convert(this,oCell);if(typeof convertedValue!='undefined'){if(typeof oCell.o=='undefined'){oCell.o=oCell.v;}oCell.v=oCell.c=convertedValue;}}return oCell;};Zapatec.Grid.prototype.validateCell=function(oCell){if(!(oCell instanceof Object)){oCell={};}if(this.getValidateByType){var oField=this.getFieldByCell(oCell);if(oField){var sMethod=this.getValidateByType(oField.dataType);if(sMethod){var undef;if(oCell.invalid){oCell.invalid=undef;}var bValid=this[sMethod](oCell);if(!bValid){oCell.invalid=true;}var oRow=this.getRowByCell(oCell);if(oRow){if(!bValid){oRow.invalid=true;}else{if(oRow.invalid){oRow.invalid=undef;}var aCells=this.getRowCells(oRow);for(var iCell=0;iCell<aCells.length;iCell++){if(aCells[iCell]&&aCells[iCell].invalid){oRow.invalid=true;break;}}}}return bValid;}}}return true;};Zapatec.Grid.prototype.splice=function(aData){if(!aData){return;}if(!(aData instanceof Array)){aData=[aData];}this.fireEvent('gridPrepareModify');var aRemoved=[];var iDataLen=aData.length;var oData;for(var iData=0;iData<iDataLen;iData++){oData=aData[iData];var iInsertPos=null;if(typeof oData.atKey!='undefined'){var iRowId=this.getRowIdByPrimaryKey(oData.atKey);if(typeof iRowId!='undefined'){oData.atRowId=iRowId;}}if((typeof oData.atRowId=='string'&&oData.atRowId.length)||typeof oData.atRowId=='number'){iInsertPos=this.getRowIndexById(oData.atRowId);}if(typeof iInsertPos!='number'){if((typeof oData.atRow=='string'&&oData.atRow.length)||typeof oData.atRow=='number'){var iRowNum=oData.atRow*1;if(typeof this.rows[iRowNum]!='undefined'){iInsertPos=iRowNum;}}}if(typeof iInsertPos!='number'){if(typeof oData.afterKey!='undefined'){var iRowId=this.getRowIdByPrimaryKey(oData.afterKey);if(typeof iRowId!='undefined'){oData.afterRowId=iRowId;}}if((typeof oData.afterRowId=='string'&&oData.afterRowId.length)||typeof oData.afterRowId=='number'){iInsertPos=this.getRowIndexById(oData.afterRowId);if(typeof iInsertPos=='number'){iInsertPos++;}}}if(typeof iInsertPos!='number'){if((typeof oData.afterRow=='string'&&oData.afterRow.length)||typeof oData.afterRow=='number'){var iRowNum=oData.afterRow*1;if(typeof this.rows[iRowNum]!='undefined'){iInsertPos=iRowNum+1;}}}if(typeof iInsertPos!='number'){iInsertPos=this.rows.length;}if(!(oData.rows instanceof Array)){oData.rows=[];}var iHowManyToRemove=parseInt(oData.howMany);if(isNaN(iHowManyToRemove)){iHowManyToRemove=0;}var oPrimaryKey=this.primaryKey;this.primaryKey=null;var bRebuildPrimaryKey=false;var iRow=0;var iRemoved=0;while(iRemoved<iHowManyToRemove&&iRow<oData.rows.length){var oGridRow=this.rows[iInsertPos];if(typeof oGridRow=='undefined'){break;}aRemoved.push(Zapatec.Utils.clone(oGridRow));var oRow=this.prepareRow(oData.rows[iRow]);for(var iCol=0;iCol<oGridRow.cells.length;iCol++){var oCell=oRow.cells[iCol];if(!oCell){continue;}var oGridCell=oGridRow.cells[iCol];if(this.primaryKeyColumn==iCol&&oGridCell.c!=oCell.c){bRebuildPrimaryKey=true;}oGridCell.v=oCell.v;oGridCell.c=oCell.c;oGridCell.o=oCell.o;oGridCell.style=oCell.style;}oGridRow.style=oRow.style;iInsertPos++;iRow++;iRemoved++;}for(;iRemoved<iHowManyToRemove;iRemoved++){if(typeof this.rows[iInsertPos]=='undefined'){break;}var oRow=this.removeRow(iInsertPos);if(oRow){aRemoved.push(oRow);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -