2016-10-06 22:03:01 +02:00
|
|
|
const Component = require('react').Component
|
|
|
|
const h = require('react-hyperscript')
|
|
|
|
const inherits = require('util').inherits
|
|
|
|
|
|
|
|
module.exports = RangeSlider
|
|
|
|
|
|
|
|
inherits(RangeSlider, Component)
|
|
|
|
function RangeSlider () {
|
|
|
|
Component.call(this)
|
|
|
|
}
|
|
|
|
|
|
|
|
RangeSlider.prototype.render = function () {
|
2016-10-13 04:35:09 +02:00
|
|
|
const state = this.state || {}
|
2016-10-06 22:03:01 +02:00
|
|
|
const props = this.props
|
2016-10-13 04:35:09 +02:00
|
|
|
const onInput = props.onInput || function () {}
|
2016-10-06 22:03:01 +02:00
|
|
|
const name = props.name
|
|
|
|
const {
|
|
|
|
min = 0,
|
|
|
|
max = 100,
|
|
|
|
increment = 1,
|
|
|
|
defaultValue = 50,
|
|
|
|
mirrorInput = false,
|
|
|
|
} = this.props.options
|
|
|
|
const {container, input, range} = props.style
|
|
|
|
|
|
|
|
return (
|
|
|
|
h('.flex-row', {
|
|
|
|
style: container,
|
|
|
|
}, [
|
|
|
|
h('input', {
|
|
|
|
type: 'range',
|
|
|
|
name: name,
|
|
|
|
min: min,
|
|
|
|
max: max,
|
|
|
|
step: increment,
|
|
|
|
style: range,
|
2016-10-13 04:35:09 +02:00
|
|
|
value: state.value || defaultValue,
|
2016-10-14 01:53:32 +02:00
|
|
|
onChange: mirrorInput ? this.mirrorInputs.bind(this, event) : onInput,
|
2016-10-06 22:03:01 +02:00
|
|
|
}),
|
|
|
|
|
|
|
|
// Mirrored input for range
|
|
|
|
mirrorInput ? h('input.large-input', {
|
|
|
|
type: 'number',
|
|
|
|
name: `${name}Mirror`,
|
|
|
|
min: min,
|
|
|
|
max: max,
|
2016-10-13 04:35:09 +02:00
|
|
|
value: state.value || defaultValue,
|
2016-10-06 22:03:01 +02:00
|
|
|
step: increment,
|
|
|
|
style: input,
|
2016-10-14 01:53:32 +02:00
|
|
|
onChange: this.mirrorInputs.bind(this, event),
|
2016-10-06 22:03:01 +02:00
|
|
|
}) : null,
|
|
|
|
])
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
2016-10-14 01:53:32 +02:00
|
|
|
RangeSlider.prototype.mirrorInputs = function (event) {
|
2016-10-13 04:35:09 +02:00
|
|
|
this.setState({value: event.target.value})
|
2016-10-06 22:03:01 +02:00
|
|
|
}
|