Skip to content

Commit 32608b3

Browse files
committed
add a function: updateRanges(Object)
1 parent bf14983 commit 32608b3

File tree

3 files changed

+80
-5
lines changed

3 files changed

+80
-5
lines changed

README.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ new DateRangePicker(bindElement, options, callback);
164164
See [datetime example page](/examples/datetime-example.html)
165165

166166
## Extra
167-
## A Dark Version CSS
167+
### A Dark Version CSS
168168
![Dark Data Time Range Picker](/examples/vanilla-datatime-range-picker-dark.png)
169169

170170
change
@@ -178,6 +178,13 @@ to
178178

179179
See [datetime dark example page](/examples/datetime-example-dark.html)</a>.
180180

181+
### Dynamic DataRange Change (since 0.2.0)
182+
you can change dateranges dynamically.
183+
with extra function ```updateRanges(Object)```
184+
185+
See [datetime example page](/examples/datetime-example.html)</a>.
186+
187+
181188
## Special Thanks
182189
Special thanks to [Dan Grossman](http://www.dangrossman.info/)
183190

dist/vanilla-datetimerange-picker.js

Lines changed: 62 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1710,8 +1710,68 @@ var DateRangePicker;
17101710
}
17111711
delete this.container;
17121712
delete this.element.dataset;
1713-
}
1713+
},
1714+
1715+
updateRanges: function(newRanges){
1716+
if (typeof newRanges === 'object') {
1717+
jq.off(this.container.querySelector('.ranges'), 'click', 'li', this.clickRangeProxy);
1718+
this.ranges = [];
1719+
let rangesKeys = Object.keys(newRanges);
1720+
for(let i = 0; i < rangesKeys.length; ++i){
1721+
let range = rangesKeys[i];
1722+
1723+
if (typeof newRanges[range][0] === 'string')
1724+
start = moment(newRanges[range][0], this.locale.format);
1725+
else
1726+
start = moment(newRanges[range][0]);
1727+
1728+
if (typeof newRanges[range][1] === 'string')
1729+
end = moment(newRanges[range][1], this.locale.format);
1730+
else
1731+
end = moment(newRanges[range][1]);
1732+
1733+
// If the start or end date exceed those allowed by the minDate or maxSpan
1734+
// options, shorten the range to the allowable period.
1735+
if (this.minDate && start.isBefore(this.minDate))
1736+
start = this.minDate.clone();
1737+
1738+
var maxDate = this.maxDate;
1739+
if (this.maxSpan && maxDate && start.clone().add(this.maxSpan).isAfter(maxDate))
1740+
maxDate = start.clone().add(this.maxSpan);
1741+
if (maxDate && end.isAfter(maxDate))
1742+
end = maxDate.clone();
1743+
1744+
// If the end of the range is before the minimum or the start of the range is
1745+
// after the maximum, don't display this range option at all.
1746+
if ((this.minDate && end.isBefore(this.minDate, this.timepicker ? 'minute' : 'day'))
1747+
|| (maxDate && start.isAfter(maxDate, this.timepicker ? 'minute' : 'day')))
1748+
continue;
1749+
1750+
//Support unicode chars in the range names.
1751+
var elem = document.createElement('textarea');
1752+
elem.innerHTML = range;
1753+
var rangeHtml = elem.value;
1754+
1755+
this.ranges[rangeHtml] = [start, end];
1756+
}
1757+
1758+
var list = '<ul>';
1759+
for (range in this.ranges) {
1760+
list += '<li data-range-key="' + range + '">' + range + '</li>';
1761+
}
1762+
if (this.showCustomRangeLabel) {
1763+
list += '<li data-range-key="' + this.locale.customRangeLabel + '">' + this.locale.customRangeLabel + '</li>';
1764+
}
1765+
list += '</ul>';
1766+
let rangeNode = this.container.querySelector('.ranges');
1767+
rangeNode.removeChild(rangeNode.firstChild);
1768+
rangeNode.insertAdjacentHTML('afterbegin', list);
1769+
}
17141770

1771+
this.clickRangeProxy = function (e) { this.clickRange(e); }.bind(this);
1772+
jq.on(this.container.querySelector('.ranges'), 'click', 'li', this.clickRangeProxy);
1773+
}
1774+
17151775
};
17161776

17171777
// alternate jquery function (subset)
@@ -1826,4 +1886,4 @@ var DateRangePicker;
18261886
}
18271887
},
18281888
};
1829-
})();
1889+
})();

examples/datetime-example.html

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,19 @@
88
</head>
99
<body>
1010
<div><input type="text" id="datetimerange-input1" size="40" style="text-align:center"></div>
11+
<div><input type="button" value="change range" onclick='rangeChange();'></div>
1112
<script src="https://cdn.jsdelivr.net/momentjs/latest/moment.min.js" type="text/javascript"></script>
1213
<script src="https://cdn.jsdelivr.net/gh/alumuko/vanilla-datetimerange-picker@latest/dist/vanilla-datetimerange-picker.js"></script>
1314
<script>
15+
var drp;
16+
var rangeChange = function(){
17+
drp.updateRanges({
18+
'Last 3 Days': [moment().subtract(2, 'days').startOf('day'), moment().endOf('day')],
19+
'This Year': [moment().startOf('year').startOf('day'), moment().endOf('year').endOf('day')],
20+
});
21+
};
1422
window.addEventListener("load", function (event) {
15-
let drp = new DateRangePicker('datetimerange-input1',
23+
drp = new DateRangePicker('datetimerange-input1',
1624
{
1725
//startDate: '2000-01-01',
1826
//endDate: '2000-01-03',
@@ -32,7 +40,7 @@
3240
alwaysShowCalendars: true,
3341
//opens: 'center',
3442
//drops: 'up',
35-
//singleDatePicker: true,
43+
singleDatePicker: true,
3644
//autoApply: true,
3745
//linkedCalendars: false,
3846
//isInvalidDate: function(m){

0 commit comments

Comments
 (0)