@@ -318,6 +318,52 @@ PivotView.prototype.displayMessage = function (html) {
318318
319319} ;
320320
321+ /**
322+ * Poor function that provides number formatting.
323+ *
324+ * @param {string } mask - String like "#'###.##"
325+ * @param {number } value
326+ * @returns {string }
327+ */
328+ PivotView . prototype . formatNumber = function ( mask , value ) {
329+
330+ var begin = true ,
331+ fp = mask . match ( / # + | [ ^ # ] + / g) ,
332+ integerPart , fractionalPart ,
333+ last = - 1 , ip1 , fp1 ;
334+
335+ ip1 = integerPart = parseInt ( value ) . toString ( ) ;
336+ fp1 = fractionalPart = ( parseFloat ( value ) - parseInt ( integerPart ) )
337+ . toString ( )
338+ . concat ( ( new Array ( this . controller . CONFIG [ "formatNumbers" ] . length ) )
339+ . join ( "0" ) ) ;
340+ for ( var i = fp . length - 1 ; i > - 1 ; i -- ) {
341+ if ( fp [ i ] [ 0 ] !== "#" ) continue ;
342+ if ( begin ) {
343+ fp [ i ] = fractionalPart . substr ( 2 , fp [ i ] . length ) ; // flooring
344+ begin = false ;
345+ } else {
346+ fp [ i ] = integerPart
347+ . substr ( Math . max ( integerPart . length - fp [ i ] . length , 0 ) , integerPart . length ) ;
348+ integerPart = integerPart . substr ( 0 , integerPart . length - fp [ i ] . length ) ;
349+ last = i ;
350+ }
351+ if ( integerPart . length === 0 ) {
352+ fp = fp . slice ( i , fp . length ) ;
353+ break ;
354+ }
355+ }
356+ if ( fp . join ( "" ) === "4.0." ) {
357+ console . log ( ip1 , fp1 ) ;
358+ }
359+ if ( last !== - 1 && integerPart . length !== 0 ) {
360+ fp [ 0 ] = integerPart + fp [ 0 ] ;
361+ }
362+
363+ return fp . join ( "" ) ;
364+
365+ } ;
366+
321367/**
322368 * Raw data - plain 2-dimensional array of data to render.
323369 *
@@ -346,7 +392,6 @@ PivotView.prototype.renderRawData = function (data) {
346392 timeToBreak = false ,
347393 _ = this ,
348394 x , y , tr , td ,
349- integerPart , fractionalPart , formatParts , fp ,
350395 headColsNum = 0 , headLeftColsNum = 0 ,
351396 headRowsNum = 0 , headLeftRowsNum = 0 ;
352397
@@ -361,10 +406,6 @@ PivotView.prototype.renderRawData = function (data) {
361406
362407 } ;
363408
364- if ( this . controller . CONFIG [ "formatNumbers" ] ) {
365- formatParts = this . controller . CONFIG [ "formatNumbers" ] . match ( / # + | [ ^ # ] + / g) ;
366- }
367-
368409 // compute headColsNum & headLeftColsNum
369410 for ( y = 0 ; y < data . length ; y ++ ) {
370411 for ( x = 0 ; x < data [ y ] . length ; x ++ ) {
@@ -467,40 +508,12 @@ PivotView.prototype.renderRawData = function (data) {
467508 tr . appendChild ( td ) ;
468509 if ( x >= headLeftColsNum && y >= headRowsNum ) {
469510
470- // todo: reorganize
471511 if ( this . controller . CONFIG [ "formatNumbers" ] && data [ y ] [ x ] . value
472512 && isFinite ( data [ y ] [ x ] . value ) ) {
473- var begin = true ,
474- last = - 1 , ip1 , fp1 ;
475- ip1 = integerPart = parseInt ( data [ y ] [ x ] . value ) . toString ( ) ;
476- fp1 = fractionalPart = ( parseFloat ( data [ y ] [ x ] . value ) - parseInt ( integerPart ) )
477- . toString ( )
478- . concat ( ( new Array ( this . controller . CONFIG [ "formatNumbers" ] . length ) )
479- . join ( "0" ) ) ;
480- fp = formatParts . slice ( ) ;
481- for ( var i = fp . length - 1 ; i > - 1 ; i -- ) {
482- if ( fp [ i ] [ 0 ] !== "#" ) continue ;
483- if ( begin ) {
484- fp [ i ] = fractionalPart . substr ( 2 , fp [ i ] . length ) ; // flooring
485- begin = false ;
486- } else {
487- fp [ i ] = integerPart
488- . substr ( Math . max ( integerPart . length - fp [ i ] . length , 0 ) , integerPart . length ) ;
489- integerPart = integerPart . substr ( 0 , integerPart . length - fp [ i ] . length ) ;
490- last = i ;
491- }
492- if ( integerPart . length === 0 ) {
493- fp = fp . slice ( i , fp . length ) ;
494- break ;
495- }
496- }
497- if ( fp . join ( "" ) === "4.0." ) {
498- console . log ( ip1 , fp1 ) ;
499- }
500- if ( last !== - 1 && integerPart . length !== 0 ) {
501- fp [ 0 ] = integerPart + fp [ 0 ] ;
502- }
503- span . textContent = fp . join ( "" ) ;
513+ span . textContent = this . formatNumber (
514+ this . controller . CONFIG [ "formatNumbers" ] ,
515+ data [ y ] [ x ] . value
516+ ) ;
504517 } else {
505518 span . textContent = data [ y ] [ x ] . value ;
506519 }
0 commit comments