@@ -87,13 +87,50 @@ DataController.prototype.setData = function (data) {
8787
8888 this . _dataStack [ this . _dataStack . length - 1 ] . data = data ;
8989 //this.data = data;
90+ this . resetDimensionProps ( ) ;
9091 this . resetRawData ( ) ;
9192
9293 this . _trigger ( ) ;
9394 return data ;
9495
9596} ;
9697
98+ /**
99+ * Sets properties of rows/columns.
100+ *
101+ * @returns {null }
102+ */
103+ DataController . prototype . resetDimensionProps = function ( ) {
104+
105+ var data , columnProps = [ ] ;
106+
107+ if ( ! ( data = this . _dataStack [ this . _dataStack . length - 1 ] . data ) ) {
108+ console . error ( "Unable to get dimension props for given data set." ) ;
109+ return null ;
110+ }
111+
112+ var parse = function ( obj , props ) {
113+ var tObj ;
114+ if ( obj [ "children" ] && obj [ "children" ] . length > 0 ) {
115+ for ( var i in obj . children ) {
116+ tObj = obj . children [ i ] ;
117+ if ( tObj [ "format" ] ) props [ "format" ] = tObj [ "format" ] ;
118+ if ( tObj [ "style" ] ) props [ "style" ] = ( props [ "style" ] || "" ) + tObj [ "style" ] ;
119+ if ( tObj [ "total" ] ) props [ "total" ] = tObj [ "total" ] ;
120+ if ( tObj [ "type" ] ) props [ "type" ] = tObj [ "type" ] ;
121+ parse ( tObj , props ) ;
122+ }
123+ } else {
124+ columnProps . push ( props ) ;
125+ }
126+ } ;
127+
128+ parse ( { children : data . dimensions [ 0 ] } , { } ) ;
129+
130+ data . columnProps = columnProps ;
131+
132+ } ;
133+
97134/**
98135 * Renders table data (pseudo-table object) from data retrieved from MDX2JSON source.
99136 *
@@ -262,7 +299,7 @@ DataController.prototype.resetRawData = function () {
262299 this . SUMMARY_SHOWN = false ;
263300 this . _dataStack [ this . _dataStack . length - 1 ] . SUMMARY_SHOWN = false ;
264301
265- var countSummaryByColumn = function ( array , iStart , iEnd , column ) {
302+ var totalSUM = function ( array , iStart , iEnd , column ) {
266303 var sum = 0 ;
267304 for ( var i = iStart ; i < iEnd ; i ++ ) {
268305 if ( ! isFinite ( array [ i ] [ column ] [ "value" ] ) ) {
@@ -274,7 +311,7 @@ DataController.prototype.resetRawData = function () {
274311 return sum || "" ;
275312 } ;
276313
277- var countAverageByColumn = function ( array , iStart , iEnd , column ) {
314+ var totalAVG = function ( array , iStart , iEnd , column ) {
278315 var sum = 0 ;
279316 for ( var i = iStart ; i < iEnd ; i ++ ) {
280317 if ( ! isFinite ( array [ i ] [ column ] [ "value" ] ) ) {
@@ -286,6 +323,18 @@ DataController.prototype.resetRawData = function () {
286323 return sum / ( iEnd - iStart ) || "" ;
287324 } ;
288325
326+ /**
327+ * @param {number } columnIndex
328+ * @returns {Function }
329+ */
330+ var getTotalFunction = function ( columnIndex ) {
331+ if ( ! data [ "columnProps" ] [ columnIndex ] ) return totalSUM ;
332+ switch ( data [ "columnProps" ] [ columnIndex ] . total ) {
333+ case "AVG" : return totalAVG ;
334+ default : return totalSUM ;
335+ }
336+ } ;
337+
289338 if ( this . controller . CONFIG [ "showSummary" ] && rawData . length - xh > 1 // xh - see above
290339 && ( rawData [ rawData . length - 1 ] [ 0 ] || { } ) [ "isCaption" ] ) {
291340 this . SUMMARY_SHOWN = true ;
@@ -303,11 +352,9 @@ DataController.prototype.resetRawData = function () {
303352 } else {
304353 summary [ i ] = {
305354 // very hard workaround (applying "avg" last column spec)
306- value : ( ( rawData [ x ] . length - 1 === parseInt ( i )
307- && _ . controller . CONFIG [ "_temp_lastColSpec" ]
308- && _ . controller . CONFIG [ "_temp_lastColSpec" ] [ "levelSummary" ] === "avg" )
309- ? countAverageByColumn
310- : countSummaryByColumn ) ( rawData , xh , rawData . length - 1 , i ) ,
355+ value :
356+ getTotalFunction ( parseInt ( i ) - data . info . leftHeaderColumnsNumber )
357+ ( rawData , xh , rawData . length - 1 , i ) ,
311358 // end
312359 //value: (countSummaryByColumn)(rawData, xh, rawData.length - 1, i),
313360 style : "font-weight: bold;"
0 commit comments