@@ -89,7 +89,8 @@ exports.quadrature = function quadrature(dx, dy) {
89
89
*
90
90
* @param {object } pointData : point data object (gets mutated here)
91
91
* @param {object } trace : full trace object
92
- * @param {number } pointNumber : point number
92
+ * @param {number|Array(number) } pointNumber : point number. May be a length-2 array
93
+ * [row, col] to dig into 2D arrays
93
94
*/
94
95
exports . appendArrayPointValue = function ( pointData , trace , pointNumber ) {
95
96
var arrayAttrs = trace . _arrayAttrs ;
@@ -100,22 +101,68 @@ exports.appendArrayPointValue = function(pointData, trace, pointNumber) {
100
101
101
102
for ( var i = 0 ; i < arrayAttrs . length ; i ++ ) {
102
103
var astr = arrayAttrs [ i ] ;
103
- var key ;
104
+ var key = getPointKey ( astr ) ;
104
105
105
- if ( astr === 'ids' ) key = 'id' ;
106
- else if ( astr === 'locations' ) key = 'location' ;
107
- else key = astr ;
106
+ if ( pointData [ key ] === undefined ) {
107
+ var val = Lib . nestedProperty ( trace , astr ) . get ( ) ;
108
+ var pointVal = getPointData ( val , pointNumber ) ;
109
+
110
+ if ( pointVal !== undefined ) pointData [ key ] = pointVal ;
111
+ }
112
+ }
113
+ } ;
114
+
115
+ /**
116
+ * Appends values inside array attributes corresponding to given point number array
117
+ * For use when pointData references a plot entity that arose (or potentially arose)
118
+ * from multiple points in the input data
119
+ *
120
+ * @param {object } pointData : point data object (gets mutated here)
121
+ * @param {object } trace : full trace object
122
+ * @param {Array(number)|Array(Array(number)) } pointNumbers : Array of point numbers.
123
+ * Each entry in the array may itself be a length-2 array [row, col] to dig into 2D arrays
124
+ */
125
+ exports . appendArrayMultiPointValues = function ( pointData , trace , pointNumbers ) {
126
+ var arrayAttrs = trace . _arrayAttrs ;
127
+
128
+ if ( ! arrayAttrs ) {
129
+ return ;
130
+ }
131
+
132
+ for ( var i = 0 ; i < arrayAttrs . length ; i ++ ) {
133
+ var astr = arrayAttrs [ i ] ;
134
+ var key = getPointKey ( astr ) ;
108
135
109
136
if ( pointData [ key ] === undefined ) {
110
137
var val = Lib . nestedProperty ( trace , astr ) . get ( ) ;
138
+ var keyVal = new Array ( pointNumbers . length ) ;
111
139
112
- if ( Array . isArray ( pointNumber ) ) {
113
- if ( Array . isArray ( val ) && Array . isArray ( val [ pointNumber [ 0 ] ] ) ) {
114
- pointData [ key ] = val [ pointNumber [ 0 ] ] [ pointNumber [ 1 ] ] ;
115
- }
116
- } else {
117
- pointData [ key ] = val [ pointNumber ] ;
140
+ for ( var j = 0 ; j < pointNumbers . length ; j ++ ) {
141
+ keyVal [ j ] = getPointData ( val , pointNumbers [ j ] ) ;
118
142
}
143
+ pointData [ key ] = keyVal ;
119
144
}
120
145
}
121
146
} ;
147
+
148
+ var pointKeyMap = {
149
+ ids : 'id' ,
150
+ locations : 'location' ,
151
+ labels : 'label' ,
152
+ values : 'value' ,
153
+ 'marker.colors' : 'color'
154
+ } ;
155
+
156
+ function getPointKey ( astr ) {
157
+ return pointKeyMap [ astr ] || astr ;
158
+ }
159
+
160
+ function getPointData ( val , pointNumber ) {
161
+ if ( Array . isArray ( pointNumber ) ) {
162
+ if ( Array . isArray ( val ) && Array . isArray ( val [ pointNumber [ 0 ] ] ) ) {
163
+ return val [ pointNumber [ 0 ] ] [ pointNumber [ 1 ] ] ;
164
+ }
165
+ } else {
166
+ return val [ pointNumber ] ;
167
+ }
168
+ }
0 commit comments