@@ -47,18 +47,36 @@ function hasColorscale(trace, containerStr) {
4747/**
4848 * Extract colorscale into numeric domain and color range.
4949 *
50- * @param {array } scl colorscale array of arrays
51- * @param {number } cmin minimum color value (used to clamp scale)
52- * @param {number } cmax maximum color value (used to clamp scale)
50+ * @param {object } cont colorscale container (e.g. trace, marker)
51+ * - colorscale {array of arrays}
52+ * - cmin/zmin {number}
53+ * - cmax/zmax {number}
54+ * - reversescale {boolean}
55+ * @param {object } opts
56+ * - cLetter {string} 'c' (for cmin/cmax) or 'z' (for zmin/zmax)
57+ *
58+ * @return {object }
59+ * - domain {array}
60+ * - range {array}
5361 */
54- function extractScale ( scl , cmin , cmax ) {
62+ function extractScale ( cont , opts ) {
63+ var cLetter = opts . cLetter ;
64+
65+ var scl = cont . reversescale ?
66+ flipScale ( cont . colorscale ) :
67+ cont . colorscale ;
68+
69+ // minimum color value (used to clamp scale)
70+ var cmin = cont [ cLetter + 'min' ] ;
71+ // maximum color value (used to clamp scale)
72+ var cmax = cont [ cLetter + 'max' ] ;
73+
5574 var N = scl . length ;
5675 var domain = new Array ( N ) ;
5776 var range = new Array ( N ) ;
5877
5978 for ( var i = 0 ; i < N ; i ++ ) {
6079 var si = scl [ i ] ;
61-
6280 domain [ i ] = cmin + si [ 0 ] * ( cmax - cmin ) ;
6381 range [ i ] = si [ 1 ] ;
6482 }
@@ -72,13 +90,11 @@ function extractScale(scl, cmin, cmax) {
7290function flipScale ( scl ) {
7391 var N = scl . length ;
7492 var sclNew = new Array ( N ) ;
75- var si ;
7693
7794 for ( var i = N - 1 , j = 0 ; i >= 0 ; i -- , j ++ ) {
78- si = scl [ i ] ;
95+ var si = scl [ i ] ;
7996 sclNew [ j ] = [ 1 - si [ 0 ] , si [ 1 ] ] ;
8097 }
81-
8298 return sclNew ;
8399}
84100
0 commit comments