1
1
'use strict' ;
2
2
3
+ var helpers = require ( '../helpers/index' ) ;
3
4
var Scale = require ( '../core/core.scale' ) ;
4
5
6
+ var isNullOrUndef = helpers . isNullOrUndef ;
7
+
5
8
var defaultConfig = {
6
9
position : 'bottom'
7
10
} ;
@@ -10,31 +13,43 @@ module.exports = Scale.extend({
10
13
determineDataLimits : function ( ) {
11
14
var me = this ;
12
15
var labels = me . _getLabels ( ) ;
13
- me . minIndex = 0 ;
14
- me . maxIndex = labels . length - 1 ;
16
+ var ticksOpts = me . options . ticks ;
17
+ var min = ticksOpts . min ;
18
+ var max = ticksOpts . max ;
19
+ var minIndex = 0 ;
20
+ var maxIndex = labels . length - 1 ;
15
21
var findIndex ;
16
22
17
- if ( me . options . ticks . min !== undefined ) {
23
+ if ( min !== undefined ) {
18
24
// user specified min value
19
- findIndex = labels . indexOf ( me . options . ticks . min ) ;
20
- me . minIndex = findIndex !== - 1 ? findIndex : me . minIndex ;
25
+ findIndex = labels . indexOf ( min ) ;
26
+ if ( findIndex >= 0 ) {
27
+ minIndex = findIndex ;
28
+ }
21
29
}
22
30
23
- if ( me . options . ticks . max !== undefined ) {
31
+ if ( max !== undefined ) {
24
32
// user specified max value
25
- findIndex = labels . indexOf ( me . options . ticks . max ) ;
26
- me . maxIndex = findIndex !== - 1 ? findIndex : me . maxIndex ;
33
+ findIndex = labels . indexOf ( max ) ;
34
+ if ( findIndex >= 0 ) {
35
+ maxIndex = findIndex ;
36
+ }
27
37
}
28
38
29
- me . min = labels [ me . minIndex ] ;
30
- me . max = labels [ me . maxIndex ] ;
39
+ me . minIndex = minIndex ;
40
+ me . maxIndex = maxIndex ;
41
+ me . min = labels [ minIndex ] ;
42
+ me . max = labels [ maxIndex ] ;
31
43
} ,
32
44
33
45
buildTicks : function ( ) {
34
46
var me = this ;
35
47
var labels = me . _getLabels ( ) ;
48
+ var minIndex = me . minIndex ;
49
+ var maxIndex = me . maxIndex ;
50
+
36
51
// If we are viewing some subset of labels, slice the original array
37
- me . ticks = ( me . minIndex === 0 && me . maxIndex === labels . length - 1 ) ? labels : labels . slice ( me . minIndex , me . maxIndex + 1 ) ;
52
+ me . ticks = ( minIndex === 0 && maxIndex === labels . length - 1 ) ? labels : labels . slice ( minIndex , maxIndex + 1 ) ;
38
53
} ,
39
54
40
55
getLabelForIndex : function ( index , datasetIndex ) {
@@ -49,61 +64,58 @@ module.exports = Scale.extend({
49
64
} ,
50
65
51
66
// Used to get data value locations. Value can either be an index or a numerical value
52
- getPixelForValue : function ( value , index ) {
67
+ getPixelForValue : function ( value , index , datasetIndex ) {
53
68
var me = this ;
54
69
var offset = me . options . offset ;
70
+
55
71
// 1 is added because we need the length but we have the indexes
56
- var offsetAmt = Math . max ( ( me . maxIndex + 1 - me . minIndex - ( offset ? 0 : 1 ) ) , 1 ) ;
72
+ var offsetAmt = Math . max ( me . maxIndex + 1 - me . minIndex - ( offset ? 0 : 1 ) , 1 ) ;
73
+
74
+ var isHorizontal = me . isHorizontal ( ) ;
75
+ var valueDimension = ( isHorizontal ? me . width : me . height ) / offsetAmt ;
76
+ var valueCategory , labels , idx , pixel ;
77
+
78
+ if ( ! isNullOrUndef ( index ) && ! isNullOrUndef ( datasetIndex ) ) {
79
+ value = me . chart . data . datasets [ datasetIndex ] . data [ index ] ;
80
+ }
57
81
58
82
// If value is a data object, then index is the index in the data array,
59
83
// not the index of the scale. We need to change that.
60
- var valueCategory ;
61
- if ( value !== undefined && value !== null ) {
62
- valueCategory = me . isHorizontal ( ) ? value . x : value . y ;
84
+ if ( ! isNullOrUndef ( value ) ) {
85
+ valueCategory = isHorizontal ? value . x : value . y ;
63
86
}
64
87
if ( valueCategory !== undefined || ( value !== undefined && isNaN ( index ) ) ) {
65
- var labels = me . _getLabels ( ) ;
66
- value = valueCategory || value ;
67
- var idx = labels . indexOf ( value ) ;
88
+ labels = me . _getLabels ( ) ;
89
+ value = helpers . valueOrDefault ( valueCategory , value ) ;
90
+ idx = labels . indexOf ( value ) ;
68
91
index = idx !== - 1 ? idx : index ;
69
92
}
70
93
71
- if ( me . isHorizontal ( ) ) {
72
- var valueWidth = me . width / offsetAmt ;
73
- var widthOffset = ( valueWidth * ( index - me . minIndex ) ) ;
74
-
75
- if ( offset ) {
76
- widthOffset += ( valueWidth / 2 ) ;
77
- }
78
-
79
- return me . left + widthOffset ;
80
- }
81
- var valueHeight = me . height / offsetAmt ;
82
- var heightOffset = ( valueHeight * ( index - me . minIndex ) ) ;
94
+ pixel = valueDimension * ( index - me . minIndex ) ;
83
95
84
96
if ( offset ) {
85
- heightOffset += ( valueHeight / 2 ) ;
97
+ pixel += valueDimension / 2 ;
86
98
}
87
99
88
- return me . top + heightOffset ;
100
+ return ( isHorizontal ? me . left : me . top ) + pixel ;
89
101
} ,
90
102
91
103
getPixelForTick : function ( index ) {
92
- return this . getPixelForValue ( this . ticks [ index ] , index + this . minIndex , null ) ;
104
+ return this . getPixelForValue ( this . ticks [ index ] , index + this . minIndex ) ;
93
105
} ,
94
106
95
107
getValueForPixel : function ( pixel ) {
96
108
var me = this ;
97
109
var offset = me . options . offset ;
110
+ var offsetAmt = Math . max ( me . _ticks . length - ( offset ? 0 : 1 ) , 1 ) ;
111
+ var isHorizontal = me . isHorizontal ( ) ;
112
+ var valueDimension = ( isHorizontal ? me . width : me . height ) / offsetAmt ;
98
113
var value ;
99
- var offsetAmt = Math . max ( ( me . _ticks . length - ( offset ? 0 : 1 ) ) , 1 ) ;
100
- var horz = me . isHorizontal ( ) ;
101
- var valueDimension = ( horz ? me . width : me . height ) / offsetAmt ;
102
114
103
- pixel -= horz ? me . left : me . top ;
115
+ pixel -= isHorizontal ? me . left : me . top ;
104
116
105
117
if ( offset ) {
106
- pixel -= ( valueDimension / 2 ) ;
118
+ pixel -= valueDimension / 2 ;
107
119
}
108
120
109
121
if ( pixel <= 0 ) {
0 commit comments