-
Notifications
You must be signed in to change notification settings - Fork 0
/
beyond-extremes.js
70 lines (60 loc) · 3 KB
/
beyond-extremes.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/**
* Highcharts plugin for allowing the input range dates to be beyond the range of the current data in the chart
*/
(function (Highcharts) {
Highcharts.wrap(Highcharts.RangeSelector.prototype, 'drawInput', function(proceed){
var name = arguments[1],
chart = this.chart,
pInt = Highcharts.pInt,
rangeSelector = this,
UNDEFINED = undefined;
//Setup the original drawInput function
proceed.apply(this, Array.prototype.slice.call(arguments, 1));
//Remove the "onchange" binding that drawInput adds
$(this[name + "Input"]).removeAttr("onchange");
//Add the new "onchange" binding
/*
This code is copied out of the source and tweaked to handle the "beyondExtremes" option in rangeSelector
(Some of the variable setup has been changed from the original source to account for this function now being
defined outside of its original context)
*/
$(this[name + "Input"]).bind("change", function(event){
var input = $(event.currentTarget),
inputValue = input.val(),
options = chart.options.rangeSelector,
defaultOptions = chart.options,
value = (options.inputDateParser || Date.parse)(inputValue),
extremes = chart.xAxis[0].getExtremes(),
isMin = name === 'min',
beyondExtremes = (chart.options.rangeSelector.hasOwnProperty("beyondExtremes") &&
chart.options.rangeSelector.beyondExtremes);
// If the value isn't parsed directly to a value by the browser's Date.parse method,
// like YYYY-MM-DD in IE, try parsing it a different way
if (isNaN(value)) {
value = inputValue.split('-');
value = Date.UTC(pInt(value[0]), pInt(value[1]) - 1, pInt(value[2]));
}
if (!isNaN(value)) {
// Correct for timezone offset (#433)
if (!defaultOptions.global.useUTC) {
value = value + new Date().getTimezoneOffset() * 60 * 1000;
}
// Set the extremes
/*
Putting in the "or" between beyondExtremes and the dataMin/Max check maintains the default functionality,
but allows the beyondExtremes flag to override the dataMin/Max check)
*/
if ((isMin && ((beyondExtremes || value >= extremes.dataMin) && value <= rangeSelector.maxInput.HCTime)) ||
(!isMin && ((beyondExtremes || value <= extremes.dataMax) && value >= rangeSelector.minInput.HCTime))) {
chart.xAxis[0].setExtremes(
isMin ? value : extremes.min,
isMin ? extremes.max : value,
UNDEFINED,
UNDEFINED,
{ trigger: 'rangeSelectorInput' }
);
}
}
});
});
}(Highcharts));