import { Slider } from './Slider.js';
export { TimeSlider };
/**
* A slider based on Date objects as specialization of Slider.
*
* Events:
* * changed
*
* @author rkoppe <roland.koppe@awi.de>
* @author rhess <robin.hess@awi.de>
* @memberof vef.ui.slider
*/
class TimeSlider extends Slider {
/**
* @param {string} target
* @param {object} options
*/
constructor(target, options) {
const _options = Object.assign({}, options);
if (_options.min && (_options.min instanceof Date)) _options.min = options.min.getTime();
if (_options.max && (_options.max instanceof Date)) _options.max = options.max.getTime();
if (_options.value) {
if (typeof _options.value === 'object') {
if (_options.value.left && (_options.value.left instanceof Date)) _options.value.left = _options.value.left.getTime();
if (_options.value.right && (_options.value.right instanceof Date)) _options.value.right = _options.value.right.getTime();
} else {
if (_options.value && (_options.value instanceof Date)) _options.value = _options.value.getTime();
}
}
super(target, _options);
}
/**
* Return the current value of the slider handle.
* returns an Object with properties {@code left} and {@code right}
* of the slider has two handles
*
* @override
*/
getValue() {
const value = super.getValue();
// transform integer timestamps to Date objects
if (this.options_.handles == 1) {
return new Date(value);
} else {
return {
left: new Date(value.left),
right: new Date(value.right)
};
}
}
/**
* Update the current value of the slider handle.
* For sliders with two handles {@code value} has to be an
* Object with the properties {@code left} and {@code right}
*
* @param {Date | object} value
* @override
*/
setValue(value) {
if ((typeof value === 'object') && !(value instanceof Date)) {
if (value.left && (value.left instanceof Date)) value.left = value.left.getTime();
if (value.right && (value.right instanceof Date)) value.right = value.right.getTime();
} else {
if (value && (value instanceof Date)) value = value.getTime();
}
super.setValue(value);
}
}