@@ -260,9 +260,11 @@ exports.valObjectMeta = {
260
260
'An {array} of plot information.'
261
261
] . join ( ' ' ) ,
262
262
requiredOpts : [ 'items' ] ,
263
- // set dimensions=2 for a 2D array
263
+ // set ` dimensions=2` for a 2D array or '1-2' for either
264
264
// `items` may be a single object instead of an array, in which case
265
265
// `freeLength` must be true.
266
+ // if `dimensions='1-2'` and items is a 1D array, then the value can
267
+ // either be a matching 1D array or an array of such matching 1D arrays
266
268
otherOpts : [ 'dflt' , 'freeLength' , 'dimensions' ] ,
267
269
coerceFunction : function ( v , propOut , dflt , opts ) {
268
270
@@ -278,7 +280,7 @@ exports.valObjectMeta = {
278
280
return out ;
279
281
}
280
282
281
- var twoD = opts . dimensions === 2 ;
283
+ var twoD = opts . dimensions === 2 || ( opts . dimensions === '1-2' && Array . isArray ( v ) && Array . isArray ( v [ 0 ] ) ) ;
282
284
283
285
if ( ! Array . isArray ( v ) ) {
284
286
propOut . set ( dflt ) ;
@@ -288,19 +290,28 @@ exports.valObjectMeta = {
288
290
var items = opts . items ;
289
291
var vOut = [ ] ;
290
292
var arrayItems = Array . isArray ( items ) ;
291
- var len = arrayItems ? items . length : v . length ;
293
+ var arrayItems2D = arrayItems && twoD && Array . isArray ( items [ 0 ] ) ;
294
+ var innerItemsOnly = twoD && arrayItems && ! arrayItems2D ;
295
+ var len = ( arrayItems && ! innerItemsOnly ) ? items . length : v . length ;
292
296
293
- var i , j , len2 , vNew ;
297
+ var i , j , row , item , len2 , vNew ;
294
298
295
299
dflt = Array . isArray ( dflt ) ? dflt : [ ] ;
296
300
297
301
if ( twoD ) {
298
302
for ( i = 0 ; i < len ; i ++ ) {
299
303
vOut [ i ] = [ ] ;
300
- var row = Array . isArray ( v [ i ] ) ? v [ i ] : [ ] ;
301
- len2 = arrayItems ? items [ i ] . length : row . length ;
304
+ row = Array . isArray ( v [ i ] ) ? v [ i ] : [ ] ;
305
+ if ( innerItemsOnly ) len2 = items . length ;
306
+ else if ( arrayItems ) len2 = items [ i ] . length ;
307
+ else len2 = row . length ;
308
+
302
309
for ( j = 0 ; j < len2 ; j ++ ) {
303
- vNew = coercePart ( row [ j ] , arrayItems ? items [ i ] [ j ] : items , ( dflt [ i ] || [ ] ) [ j ] ) ;
310
+ if ( innerItemsOnly ) item = items [ j ] ;
311
+ else if ( arrayItems ) item = items [ i ] [ j ] ;
312
+ else item = items ;
313
+
314
+ vNew = coercePart ( row [ j ] , item , ( dflt [ i ] || [ ] ) [ j ] ) ;
304
315
if ( vNew !== undefined ) vOut [ i ] [ j ] = vNew ;
305
316
}
306
317
}
0 commit comments