@@ -67,7 +67,12 @@ function domainToUnitScale(values) {
67
67
return d3 . scale . linear ( ) . domain ( extent ) ;
68
68
}
69
69
70
- function viewModel ( lines , width , height , canvasPixelRatio , model ) {
70
+ function viewModel ( model ) {
71
+
72
+ var lines = model . lines ;
73
+ var width = model . width ;
74
+ var height = model . height ;
75
+ var canvasPixelRatio = model . canvasPixelRatio ;
71
76
72
77
var xScale = d3 . scale . ordinal ( ) . domain ( d3 . range ( model . dimensions . filter ( visible ) . length ) ) . rangePoints ( [ 0 , width ] , 0 ) ;
73
78
@@ -130,38 +135,50 @@ module.exports = function(root, styledData, layout, callbacks) {
130
135
131
136
var data = styledData . dimensions ;
132
137
138
+ var canvasPixelRatio = styledData . lines . pixelratio ;
139
+ var lines = Lib . extendDeep ( styledData . lines , {
140
+ color : styledData . line . color . map ( domainToUnitScale ( styledData . line . color ) ) ,
141
+ canvasOverdrag : overdrag * canvasPixelRatio
142
+ } ) ;
143
+
144
+ var layoutWidth = layout . width * ( styledData . domain . x [ 1 ] - styledData . domain . x [ 0 ] ) ;
145
+ var layoutHeight = layout . height * ( styledData . domain . y [ 1 ] - styledData . domain . y [ 0 ] ) ;
146
+
147
+ var padding = styledData . padding || 80 ;
148
+ var translateX = ( styledData . domain . x [ 0 ] || 0 ) * layout . width ;
149
+ var translateY = ( styledData . domain . y [ 0 ] || 0 ) * layout . height ;
150
+ var width = layoutWidth - 2 * padding - legendWidth ; // leavig room for the colorbar
151
+ var height = layoutHeight - 2 * padding ;
152
+
153
+ var canvasWidth = width * canvasPixelRatio + 2 * lines . canvasOverdrag ;
154
+ var canvasHeight = height * canvasPixelRatio ;
155
+
156
+ var resizeHeight = styledData . filterbar . handleheight ;
157
+ var brushVisibleWidth = styledData . filterbar . width ;
158
+ var brushCaptureWidth = styledData . filterbar . capturewidth || Math . min ( 32 , brushVisibleWidth + 16 ) ;
159
+
133
160
return [
134
161
{
135
162
key : Math . random ( ) ,
136
163
dimensions : data ,
137
164
tickDistance : styledData . tickdistance ,
138
- unitToColor : styledData . unitToColor
165
+ unitToColor : styledData . unitToColor ,
166
+ lines : lines ,
167
+ translateX : translateX ,
168
+ translateY : translateY ,
169
+ padding : padding ,
170
+ canvasWidth : canvasWidth ,
171
+ canvasHeight : canvasHeight ,
172
+ width : width ,
173
+ height : height ,
174
+ brushVisibleWidth : brushVisibleWidth ,
175
+ brushCaptureWidth : brushCaptureWidth ,
176
+ resizeHeight : resizeHeight ,
177
+ canvasPixelRatio : canvasPixelRatio
139
178
}
140
179
] ;
141
180
}
142
181
143
- var canvasPixelRatio = styledData . lines . pixelratio ;
144
- var lines = Lib . extendDeep ( styledData . lines , {
145
- color : styledData . line . color . map ( domainToUnitScale ( styledData . line . color ) ) ,
146
- canvasOverdrag : overdrag * canvasPixelRatio
147
- } ) ;
148
-
149
- var layoutWidth = layout . width * ( styledData . domain . x [ 1 ] - styledData . domain . x [ 0 ] ) ;
150
- var layoutHeight = layout . height * ( styledData . domain . y [ 1 ] - styledData . domain . y [ 0 ] ) ;
151
-
152
- var padding = styledData . padding || 80 ;
153
- var translateX = ( styledData . domain . x [ 0 ] || 0 ) * layout . width ;
154
- var translateY = ( styledData . domain . y [ 0 ] || 0 ) * layout . height ;
155
- var width = layoutWidth - 2 * padding - legendWidth ; // leavig room for the colorbar
156
- var height = layoutHeight - 2 * padding ;
157
-
158
- var canvasWidth = width * canvasPixelRatio + 2 * lines . canvasOverdrag ;
159
- var canvasHeight = height * canvasPixelRatio ;
160
-
161
- var resizeHeight = styledData . filterbar . handleheight ;
162
- var brushVisibleWidth = styledData . filterbar . width ;
163
- var brushCaptureWidth = styledData . filterbar . capturewidth || Math . min ( 32 , brushVisibleWidth + 16 ) ;
164
-
165
182
function enterSvgDefs ( root ) {
166
183
var defs = root . selectAll ( 'defs' )
167
184
. data ( repeat , keyFun ) ;
@@ -175,9 +192,9 @@ module.exports = function(root, styledData, layout, callbacks) {
175
192
filterBarPattern . enter ( )
176
193
. append ( 'pattern' )
177
194
. attr ( 'id' , 'filterBarPattern' )
178
- . attr ( 'width' , brushCaptureWidth )
179
- . attr ( 'height' , height )
180
- . attr ( 'x' , - brushVisibleWidth )
195
+ . attr ( 'width' , function ( d ) { return d . model . brushCaptureWidth ; } )
196
+ . attr ( 'height' , function ( d ) { return d . model . height } )
197
+ . attr ( 'x' , function ( d ) { return - d . model . brushVisibleWidth ; } )
181
198
. attr ( 'patternUnits' , 'userSpaceOnUse' ) ;
182
199
183
200
var filterBarPatternGlyph = filterBarPattern . selectAll ( 'rect' )
@@ -186,9 +203,9 @@ module.exports = function(root, styledData, layout, callbacks) {
186
203
filterBarPatternGlyph . enter ( )
187
204
. append ( 'rect' )
188
205
. attr ( 'shape-rendering' , 'crispEdges' )
189
- . attr ( 'width' , brushVisibleWidth )
190
- . attr ( 'height' , height )
191
- . attr ( 'x' , brushVisibleWidth / 2 )
206
+ . attr ( 'width' , function ( d ) { return d . model . brushVisibleWidth } )
207
+ . attr ( 'height' , function ( d ) { return d . model . height } )
208
+ . attr ( 'x' , function ( d ) { return d . model . brushVisibleWidth / 2 ; } )
192
209
. attr ( 'fill' , styledData . filterbar . fillcolor )
193
210
. attr ( 'fill-opacity' , styledData . filterbar . fillopacity )
194
211
. attr ( 'stroke' , styledData . filterbar . strokecolor )
@@ -202,24 +219,24 @@ module.exports = function(root, styledData, layout, callbacks) {
202
219
parcoordsModel . enter ( )
203
220
. append ( 'div' )
204
221
. style ( 'position' , 'relative' )
205
- //.style('height', '500px')
206
222
. classed ( 'parcoordsModel' , true ) ;
207
223
208
224
var parcoordsViewModel = parcoordsModel . selectAll ( '.parcoordsViewModel' )
209
- . data ( viewModel . bind ( 0 , lines , width , height , canvasPixelRatio ) , keyFun ) ;
225
+ . data ( viewModel , keyFun ) ;
210
226
211
227
parcoordsViewModel . enter ( )
212
228
. append ( 'div' )
213
229
. classed ( 'parcoordsViewModel' , true )
214
- . style ( 'transform' , 'translate(' + translateX + 'px,' + translateY + 'px)' ) ;
230
+ . style ( 'transform' , function ( d ) { return 'translate(' + d . model . translateX + 'px,' + d . model . translateY + 'px)' ; } ) ;
215
231
216
232
var parcoordsLineLayer = parcoordsViewModel . selectAll ( '.parcoordsLineLayer' )
217
233
. data ( function ( vm ) {
218
234
return [ true , false ] . map ( function ( context ) {
219
235
return {
220
236
key : context ? 'contextLineLayer' : 'focusLineLayer' ,
221
237
context : context ,
222
- viewModel : vm
238
+ viewModel : vm ,
239
+ model : vm . model
223
240
} ;
224
241
} ) ;
225
242
} , keyFun ) ;
@@ -232,18 +249,18 @@ module.exports = function(root, styledData, layout, callbacks) {
232
249
. style ( 'clear' , 'both' )
233
250
. style ( 'position' , function ( d , i ) { return i > 0 ? 'absolute' : 'static' } )
234
251
. style ( 'left' , 0 )
235
- . style ( 'padding' , padding + 'px' )
252
+ . style ( 'padding' , function ( d ) { return d . viewModel . model . padding + 'px' ; } )
236
253
. style ( 'overflow' , 'visible' )
237
- . attr ( 'width' , canvasWidth )
238
- . attr ( 'height' , canvasHeight )
239
- . style ( 'width' , ( width + 2 * overdrag ) + 'px' )
240
- . style ( 'height' , height + 'px' ) ;
254
+ . attr ( 'width' , function ( d ) { return d . viewModel . model . canvasWidth ; } )
255
+ . attr ( 'height' , function ( d ) { return d . viewModel . model . canvasHeight ; } )
256
+ . style ( 'width' , function ( d ) { return ( d . viewModel . model . width + 2 * overdrag ) + 'px' ; } )
257
+ . style ( 'height' , function ( d ) { return d . viewModel . model . height + 'px' ; } ) ;
241
258
242
259
var tweakables = { renderers : [ ] , dimensions : [ ] } ;
243
260
244
261
parcoordsLineLayer
245
262
. each ( function ( d ) {
246
- var lineLayer = lineLayerMaker ( this , lines , canvasWidth , canvasHeight , d . viewModel . panels , d . viewModel . model . unitToColor , d . context ) ;
263
+ var lineLayer = lineLayerMaker ( this , d . model . lines , d . model . canvasWidth , d . model . canvasHeight , d . viewModel . panels , d . model . unitToColor , d . context ) ;
247
264
d . viewModel [ d . key ] = lineLayer ;
248
265
tweakables . renderers . push ( function ( ) { lineLayer . render ( d . viewModel . panels , true ) ; } ) ;
249
266
lineLayer . render ( d . viewModel . panels , ! d . context , d . context && ! someFiltersActive ( d . viewModel ) ) ;
@@ -256,8 +273,8 @@ module.exports = function(root, styledData, layout, callbacks) {
256
273
. append ( 'svg' )
257
274
. classed ( 'parcoordsControlOverlay' , true )
258
275
. attr ( 'overflow' , 'visible' )
259
- . attr ( 'width' , width + 2 * padding )
260
- . attr ( 'height' , height + 2 * padding )
276
+ . attr ( 'width' , function ( d ) { return d . model . width + 2 * d . model . padding ; } )
277
+ . attr ( 'height' , function ( d ) { return d . model . height + 2 * d . model . padding ; } )
261
278
. style ( 'position' , 'absolute' )
262
279
. style ( 'left' , 0 )
263
280
. style ( 'overflow' , 'visible' )
@@ -269,7 +286,7 @@ module.exports = function(root, styledData, layout, callbacks) {
269
286
270
287
parcoordsControlView . enter ( )
271
288
. append ( 'g' )
272
- . attr ( 'transform' , 'translate(' + padding + ',' + padding + ')' )
289
+ . attr ( 'transform' , function ( d ) { return 'translate(' + d . model . padding + ',' + d . model . padding + ')' ; } )
273
290
. classed ( 'parcoordsControlView' , true ) ;
274
291
275
292
var clearFix = parcoordsViewModel . selectAll ( '.clearFix' )
@@ -304,14 +321,14 @@ module.exports = function(root, styledData, layout, callbacks) {
304
321
if ( domainBrushing ) {
305
322
return ;
306
323
}
307
- d . x = Math . max ( - overdrag , Math . min ( width + overdrag , d3 . event . x ) ) ;
308
- d . canvasX = d . x * canvasPixelRatio ;
324
+ d . x = Math . max ( - overdrag , Math . min ( d . model . width + overdrag , d3 . event . x ) ) ;
325
+ d . canvasX = d . x * d . model . canvasPixelRatio ;
309
326
panel
310
327
. sort ( function ( a , b ) { return a . x - b . x ; } )
311
328
. each ( function ( dd , i ) {
312
329
dd . xIndex = i ;
313
330
dd . x = d === dd ? dd . x : dd . xScale ( dd . xIndex ) ;
314
- dd . canvasX = dd . x * canvasPixelRatio ;
331
+ dd . canvasX = dd . x * dd . model . canvasPixelRatio ;
315
332
} ) ;
316
333
panel . filter ( function ( dd ) { return Math . abs ( d . xIndex - dd . xIndex ) !== 0 ; } )
317
334
. attr ( 'transform' , function ( d ) { return 'translate(' + d . xScale ( d . xIndex ) + ', 0)' ; } ) ;
@@ -325,7 +342,7 @@ module.exports = function(root, styledData, layout, callbacks) {
325
342
return ;
326
343
}
327
344
d . x = d . xScale ( d . xIndex ) ;
328
- d . canvasX = d . x * canvasPixelRatio ;
345
+ d . canvasX = d . x * d . model . canvasPixelRatio ;
329
346
d3 . select ( this )
330
347
. attr ( 'transform' , function ( d ) { return 'translate(' + d . x + ', 0)' ; } ) ;
331
348
d . parent . contextLineLayer . render ( d . parent . panels , false , ! someFiltersActive ( d . parent ) ) ;
@@ -350,7 +367,7 @@ module.exports = function(root, styledData, layout, callbacks) {
350
367
. append ( 'g' )
351
368
. classed ( 'axis' , true )
352
369
. each ( function ( d ) {
353
- var wantedTickCount = height / d . model . tickDistance ;
370
+ var wantedTickCount = d . model . height / d . model . tickDistance ;
354
371
var scale = d . domainScale ;
355
372
var dom = scale . domain ( ) ;
356
373
d3 . select ( this )
@@ -440,7 +457,7 @@ module.exports = function(root, styledData, layout, callbacks) {
440
457
axisExtentBottom . enter ( )
441
458
. append ( 'g' )
442
459
. classed ( 'axisExtentBottom' , true )
443
- . attr ( 'transform' , 'translate(' + 0 + ',' + ( height + styledData . filterbar . handleheight - 2 ) + ')' ) ;
460
+ . attr ( 'transform' , function ( d ) { return 'translate(' + 0 + ',' + ( d . model . height + styledData . filterbar . handleheight - 2 ) + ')' ; } ) ;
444
461
445
462
var axisExtentBottomText = axisExtentBottom . selectAll ( '.axisExtentBottomText' )
446
463
. data ( repeat , keyFun ) ;
@@ -476,8 +493,8 @@ module.exports = function(root, styledData, layout, callbacks) {
476
493
477
494
axisBrushEnter
478
495
. selectAll ( 'rect' )
479
- . attr ( 'x' , - brushCaptureWidth / 2 )
480
- . attr ( 'width' , brushCaptureWidth ) ;
496
+ . attr ( 'x' , function ( ) { var d = this . parentElement . parentElement . __data__ ; return - d . model . brushCaptureWidth / 2 ; } )
497
+ . attr ( 'width' , function ( ) { var d = this . parentElement . parentElement . __data__ ; return d . model . brushCaptureWidth ; } ) ;
481
498
482
499
axisBrushEnter
483
500
. selectAll ( 'rect.extent' )
@@ -487,13 +504,13 @@ module.exports = function(root, styledData, layout, callbacks) {
487
504
488
505
axisBrushEnter
489
506
. selectAll ( '.resize rect' )
490
- . attr ( 'height' , resizeHeight )
507
+ . attr ( 'height' , function ( ) { var d = this . parentElement . parentElement . __data__ ; return d . model . resizeHeight ; } )
491
508
. attr ( 'opacity' , 0 )
492
509
. style ( 'visibility' , 'visible' ) ;
493
510
494
511
axisBrushEnter
495
512
. selectAll ( '.resize.n rect' )
496
- . attr ( 'y' , - resizeHeight + styledData . filterbar . handleoverlap ) ;
513
+ . attr ( 'y' , function ( ) { var d = this . parentElement . parentElement . __data__ ; return - d . model . resizeHeight + styledData . filterbar . handleoverlap ; } ) ;
497
514
498
515
axisBrushEnter
499
516
. selectAll ( '.resize.s rect' )
0 commit comments