1
0
Fork 0
mirror of https://github.com/koalyptus/TableFilter.git synced 2024-05-23 16:52:26 +02:00
TableFilter/dist/TF_Modules/tf_colOps.js
2015-03-06 19:49:30 +11:00

1 line
3.9 KiB
JavaScript

TF.prototype.SetColOperation=function(){if(!this.isFirstLoad&&!this.hasGrid)return;this.onBeforeOperation&&this.onBeforeOperation.call(null,this);var labelId=this.colOperation.id,colIndex=this.colOperation.col,operation=this.colOperation.operation,outputType=this.colOperation.write_method,totRowIndex=this.colOperation.tot_row_index,excludeRow=this.colOperation.exclude_row,decimalPrecision=this.colOperation["decimal_precision"]!=undefined?this.colOperation.decimal_precision:2,ucolIndex=[],ucolMax=0;ucolIndex[ucolMax]=colIndex[0];for(var i=1;i<colIndex.length;i++){saved=0;for(var j=0;j<=ucolMax;j++)ucolIndex[j]==colIndex[i]&&(saved=1);saved==0&&(ucolMax++,ucolIndex[ucolMax]=colIndex[i])}if((typeof labelId).tf_LCase()=="object"&&(typeof colIndex).tf_LCase()=="object"&&(typeof operation).tf_LCase()=="object"){var row=this.tbl.rows,colvalues=[];for(var ucol=0;ucol<=ucolMax;ucol++){colvalues.push(this.GetColValues(ucolIndex[ucol],!0,excludeRow));var result,nbvalues=0,temp,meanValue=0,sumValue=0,minValue=null,maxValue=null,q1Value=null,medValue=null,q3Value=null,meanFlag=0,sumFlag=0,minFlag=0,maxFlag=0,q1Flag=0,medFlag=0,q3Flag=0,theList=[],opsThisCol=[],decThisCol=[],labThisCol=[],oTypeThisCol=[],mThisCol=-1;for(var i=0;i<colIndex.length;i++)if(colIndex[i]==ucolIndex[ucol]){mThisCol++,opsThisCol[mThisCol]=operation[i].tf_LCase(),decThisCol[mThisCol]=decimalPrecision[i],labThisCol[mThisCol]=labelId[i],oTypeThisCol=outputType!=undefined&&(typeof outputType).tf_LCase()=="object"?outputType[i]:null;switch(opsThisCol[mThisCol]){case"mean":meanFlag=1;break;case"sum":sumFlag=1;break;case"min":minFlag=1;break;case"max":maxFlag=1;break;case"median":medFlag=1;break;case"q1":q1Flag=1;break;case"q3":q3Flag=1}}for(var j=0;j<colvalues[ucol].length;j++){if(q1Flag==1||q3Flag==1||medFlag==1)if(j<colvalues[ucol].length-1)for(k=j+1;k<colvalues[ucol].length;k++)eval(colvalues[ucol][k])<eval(colvalues[ucol][j])&&(temp=colvalues[ucol][j],colvalues[ucol][j]=colvalues[ucol][k],colvalues[ucol][k]=temp);var cvalue=parseFloat(colvalues[ucol][j]);theList[j]=parseFloat(cvalue);if(!isNaN(cvalue)){nbvalues++;if(sumFlag==1||meanFlag==1)sumValue+=parseFloat(cvalue);minFlag==1&&(minValue==null?minValue=parseFloat(cvalue):minValue=parseFloat(cvalue)<minValue?parseFloat(cvalue):minValue),maxFlag==1&&(maxValue==null?maxValue=parseFloat(cvalue):maxValue=parseFloat(cvalue)>maxValue?parseFloat(cvalue):maxValue)}}meanFlag==1&&(meanValue=sumValue/nbvalues);if(medFlag==1){var aux=0;nbvalues%2==1?(aux=Math.floor(nbvalues/2),medValue=theList[aux]):medValue=(theList[nbvalues/2]+theList[nbvalues/2-1])/2}if(q1Flag==1){var posa=0;posa=Math.floor(nbvalues/4),4*posa==nbvalues?q1Value=(theList[posa-1]+theList[posa])/2:q1Value=theList[posa]}if(q3Flag==1){var posa=0,posb=0;posa=Math.floor(nbvalues/4),4*posa==nbvalues?(posb=3*posa,q3Value=(theList[posb]+theList[posb-1])/2):q3Value=theList[nbvalues-posa-1]}for(var i=0;i<=mThisCol;i++){switch(opsThisCol[i]){case"mean":result=meanValue;break;case"sum":result=sumValue;break;case"min":result=minValue;break;case"max":result=maxValue;break;case"median":result=medValue;break;case"q1":result=q1Value;break;case"q3":result=q3Value}var precision=decThisCol[i]!=undefined&&!isNaN(decThisCol[i])?decThisCol[i]:2;if(oTypeThisCol!=null&&result){result=result.toFixed(precision);if(tf_Id(labThisCol[i])!=undefined)switch(oTypeThisCol.tf_LCase()){case"innerhtml":isNaN(result)||!isFinite(result)||nbvalues==0?tf_Id(labThisCol[i]).innerHTML=".":tf_Id(labThisCol[i]).innerHTML=result;break;case"setvalue":tf_Id(labThisCol[i]).value=result;break;case"createtextnode":var oldnode=tf_Id(labThisCol[i]).firstChild,txtnode=tf_CreateText(result);tf_Id(labThisCol[i]).replaceChild(txtnode,oldnode)}}else try{isNaN(result)||!isFinite(result)||nbvalues==0?tf_Id(labThisCol[i]).innerHTML=".":tf_Id(labThisCol[i]).innerHTML=result.toFixed(precision)}catch(e){}}totRowIndex!=undefined&&row[totRowIndex[ucol]]&&(row[totRowIndex[ucol]].style.display="")}}this.onAfterOperation&&this.onAfterOperation.call(null,this)};