@@ -12,11 +12,11 @@ var c = require('./constants');
12
12
var d3 = require ( 'd3' ) ;
13
13
var gup = require ( '../../lib/gup' ) ;
14
14
var Drawing = require ( '../../components/drawing' ) ;
15
- var extendFlat = require ( '../../lib/extend' ) . extendFlat ;
16
15
var svgUtil = require ( '../../lib/svg_text_utils' ) ;
17
16
var raiseToTop = require ( '../../lib' ) . raiseToTop ;
18
17
var cancelEeaseColumn = require ( '../../lib' ) . cancelTransition ;
19
18
var prepareData = require ( './data_preparation_helper' ) ;
19
+ var splitData = require ( './data_split_helpers' ) ;
20
20
21
21
module . exports = function plot ( gd , wrappedTraceHolders ) {
22
22
@@ -144,7 +144,7 @@ module.exports = function plot(gd, wrappedTraceHolders) {
144
144
}
145
145
146
146
var columnBlock = yColumn . selectAll ( '.columnBlock' )
147
- . data ( splitToPanels , gup . keyFun ) ;
147
+ . data ( splitData . splitToPanels , gup . keyFun ) ;
148
148
149
149
columnBlock . enter ( )
150
150
. append ( 'g' )
@@ -404,7 +404,7 @@ function renderColumnCells(columnBlock) {
404
404
function renderColumnCell ( columnCells ) {
405
405
406
406
var columnCell = columnCells . selectAll ( '.columnCell' )
407
- . data ( splitToCells , function ( d ) { return d . keyWithinBlock ; } ) ;
407
+ . data ( splitData . splitToCells , function ( d ) { return d . keyWithinBlock ; } ) ;
408
408
409
409
columnCell . enter ( )
410
410
. append ( 'g' )
@@ -601,74 +601,6 @@ function headerBlock(d) {return d.type === 'header';}
601
601
* Revolver panel and cell contents layouting
602
602
*/
603
603
604
- function splitToPanels ( d ) {
605
- var prevPages = [ 0 , 0 ] ;
606
- var headerPanel = extendFlat ( { } , d , {
607
- key : 'header' ,
608
- type : 'header' ,
609
- page : 0 ,
610
- prevPages : prevPages ,
611
- currentRepaint : [ null , null ] ,
612
- dragHandle : true ,
613
- values : d . calcdata . headerCells . values [ d . specIndex ] ,
614
- rowBlocks : d . calcdata . headerRowBlocks ,
615
- calcdata : extendFlat ( { } , d . calcdata , { cells : d . calcdata . headerCells } )
616
- } ) ;
617
- var revolverPanel1 = extendFlat ( { } , d , {
618
- key : 'cells1' ,
619
- type : 'cells' ,
620
- page : 0 ,
621
- prevPages : prevPages ,
622
- currentRepaint : [ null , null ] ,
623
- dragHandle : false ,
624
- values : d . calcdata . cells . values [ d . specIndex ] ,
625
- rowBlocks : d . calcdata . rowBlocks
626
- } ) ;
627
- var revolverPanel2 = extendFlat ( { } , d , {
628
- key : 'cells2' ,
629
- type : 'cells' ,
630
- page : 1 ,
631
- prevPages : prevPages ,
632
- currentRepaint : [ null , null ] ,
633
- dragHandle : false ,
634
- values : d . calcdata . cells . values [ d . specIndex ] ,
635
- rowBlocks : d . calcdata . rowBlocks
636
- } ) ;
637
- // order due to SVG using painter's algo:
638
- return [ revolverPanel1 , revolverPanel2 , headerPanel ] ;
639
- }
640
-
641
- function splitToCells ( d ) {
642
- var fromTo = rowFromTo ( d ) ;
643
- return d . values . slice ( fromTo [ 0 ] , fromTo [ 1 ] ) . map ( function ( v , i ) {
644
- // By keeping identical key, a DOM node removal, creation and addition is spared, important when visible
645
- // grid has a lot of elements (quadratic with xcol/ycol count).
646
- // But it has to be busted when `svgUtil.convertToTspans` is used as it reshapes cell subtrees asynchronously,
647
- // and by that time the user may have scrolled away, resulting in stale overwrites. The real solution will be
648
- // to turn `svgUtil.convertToTspans` into a cancelable request, in which case no key busting is needed.
649
- var buster = ( typeof v === 'string' ) && v . match ( / [ < $ & > ] / ) ? '_keybuster_' + Math . random ( ) : '' ;
650
- return {
651
- // keyWithinBlock: /*fromTo[0] + */i, // optimized future version - no busting
652
- // keyWithinBlock: fromTo[0] + i, // initial always-unoptimized version - janky scrolling with 5+ columns
653
- keyWithinBlock : i + buster , // current compromise: regular content is very fast; async content is possible
654
- key : fromTo [ 0 ] + i ,
655
- column : d ,
656
- calcdata : d . calcdata ,
657
- page : d . page ,
658
- rowBlocks : d . rowBlocks ,
659
- value : v
660
- } ;
661
- } ) ;
662
- }
663
-
664
- function rowFromTo ( d ) {
665
- var rowBlock = d . rowBlocks [ d . page ] ;
666
- // fixme rowBlock truthiness check is due to ugly hack of placing 2nd panel as d.page = -1
667
- var rowFrom = rowBlock ? rowBlock . rows [ 0 ] . rowIndex : 0 ;
668
- var rowTo = rowBlock ? rowFrom + rowBlock . rows . length : 0 ;
669
- return [ rowFrom , rowTo ] ;
670
- }
671
-
672
604
function headerHeight ( d ) {
673
605
var headerBlocks = d . rowBlocks [ 0 ] . auxiliaryBlocks ;
674
606
return headerBlocks . reduce ( function ( p , n ) { return p + rowsHeight ( n , Infinity ) ; } , 0 ) ;
0 commit comments