Skip to content

Commit c9056c3

Browse files
gururaj1512kgryte
andauthored
feat: add route and menu support for axis domain properties
PR-URL: #11858 Co-authored-by: Athan Reines <kgryte@gmail.com> Reviewed-by: Athan Reines <kgryte@gmail.com>
1 parent 9e434da commit c9056c3

6 files changed

Lines changed: 123 additions & 4 deletions

File tree

lib/node_modules/@stdlib/plot/base/view/lib/browser/app/editor/config/axis.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
// MODULES //
2222

23+
var isArray = require( '@stdlib/assert/is-array' );
2324
var defaults = require( './../defaults.js' );
2425
var resolveValue = require( './resolve_value.js' );
2526
var resolveTextValue = require( './resolve_text_value.js' );
@@ -28,10 +29,19 @@ var resolveTextValue = require( './resolve_text_value.js' );
2829
// VARIABLES //
2930

3031
var PROPS = [
32+
'domain',
33+
'domainCap',
34+
'domainColor',
35+
'domainDashOffset',
36+
'domainOpacity',
37+
'domainWidth',
3138
'titleColor',
3239
'titleFont',
3340
'titleOpacity'
3441
];
42+
var ARRAY_PROPS = [
43+
'domainDash'
44+
];
3545
var TEXT_PROPS = [
3646
'title'
3747
];
@@ -56,6 +66,12 @@ function config( conf, schema ) {
5666
for ( i = 0; i < TEXT_PROPS.length; i++ ) {
5767
resolveTextValue( schema, def, conf, TEXT_PROPS[ i ] );
5868
}
69+
for ( i = 0; i < ARRAY_PROPS.length; i++ ) {
70+
resolveValue( schema, def, conf, ARRAY_PROPS[ i ] );
71+
if ( isArray( conf[ ARRAY_PROPS[ i ] ] ) ) {
72+
conf[ ARRAY_PROPS[ i ] ] = conf[ ARRAY_PROPS[ i ] ].join( ', ' );
73+
}
74+
}
5975
for ( i = 0; i < PROPS.length; i++ ) {
6076
resolveValue( schema, def, conf, PROPS[ i ] );
6177
}

lib/node_modules/@stdlib/plot/base/view/lib/browser/app/editor/menus/axis.js

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,26 @@ function addMenu( parent, conf, name ) {
6464
for ( i = 0; i < keys.length; i++ ) {
6565
k = keys[ i ];
6666
d = def[ k ];
67-
if ( k === 'title' ) {
67+
if ( k === 'domain' ) {
68+
controller = folder.add( conf, k );
69+
} else if ( k === 'domainCap' ) {
70+
controller = folder.add( conf, k, EMPTY_STRING.concat( d.values ) );
71+
} else if ( k === 'domainColor' ) {
72+
controller = folder.addColor( conf, k );
73+
} else if ( k === 'domainDash' ) {
74+
controller = folder.add( conf, k );
75+
} else if ( k === 'domainDashOffset' ) {
76+
controller = folder.add( conf, k );
77+
controller.name( format( '%s (%s)', k, d.units ) );
78+
} else if ( k === 'domainOpacity' ) {
79+
controller = folder.add( conf, k )
80+
.min( d.min )
81+
.max( d.max );
82+
} else if ( k === 'domainWidth' ) {
83+
controller = folder.add( conf, k )
84+
.min( d.min );
85+
controller.name( format( '%s (%s)', k, d.units ) );
86+
} else if ( k === 'title' ) {
6887
controller = folder.add( conf, k );
6988
} else if ( k === 'titleColor' ) {
7089
controller = folder.addColor( conf, k );

lib/node_modules/@stdlib/plot/base/view/lib/browser/routes/app/bundle.js

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

lib/node_modules/@stdlib/plot/base/view/lib/browser/routes/config/axes/domain-dash/main.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ var tryAssign = require( './../../../../middleware/plot-try-assign' );
2626
var body = require( './../../../../middleware/body' );
2727
var ok = require( './../../../../middleware/ok' );
2828
var onError = require( './../../../../middleware/error' );
29-
var transform = require( './../../transforms.js' ).toJSON;
29+
var transform = require( './../../transforms.js' ).toIntegerArray;
3030

3131

3232
// VARIABLES //

lib/node_modules/@stdlib/plot/base/view/lib/browser/routes/config/transforms.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,36 @@ function toNumber( value ) {
9696
return v;
9797
}
9898

99+
/**
100+
* Transforms a request body containing comma-separated values to an array of integers.
101+
*
102+
* @private
103+
* @param {string} value - raw request body
104+
* @throws {TypeError} must provide a comma-separated list of integers
105+
* @returns {Array<integer>} transformed value
106+
*/
107+
function toIntegerArray( value ) {
108+
var out;
109+
var tmp;
110+
var v;
111+
var i;
112+
113+
v = trim( value );
114+
if ( v === '' ) {
115+
return [];
116+
}
117+
tmp = v.split( /\s*,\s*/ );
118+
out = [];
119+
for ( i = 0; i < tmp.length; i++ ) {
120+
v = parseInt( tmp[ i ], 10 );
121+
if ( isnan( v ) ) {
122+
throw new TypeError( format( 'invalid argument. Must provide a comma-separated list of integers. Value: `%s`.', value ) );
123+
}
124+
out.push( v );
125+
}
126+
return out;
127+
}
128+
99129
/**
100130
* Transforms a request body to either a string or `undefined`.
101131
*
@@ -122,6 +152,7 @@ var transforms = { // eslint-disable-line vars-on-top
122152
'toInteger': toInteger,
123153
'toJSON': toJSON,
124154
'toNumber': toNumber,
155+
'toIntegerArray': toIntegerArray,
125156
'empty2undefined': empty2undefined
126157
};
127158

lib/node_modules/@stdlib/plot/vega/editor-config/axis/lib/main.js

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@
1818

1919
'use strict';
2020

21+
// MODULES //
22+
23+
var strokeCaps = require( '@stdlib/plot/vega/base/stroke-caps' );
24+
25+
2126
// MAIN //
2227

2328
/**
@@ -31,6 +36,54 @@
3136
*/
3237
function config() {
3338
return {
39+
'domain': {
40+
'description': 'whether to include an axis baseline as part of an axis',
41+
'property': 'domain',
42+
'default': true,
43+
'type': 'boolean'
44+
},
45+
'domainCap': {
46+
'description': 'stroke cap for the axis domain line',
47+
'property': 'domainCap',
48+
'default': 'butt',
49+
'type': 'oneOf',
50+
'values': strokeCaps()
51+
},
52+
'domainColor': {
53+
'description': 'color of the axis domain line',
54+
'property': 'domainColor',
55+
'default': '#000',
56+
'type': 'color'
57+
},
58+
'domainDash': {
59+
'description': 'stroke dash of the axis domain line',
60+
'property': 'domainDash',
61+
'default': '',
62+
'type': 'string'
63+
},
64+
'domainDashOffset': {
65+
'description': 'pixel offset at which to start an axis domain line stroke dash',
66+
'property': 'domainDashOffset',
67+
'default': 0,
68+
'type': 'number',
69+
'units': 'px'
70+
},
71+
'domainOpacity': {
72+
'description': 'opacity of the axis domain line',
73+
'property': 'domainOpacity',
74+
'default': 1,
75+
'type': 'number',
76+
'min': 0,
77+
'max': 1
78+
},
79+
'domainWidth': {
80+
'description': 'stroke width of the axis domain line',
81+
'property': 'domainWidth',
82+
'default': 1,
83+
'type': 'number',
84+
'min': 0,
85+
'units': 'px'
86+
},
3487
'title': {
3588
'description': 'title text',
3689
'property': 'title',
@@ -41,7 +94,7 @@ function config() {
4194
'description': 'color of the title',
4295
'property': 'titleColor',
4396
'default': '#000',
44-
'type': 'string'
97+
'type': 'color'
4598
},
4699
'titleFont': {
47100
'description': 'font of the title',

0 commit comments

Comments
 (0)