@@ -318,6 +318,52 @@ PivotView.prototype.displayMessage = function (html) {
318
318
319
319
} ;
320
320
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
+
321
367
/**
322
368
* Raw data - plain 2-dimensional array of data to render.
323
369
*
@@ -346,7 +392,6 @@ PivotView.prototype.renderRawData = function (data) {
346
392
timeToBreak = false ,
347
393
_ = this ,
348
394
x , y , tr , td ,
349
- integerPart , fractionalPart , formatParts , fp ,
350
395
headColsNum = 0 , headLeftColsNum = 0 ,
351
396
headRowsNum = 0 , headLeftRowsNum = 0 ;
352
397
@@ -361,10 +406,6 @@ PivotView.prototype.renderRawData = function (data) {
361
406
362
407
} ;
363
408
364
- if ( this . controller . CONFIG [ "formatNumbers" ] ) {
365
- formatParts = this . controller . CONFIG [ "formatNumbers" ] . match ( / # + | [ ^ # ] + / g) ;
366
- }
367
-
368
409
// compute headColsNum & headLeftColsNum
369
410
for ( y = 0 ; y < data . length ; y ++ ) {
370
411
for ( x = 0 ; x < data [ y ] . length ; x ++ ) {
@@ -467,40 +508,12 @@ PivotView.prototype.renderRawData = function (data) {
467
508
tr . appendChild ( td ) ;
468
509
if ( x >= headLeftColsNum && y >= headRowsNum ) {
469
510
470
- // todo: reorganize
471
511
if ( this . controller . CONFIG [ "formatNumbers" ] && data [ y ] [ x ] . value
472
512
&& 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
+ ) ;
504
517
} else {
505
518
span . textContent = data [ y ] [ x ] . value ;
506
519
}
0 commit comments