devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
128 lines (125 loc) • 4.4 kB
JavaScript
/**
* DevExtreme (viz/range_selector/slider.js)
* Version: 18.1.3
* Build date: Tue May 15 2018
*
* Copyright (c) 2012 - 2018 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
;
var commonModule = require("./common"),
animationSettings = commonModule.utils.animationSettings,
formatValue = commonModule.formatValue,
SliderMarker = require("./slider_marker"),
support = require("../../core/utils/support"),
SPLITTER_WIDTH = 8,
TOUCH_SPLITTER_WIDTH = 20;
function getSliderTrackerWidth(sliderHandleWidth) {
return support.touchEvents || support.pointer ? TOUCH_SPLITTER_WIDTH : SPLITTER_WIDTH < sliderHandleWidth ? sliderHandleWidth : SPLITTER_WIDTH
}
function Slider(params, index) {
var that = this;
that._translator = params.translator;
that._sliderGroup = params.renderer.g().attr({
"class": "slider"
}).append(params.root);
that._line = params.renderer.path(null, "line").append(that._sliderGroup);
that._marker = new SliderMarker(params.renderer, that._sliderGroup, 1 === index);
that._tracker = params.renderer.rect().attr({
"class": "slider-tracker",
fill: "#000000",
opacity: 1e-4
}).css({
cursor: "w-resize"
}).append(params.trackersGroup)
}
Slider.prototype = {
constructor: Slider,
cancelAnimation: function() {
this._sliderGroup.stopAnimation();
this._tracker.stopAnimation()
},
applyPosition: function(isAnimated) {
var that = this,
slider = that._sliderGroup,
tracker = that._tracker,
attrs = {
translateX: that._position
};
that._marker.setPosition(that._position);
if (isAnimated) {
slider.animate(attrs, animationSettings);
tracker.animate(attrs, animationSettings)
} else {
slider.attr(attrs);
tracker.attr(attrs)
}
},
_setValid: function(isValid) {
this._marker.setValid(isValid);
this._line.attr({
stroke: this._colors[Number(isValid)]
})
},
_setText: function(text) {
this._marker.setText(text)
},
update: function(verticalRange, sliderHandleOptions, sliderMarkerOptions) {
var that = this;
that._formatOptions = {
format: sliderMarkerOptions.format,
precision: sliderMarkerOptions.precision,
customizeText: sliderMarkerOptions.customizeText
};
that._marker.applyOptions(sliderMarkerOptions, that._translator.getScreenRange());
that._colors = [sliderMarkerOptions.invalidRangeColor, sliderHandleOptions.color];
that._sliderGroup.attr({
translateY: verticalRange[0]
});
that._line.attr({
"stroke-width": sliderHandleOptions.width,
stroke: sliderHandleOptions.color,
"stroke-opacity": sliderHandleOptions.opacity,
sharp: "h",
points: [0, 0, 0, verticalRange[1] - verticalRange[0]]
});
var trackerWidth = getSliderTrackerWidth(sliderHandleOptions.width);
that._tracker.attr({
x: -trackerWidth / 2,
y: 0,
width: trackerWidth,
height: verticalRange[1] - verticalRange[0],
translateY: verticalRange[0]
})
},
toForeground: function() {
this._sliderGroup.toForeground()
},
getSliderTracker: function() {
return this._tracker
},
getPosition: function() {
return this._position
},
setDisplayValue: function(value) {
this._value = value;
this._setText(formatValue(value, this._formatOptions))
},
setOverlapped: function(isOverlapped) {
this._marker.setOverlapped(isOverlapped)
},
getValue: function() {
return this._value
},
on: function(event, handler) {
this._tracker.on(event, handler);
this._marker.getTracker().on(event, handler)
},
getCloudBorder: function() {
return this._marker.getBorderPosition()
},
dispose: function() {
this._marker.dispose()
}
};
module.exports = Slider;