8
8
9
9
'use strict' ;
10
10
11
+ var d3 = require ( 'd3' ) ;
11
12
var Plots = require ( '../../plots/plots' ) ;
12
13
var Registry = require ( '../../registry' ) ;
13
14
var xmlnsNamespaces = require ( '../../constants/xmlns_namespaces' ) ;
@@ -34,43 +35,37 @@ exports.clean = function(newFullData, newFullLayout, oldFullData, oldFullLayout)
34
35
oldFullLayout . _paperdiv . selectAll ( '.parcoords-line-layers' ) . remove ( ) ;
35
36
oldFullLayout . _paperdiv . selectAll ( '.parcoords' ) . remove ( ) ;
36
37
oldFullLayout . _paperdiv . selectAll ( '.parcoords' ) . remove ( ) ;
38
+ oldFullLayout . _glimages . selectAll ( '*' ) . remove ( ) ;
37
39
} ;
38
40
39
41
exports . toSVG = function ( gd ) {
40
42
41
- function canvasToImage ( canvas ) {
43
+ var bodyStyle = window . getComputedStyle ( document . body , null ) ;
44
+ var imageRoot = gd . _fullLayout . _glimages ;
45
+ var root = d3 . selectAll ( '.svg-container' ) ;
46
+ var canvases = root . filter ( function ( d , i ) { return i === 0 ; } )
47
+ . selectAll ( '.parcoords-lines.context, .parcoords-lines.focus' ) ;
48
+ var snapshot = root [ 0 ] . length > 1 ;
49
+
50
+ function canvasToImage ( ) {
51
+ var canvas = this ;
42
52
var rect = canvas . getBoundingClientRect ( ) ;
43
- var bodyStyle = window . getComputedStyle ( document . body , null ) ;
44
53
var canvasStyle = window . getComputedStyle ( canvas , null ) ;
45
54
var canvasContentOriginX = parseFloat ( canvasStyle . getPropertyValue ( 'padding-left' ) ) + rect . left ;
46
55
var canvasContentOriginY = parseFloat ( canvasStyle . getPropertyValue ( 'padding-top' ) ) + rect . top ;
47
-
48
56
var imageData = canvas . toDataURL ( 'image/png' ) ;
49
- var image = gd . _fullLayout . _glimages . append ( 'svg:image' ) ;
57
+ var image = imageRoot . append ( 'svg:image' ) ;
50
58
51
59
image . attr ( {
52
60
xmlns : xmlnsNamespaces . svg ,
53
61
'xlink:href' : imageData ,
54
- x : canvasContentOriginX - parseFloat ( bodyStyle . getPropertyValue ( 'margin-left' ) ) ,
55
- y : canvasContentOriginY - parseFloat ( bodyStyle . getPropertyValue ( 'margin-top' ) ) ,
62
+ x : canvasContentOriginX - ( snapshot ? 0 : parseFloat ( bodyStyle . getPropertyValue ( 'margin-left' ) ) ) ,
63
+ y : canvasContentOriginY - ( snapshot ? 0 : parseFloat ( bodyStyle . getPropertyValue ( 'margin-top' ) ) ) ,
56
64
width : parseFloat ( canvasStyle . getPropertyValue ( 'width' ) ) ,
57
- height : parseFloat ( canvasStyle . getPropertyValue ( 'height' ) )
65
+ height : parseFloat ( canvasStyle . getPropertyValue ( 'height' ) ) ,
66
+ preserveAspectRatio : 'none'
58
67
} ) ;
59
68
}
60
69
61
- var canvases = Array . prototype . slice . call ( document . querySelectorAll ( '.parcoords-lines.context, .parcoords-lines.focus' ) ) ;
62
-
63
- /*
64
- var svgs = Array.prototype.slice.call(document.querySelectorAll('.main-svg'));
65
- document.querySelectorAll('.axisTitle')[0].setAttribute('text-anchor', 'begin');
66
- document.querySelectorAll('.axisTitle')[0].style['font-size'] = '16px';
67
- document.querySelectorAll('.axisTitle')[0].innerHTML = svgs.length;
68
- svgs.forEach(function(s) {
69
- //s.style.opacity = 0.1;
70
- //s.style.display = 'none'
71
- //s.parentElement.removeChild(s)
72
- })
73
- */
74
-
75
- canvases . forEach ( canvasToImage ) ;
70
+ canvases . each ( canvasToImage ) ;
76
71
} ;
0 commit comments