|
1 | 1 | /*! |
2 | | - * Chart.Annotation.js |
| 2 | + * chartjs-plugin-annotation.js |
3 | 3 | * http://chartjs.org/ |
4 | | - * Version: 0.1.1 |
| 4 | + * Version: 0.2.0 |
5 | 5 | * |
6 | 6 | * Copyright 2016 Evert Timberg |
7 | 7 | * Released under the MIT license |
@@ -118,8 +118,24 @@ var drawTimeOptions = Chart.Annotation.drawTimeOptions = { |
118 | 118 | beforeDatasetsDraw: "beforeDatasetsDraw", |
119 | 119 | }; |
120 | 120 |
|
| 121 | +function drawAnnotations(drawTime, chartInstance, easingDecimal) { |
| 122 | + var annotationOpts = chartInstance.options.annotation; |
| 123 | + if (annotationOpts.drawTime != drawTime) { |
| 124 | + return; |
| 125 | + } |
| 126 | + // If we have annotations, draw them |
| 127 | + var annotationObjects = chartInstance._annotationObjects; |
| 128 | + if (isArray(annotationObjects)) { |
| 129 | + var ctx = chartInstance.chart.ctx; |
| 130 | + |
| 131 | + annotationObjects.forEach(function(obj) { |
| 132 | + obj.transition(easingDecimal).draw(ctx); |
| 133 | + }); |
| 134 | + } |
| 135 | +} |
| 136 | + |
121 | 137 | // Chartjs Zoom Plugin |
122 | | -var AnnotationPlugin = Chart.PluginBase.extend({ |
| 138 | +var annotationPlugin = { |
123 | 139 | beforeInit: function(chartInstance) { |
124 | 140 | var options = chartInstance.options; |
125 | 141 | options.annotation = helpers.configMerge(Chart.Annotation.defaults, options.annotation); |
@@ -156,45 +172,30 @@ var AnnotationPlugin = Chart.PluginBase.extend({ |
156 | 172 | }, |
157 | 173 |
|
158 | 174 | afterDraw: function(chartInstance, easingDecimal) { |
159 | | - this.drawAnnotations( |
| 175 | + drawAnnotations( |
160 | 176 | Chart.Annotation.drawTimeOptions.afterDraw, |
161 | 177 | chartInstance, |
162 | 178 | easingDecimal |
163 | 179 | ); |
164 | 180 | }, |
165 | 181 | afterDatasetsDraw: function(chartInstance, easingDecimal) { |
166 | | - this.drawAnnotations( |
| 182 | + drawAnnotations( |
167 | 183 | Chart.Annotation.drawTimeOptions.afterDatasetsDraw, |
168 | 184 | chartInstance, |
169 | 185 | easingDecimal |
170 | 186 | ); |
171 | 187 | }, |
172 | 188 | beforeDatasetsDraw: function(chartInstance, easingDecimal) { |
173 | | - this.drawAnnotations( |
| 189 | + drawAnnotations( |
174 | 190 | Chart.Annotation.drawTimeOptions.beforeDatasetsDraw, |
175 | 191 | chartInstance, |
176 | 192 | easingDecimal |
177 | 193 | ); |
178 | | - }, |
179 | | - drawAnnotations: function(drawTime, chartInstance, easingDecimal) { |
180 | | - var annotationOpts = chartInstance.options.annotation; |
181 | | - if (annotationOpts.drawTime != drawTime) { |
182 | | - return; |
183 | | - } |
184 | | - // If we have annotations, draw them |
185 | | - var annotationObjects = chartInstance._annotationObjects; |
186 | | - if (isArray(annotationObjects)) { |
187 | | - var ctx = chartInstance.chart.ctx; |
188 | | - |
189 | | - annotationObjects.forEach(function(obj) { |
190 | | - obj.transition(easingDecimal).draw(ctx); |
191 | | - }); |
192 | | - } |
193 | 194 | } |
194 | | -}); |
| 195 | +}; |
195 | 196 |
|
196 | | -module.exports = AnnotationPlugin; |
197 | | -Chart.pluginService.register(new AnnotationPlugin()); |
| 197 | +module.exports = annotationPlugin; |
| 198 | +Chart.pluginService.register(annotationPlugin); |
198 | 199 |
|
199 | 200 | },{"./box.js":2,"./line.js":4,"chart.js":1}],4:[function(require,module,exports){ |
200 | 201 | // Line Annotation implementation |
@@ -226,22 +227,31 @@ module.exports = function(Chart) { |
226 | 227 | } |
227 | 228 | }); |
228 | 229 |
|
| 230 | + function isValid(num) { |
| 231 | + return !isNaN(num) && isFinite(num); |
| 232 | + } |
| 233 | + |
229 | 234 | function lineUpdate(obj, options, chartInstance) { |
230 | 235 | var model = obj._model = obj._model || {}; |
231 | 236 |
|
232 | 237 | var scale = chartInstance.scales[options.scaleID]; |
233 | 238 | var pixel = scale ? scale.getPixelForValue(options.value) : NaN; |
| 239 | + var endPixel = scale && isValid(options.endValue) ? scale.getPixelForValue(options.endValue) : NaN; |
| 240 | + if (isNaN(endPixel)) |
| 241 | + endPixel = pixel; |
234 | 242 | var chartArea = chartInstance.chartArea; |
235 | 243 |
|
236 | 244 | if (!isNaN(pixel)) { |
237 | 245 | if (options.mode == horizontalKeyword) { |
238 | 246 | model.x1 = chartArea.left; |
239 | 247 | model.x2 = chartArea.right; |
240 | | - model.y1 = model.y2 = pixel; |
| 248 | + model.y1 = pixel; |
| 249 | + model.y2 = endPixel; |
241 | 250 | } else { |
242 | 251 | model.y1 = chartArea.top; |
243 | 252 | model.y2 = chartArea.bottom; |
244 | | - model.x1 = model.x2 = pixel; |
| 253 | + model.x1 = pixel; |
| 254 | + model.x2 = endPixel; |
245 | 255 | } |
246 | 256 | } |
247 | 257 |
|
|
0 commit comments