aboutsummaryrefslogtreecommitdiffstats
path: root/ui/app/components/range-slider.js
blob: 6ca6e434e79635fd7f996a34feb763f9e4737da0 (plain) (blame)
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
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 () {
  const props = this.props
  const onChange = props.onChange || function () {}
  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,
        defaultValue: defaultValue,
        onChange: mirrorInput ? this.mirrorInputs.bind(this, name) : onChange,
      }),

      // Mirrored input for range
      mirrorInput ? h('input.large-input', {
        type: 'number',
        name: `${name}Mirror`,
        min: min,
        max: max,
        defaultValue: defaultValue,
        step: increment,
        style: input,
        onChange: this.mirrorInputs.bind(this, `${name}Mirror`),
      }) : null,
    ])
  )
}

RangeSlider.prototype.mirrorInputs = function (active) {
  var range = document.querySelector(`input[name="${this.props.name}"]`)
  var inputMirror = document.querySelector(`input[name="${this.props.name}Mirror"]`)
  if (active === this.props.name) {
    inputMirror.value = range.value
  } else {
    range.value = inputMirror.value
  }
}